我试图创建一个循环浏览多个页面的循环,并为每个页面创建略有不同的测试。它不同步的事实让我失望了,而且我还没有找到办法做到这一点。尝试仅使用普通循环会导致页面始终设置为数组中的最后一页。我尝试过以几种不同的方式使用封口,但没有运气。我认为这是正确的路线。我已经看过this问题了,它给了我一些好主意,但我仍然无法让事情发挥作用。
var bs = new BasicSteps();
describe("Some description", function() {
var pages = ['/page1', '/page2', '/page3'];
var i = 0;
beforeEach(function() {
bs.navigate(pages[i]);
browser.sleep(2000);
i++;
});
for(page in pages) {
// Code for the spec
it('Some spec', function() {
// Some code for the tests
if(page == 1) {
console.log("page1");
}
else if(page == 2) {
console.log("Page2");
}
else if(page == 3) {
console.log("Page3");
}
});
}
});
这打印出Page3
三次,因为循环几乎立即执行。我尝试过使用一个闭包,但这会导致一些模糊的错误,并且在任何运行之前就会崩溃。
var funcs = [];
function createfunc(page) {
return function() {
// Code for the spec
});
}
for(var page = 0; page < pages.length; page++) {
funcs[page] = createfunc(page);
}
for(var j = 0; j < funcs.length; j++) {
funcs[j]();
}
答案 0 :(得分:0)
如果你有一组需要对它们应用相同测试的页面,你可以使用一个闭包来解决Protractors异步promises以在循环中创建测试。
要编写测试循环,您可以执行以下操作:
// Array of objects with name and URL of each page
var pages = [{'name': 'page1', 'url': 'someurl.com/page1'},
{'name': 'page2', 'url': 'someurl.com/page2'}];
describe("Some description", function(){
function specBlock(curPage) {
describe(curPage.name, function(){
it('Some test', function () {
// Test goes here
});
});
};
createSpecBlock = function(specBlock) {
return specBlock;
}
var funcCall = createSpecBlock(specBlock);
pages.forEach(function(curPage){
funcCall(curPage);
});
});