循环遍历页面以在量角器中创建测试

时间:2016-06-12 01:36:12

标签: javascript selenium webdriver protractor

我试图创建一个循环浏览多个页面的循环,并为每个页面创建略有不同的测试。它不同步的事实让我失望了,而且我还没有找到办法做到这一点。尝试仅使用普通循环会导致页面始终设置为数组中的最后一页。我尝试过以几种不同的方式使用封口,但没有运气。我认为这是正确的路线。我已经看过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]();
}

1 个答案:

答案 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);
  });
});