3 回答
TA贡献1866条经验 获得超5个赞
汉克在回答这个问题上做得很好。
我还要注意另一种快速而肮脏的方法来处理这个问题。只需将promise内容移动到某个外部函数并将其传递给索引。
例如,如果要在页面上以各自的索引(从ElementArrayFinder)记录所有列表项,您可以执行以下操作:
var log_at_index = function (matcher, index) { return $$(matcher).get(index).getText().then(function (item_txt) { return console.log('item[' + index + '] = ' + item_txt); }); }; var css_match = 'li'; it('should log all items found with their index and displayed text', function () { $$(css_match).count().then(function (total) { for(var i = 0; i < total; i++) log_at_index(css_match, i); // move promises to external function }); });
当您需要进行快速调试并轻松调整以供自己使用时,这会派上用场。
TA贡献1906条经验 获得超3个赞
我不是在讨论上面讨论的学识渊博的人的逻辑或智慧。我写道指出,在一个声明为异步的函数中的当前版本的Protractor中,如下所示的for循环(我在typeScript中编写,合并来自@ hetznercloud / protractor-test-helper的flowLog,虽然我相信控制台。日志也可以在这里工作)行为就像人们可能天真地期待的那样。
let inputFields = await element.all(by.tagName('input'));
let i: number;
flowLog('count = '+ inputFields.length);
for (i=0; i < inputFields.length; i++){
flowLog(i+' '+await inputFields[i].getAttribute('id')+' '+await inputFields[i].getAttribute('value'));
}
产生的输出就像
count = 44
0 7f7ac149-749f-47fd-a871-e989a5bd378e 1
1 7f7ac149-749f-47fd-a871-e989a5bd3781 2
2 7f7ac149-749f-47fd-a871-e989a5bd3782 3
3 7f7ac149-749f-47fd-a871-e989a5bd3783 4
4 7f7ac149-749f-47fd-a871-e989a5bd3784 5
5 7f7ac149-749f-47fd-a871-e989a5bd3785 6
...
42 7f7ac149-749f-47fd-a871-e989a5bd376a 1
43 7f7ac149-749f-47fd-a871-e989a5bd376b 2
据我所知,这await是关键,强制数组在前面被解析(因此计数是正确的)并且await循环中的s导致每个promise在被允许递增之前被解析。
我的目的是为读者提供选择,而不是对上述内容提出质疑。
- 3 回答
- 0 关注
- 485 浏览
添加回答
举报