2017-11-11 177 views
1

我有一些使用ui-grid的Angular應用程序運行的量角器測試。我對應用程序有一些工作冒煙測試,但我剛開始使用https://github.com/angular-ui/ui-grid/blob/master/test/e2e/gridTestUtils.spec.js來測試ui網格組件來執行測試。我遇到的問題是我需要網格元素的實際ID以便使用getGrid函數。使用Selenium /量角器找不到角度ui-grid元素的編號

我能夠使用element(by.css("[id$='-grid-container']"))成功定位元素,但出於某些原因,我試圖從元素中獲取完整ID失敗。這是我想要的:

 var grid = element(by.css("[id$='-grid-container']")); 
     grid.getAttribute('id').then(function(result) { 
      console.log(result); 
      var myGrid = gridTestUtils.getGrid(result.toString()); 

      gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox'); 
     }); 

console.log(result);沒有記錄任何東西。它並不一定與ui-grid相關,只是Selenium由於某種原因沒有找到id。據我可以告訴我正確使用getAttribute;它可以在其他測試中使用這種語法,但也許我錯過了一些東西。任何想法爲什麼這不起作用?

編輯是因爲我的評論不可讀:

感謝您的建議。不過,我還是一樣困惑,因爲

var grid = element(by.css("[id$='-grid-container']")); 
    console.log(grid.toString()); 
    grid.getAttribute('id').then(function(result) { 
     console.log('======'+result); 
     var myGrid = gridTestUtils.getGrid(result.toString()); 

     gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox'); 
    }); 

給出

[object Object] 
====== 

所以它似乎像元素的控制檯輸出被發現,我已經檢查和執行console.log承諾內部正在執行。

就好像它找不到'id',根據API文檔表示元素上沒有id。但這絕對不是事實。

+0

猜測它可能是與硒的webdriver把手的方式逃避css(escapeCss方法)? https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/lib/by.js也許添加一個ID標籤找到另一種方式? – cnishina

+0

問題是ID是動態分配的,我需要抓住它才能使用getGrid。更改網頁的設計不是一種選擇,我沒有發現webElement本身的問題,只需使用getAttribute()從元素中獲取ID即可。 –

回答

0

您的代碼看起來正確。 但是,如果你的console.log(result)沒有記錄任何東西,這意味着你要麼沒有找到該元素,要麼你執行getAttribute()時,該元素不再存在。

請參閱API description,即getAttribute()總是返回值,如果元素存在。

也許嘗試擴展console.log('======='+result);找出,如果該行代碼得到執行(我敢肯定它沒有執行)。如果真的找到元素,請嘗試console.log(grid.toString());,它應該輸出[object Object]

至於ElementFinder,我已經習慣了使用'"只是其他周圍的路,讓element(by.css('[id$="-grid-container"]'));或更短$('[id$="-grid-container"]')

讓我知道,如果這有幫助,你可以進一步確定原因。

回合2

讓我們排除了一些東西

  1. 變化getAttribute('id')getAttribute('outerHTML')看, 如果有任何記錄。

  2. 變化(result)(resultattr)排除,該結果還使用一個插件,誰把result爲全局變量。

  3. 變化grid.getAttribute()element(by.css("[id$='-grid-container']")).getAttribute

是什麼這些行動的結果?

+0

感謝您的建議。然而,我仍然一樣困惑,因爲 'var grid = element(by.css(「[id $ =' - grid-container']」)); console.log(grid.toString()); (函數(結果){ console.log('======'+ result); var myGrid = gridTestUtils.getGrid(result.toString()); gridTestUtils.expectCellValueMatch(myGrid,0,0, '考克斯'); });' 給出 '[對象的對象]' ======控制檯輸出 –

+0

即評論是不可能的讀 - 我將它添加到我的問題中。 –

+0

這確實是一個奇怪的情況。我現在編輯我的答案進一步的調試說明。 –

0

不知道的語義,但你可以試試這個,只是爲了確保你得到的第一個元素,如果多個:

element.all(by.css('[id$="-grid-container"]')).first().getAttribute('id').then(function(result) { 
    console.log(result); 
    var myGrid = gridTestUtils.getGrid(result.toString()); 

    gridTestUtils.expectCellValueMatch(myGrid, 0, 0, 'Cox'); 
}); 
+0

我很確定網頁上只有一個網格容器(這是一個非常簡單的應用程序),但我試圖確保你的建議。沒有運氣。感謝您的建議,讓我知道如果你有任何其他的想法。 –

相關問題