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 關注
- 526 瀏覽
添加回答
舉報