亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用帶有環的量角器

使用帶有環的量角器

千萬里不及你 2019-08-28 09:16:27
使用帶有環的量角器循環索引(i)不是我在循環中使用Protractor時所期望的。癥狀:失?。核饕浇?。試圖訪問索引處的元素:'x',但只有'x'元素要么索引是靜態的,始終等于最后一個值我的代碼for (var i = 0; i < MAX; ++i) {   getPromise().then(function() {     someArray[i] // 'i' always takes the value of 'MAX'   })}例如:var expected = ['expect1', 'expect2', 'expect3'];var els = element.all(by.css('selector'));for (var i = 0; i < expected.length; ++i) {   els.get(i).getText().then(function(text) {     expect(text).toEqual(expected[i]); // Error: `i` is always 3.    })}要么var els = element.all(by.css('selector'));for (var i = 0; i < 3; ++i) {   els.get(i).getText().then(function(text) {     if (text === 'should click') {       els.get(i).click(); // fails with "Failed: Index out of bound. Trying to access element at index:3, but there are only 3 elements"     }   })}要么var els = element.all(by.css('selector'));els.then(function(rawelements) {   for (var i = 0; i < rawelements.length; ++i) {     rawelements[i].getText().then(function(text) {       if (text === 'should click') {         rawelements[i].click(); // fails with "Failed: Index out of bound. Trying to access element at index:'rawelements.length', but there are only 'rawelements.length' elements"       }     })   }})
查看完整描述

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
    });
  });

當您需要進行快速調試并輕松調整以供自己使用時,這會派上用場。


查看完整回答
反對 回復 2019-08-28
?
一只名叫tom的貓

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在被允許遞增之前被解析。


我的目的是為讀者提供選擇,而不是對上述內容提出質疑。


查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 526 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號