我想登录 - >验证 - >注销多个用户,所以我把它们放在一个循环中。
我按照以下帖子执行此操作以强制执行同步。 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
不是打印出第一个教师,完成顺序操作然后继续执行第二个教师,而是立即打印出两个教师,然后完成第一个操作并抛出异常。
期待:
- print 1 user - &gt;登录 - &gt;验证 - &gt;注销
- print 2 user - &gt;登录 - &gt;验证 - &gt;注销
醇>
实际值:
- 打印1,2位用户
- 1位用户 - &gt;登录 - &gt;验证 - &gt;注销
- 2位用户 - &gt;例外
醇>
我也试过茉莉花的异步支持,但它也没有锻炼
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
更简单的东西答案 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()
块保证按顺序执行。