【发布时间】:2017-02-19 04:00:47
【问题描述】:
我正在使用量角器编写 E2E 测试。我不得不从浏览器中获取信息并多次执行一个步骤。
我正在测试一个屏幕,它会在
- 用户点击“开始”
- 登陆新页面
- 调用下面的工作流,计数作为参数传递
-
idhtml id 没有改变。提交当前表单后再次查询时,值会发生变化。
for(i = 0 ; i < count ; i++){
console.log("counter is "+i);
element(by('id')).evaluate('value').then(function(v) {
// do some action on UI based on v
element(by('id1')).sendKeys(v+v);
// submit etc.,
// some angular code runs in the frontend.
}
// need to wait since webdriver jumps to the next one without this completing
}
许多博客文章/文档建议您不能循环使用它,但没有建议任何替代方法来执行此操作。
任何建议表示赞赏。
永远不要在循环中使用量角器元素语句:简单的原因是 webdriverJS(量角器)API 是异步的。元素语句返回一个承诺,并且该承诺处于未解决状态,而语句下方的代码继续执行。这会导致不可预测的结果。因此,建议使用递归函数而不是循环。
来源:http://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/
编辑:更新了包含工作流程细节的问题。
【问题讨论】:
-
您能否在问题中添加更多详细信息 .. 比如 ..
count值是如何确定的,id是否随循环中的每个值而变化。可能是一些上下文更好地回答这个问题 -
count是从另一个函数传递的。id元素在前端发生变化,但评估期间的值没有变化。也会更新问题。
标签: angularjs selenium protractor