如何在量角器测试中按顺序循环连续动作?

时间:2015-09-02 19:00:45

标签: javascript selenium asynchronous callback protractor

我想登录 - >验证 - >注销多个用户,所以我把它们放在一个循环中。

我按照以下帖子执行此操作以强制执行同步。 Looping on a protractor test with parameters

以下是脚本:

 it('instructor setup personal profile', function(){
                var data = [];
                for (var i = 0; i < instructors.length; i++) {
                    (function(instructor) {
                        console.log('instructor in test '+instructor);
                        common.login(url, instructor, password);
                        password = saltare.resetPassword();
                        data.push({'Username':instructor});
                        saltare.setProfile();
                        browser.waitForAngular();
                        expect(element(home_objects.SIGNOUT).isDisplayed).toBeTruthy();
                        home.logout();
                    })(instructors[i]);
                }

                data.push({'Password':password});
                saltare.saveToFile('instructors',data);
            });

以下是打印输出:

instructor in test instructor14412186328231
instructor in test instructor14412186328232

不是打印出第一个教师,完成顺序操作然后继续执行第二个教师,而是立即打印出两个教师,然后完成第一个操作并抛出异常。

期待:

  
      
  1. print 1 user - &gt;登录 - &gt;验证 - &gt;注销
  2.   
  3. print 2 user - &gt;登录 - &gt;验证 - &gt;注销
  4.   

实际值:

  
      
  1. 打印1,2位用户
  2.   
  3. 1位用户 - &gt;登录 - &gt;验证 - &gt;注销
  4.   
  5. 2位用户 - &gt;例外
  6.   

我也试过茉莉花的异步支持,但它也没有锻炼

    it("takes a long time", function(done) {
          setTimeout(function() {
          //test case
            done();
          }, 9000);
        });

有什么东西可以保证顺序执行吗? 比https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

更简单的东西

1 个答案:

答案 0 :(得分:1)

更简洁的方法是为每个用户动态创建单独的规范

describe("Testing instructors", function () {
    var instructors = [
        "user1",
        "user2"
    ];

    instructors.map(function(instructor) {
        it("setup personal profile for instructor '" + instructor + "'", function() {
            // test logic here
        });
    });
});

此方法的一个好处是错误处理:如果某个教师的测试失败,您会立即从规范说明中看到它。

另外,it()块保证按顺序执行。