编写适用于站点中每个页面的断言的最佳方法是什么?
我正在测试网站的页脚中是否存在某个元素,因此该元素应该存在于所有页面上。
我正在考虑编写一个单独的文件来测试网站的模板元素,然后将其包含在所有规范中。不过似乎没有其他人这样做?
首先,为了编写更干净的测试并更好地了解目标站点的组成部分,请应用页面对象模式 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(使用前将#替换为@)