在 Protractor 中测试模板?

2024-01-14

编写适用于站点中每个页面的断言的最佳方法是什么?

我正在测试网站的页脚中是否存在某个元素,因此该元素应该存在于所有页面上。

我正在考虑编写一个单独的文件来测试网站的模板元素,然后将其包含在所有规范中。不过似乎没有其他人这样做?


首先,为了编写更干净的测试并更好地了解目标站点的组成部分,请应用页面对象模式 https://code.google.com/p/selenium/wiki/PageObjects并将网页的各个部分拆分为不同的页面对象。例如,footer, header可以而且应该是单独的页面对象,可以在站点的不同网页中重复使用。

有关该主题的更多信息:

  • 使用页面对象组织测试 https://github.com/angular/protractor/blob/master/docs/page-objects.md
  • 量角器页面对象(教程,非常详细) https://github.com/Droogans/ProtractorPageObjects
  • 页面对象(马丁·福勒) http://martinfowler.com/bliki/PageObject.html
  • 使用页面对象克服量角器的缺点 http://www.thoughtworks.com/insights/blog/using-page-objects-overcome-protractors-shortcomings

据我理解这个问题,为了遵循“干”原则,你需要某种“共享”茉莉花规格,你可以定义一次并在多个测试套件中运行.

这正是通过共享行为来枯竭 Jasmine 规范 http://pivotallabs.com/drying-up-jasmine-specs-with-shared-behavior/文章正在描述。这个想法相当简单 - 在您的测试套件中定义一个函数并从其他测试套件中调用它。例子:

  • 创建一个接受上下文(页面对象)的函数,并包含页脚特定的可重用测试:

    function testFooter(footer) {
    
        describe("(shared)", function () {
    
            describe("should show footer with necessary information", function () {
                it("should show copyright", function () {
                    expect(footer.copyright.getText()).toEqual('Copyright 2014');
                });
            });
    
        });
    }
    
  • 从传递上下文 - 页脚页面对象的其他测试套件中调用该函数:

    var FooterPage = require('./footer.po.js');
    
    describe('Contacts page', function () {
        var scope = {};
    
        beforeEach(function () {
            browser.get('/contacts/');
            browser.waitForAngular();
            scope.page = new ContactsPage();
        });
    
        // other contacts page specific suites 
        // ...
    
        testFooter(new FooterPage());
    
    });
    

您可能需要调整和改进代码才能使其正常工作,但想法保持不变:定义一次并重用。传递页面对象只会使其更加干净和透明。

另请参阅:

  • 使用 Jasmine 重用测试代码的好方法是什么? https://stackoverflow.com/questions/5061512/whats-a-good-way-to-reuse-test-code-using-jasmine
  • 量角器页面对象继承 https://stackoverflow.com/questions/21466505/protractor-page-objects-inheritance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Protractor 中测试模板? 的相关文章

  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 启用/禁用由用户输入确定的复选框

    我有一个简单的表单 用户可以在其中输入他的联系号码 如果联系号码以 07 开头 则该复选框已启用 其他我需要禁用它的复选框 我已经编写了一些代码 但我面临的问题是 当用户键入 01 时 它会被禁用 但如果他们继续在 01 之后添加任何其他数
  • 搜索深度嵌套数组以更新对象

    我有一个深层嵌套的数据结构 我有兴趣匹配数组 和数组数组 中的某个值 然后将一些数据推送到随附的数组中 例如以下是我的数组colors并伴随着的是更多颜色数组可能存在也可能不存在 var myData color green moreCol
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 判断一个数字是否能被 3 或 5 整除 (FizzBu​​zz)

    如何根据输出是否能被 3 或 5 整除来更改输出 如果它能被 3 整除 我想显示 rock 如果它能被 5 整除 我想显示 star 类似于 FizzBu zz 如果两者都有 他们都会看到 这是我的代码 if var n Math floo
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • Firebase 警告:使用 Firebase Cloud Function 搜索数据时使用未指定的索引

    我构建了一个 Firebase 云函数 用于查找 IsNotificationEnabled 值等于 true 的用户 我的部分职能 export const sendPushNotification functions https onR
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • AngularJS - 获取已定义路由的列表 - $routeProvider

    我正在尝试实施named routes 所以我不必写整个路径 经常改变 我想我可以编写一个服务来返回定义的路由列表和一个将对象转换为路由的过滤器 使用示例如下所示 a Click here a 假设我已将 name detail 添加到我的
  • 强制输入数字小数位

    我想强制
  • Flowtype 属性“msg”缺失为 null 或未定义

    我发现 Flow 很难用 我明白那个Array find可以返回或未定义 因此 通过阅读以下内容 github Array find on Array 引发 https github com facebook flow issues 351
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐