2016-03-18 17 views
1

我想知道是否有辦法在量角器中選擇多個鏈接,當你不知道鏈接的數量。目前,我有一個包含多個(數量不詳),我必須選擇鏈接表(點擊和移動頁面),然後經過一系列的流程,測試我寫:在量角器中選擇多個鏈接

<table border="0" class="bodyTable"> 
<tbody><tr class="a"> 
    <th>Name</th> 
    <th>Description</th></tr> 
     <tr class="b"> 
      <td><a href="Link3">Link1</a></td> 
      <td>-</td></tr> 
     <tr class="a"> 
      <td><a href="Link3">Link2</a></td> 
      <td>-</td></tr> 
     <tr class="b"> 
      <td><a href="Link3">Link3</a></td> 
      <td>-</td></tr> 
     <tr class="a"> 
      <td><a href="Link4">Link4</a></td> 
     <td>-</td></tr> 
</tbody> 

這個問題是(我正在使用Protractor異步,因爲這是一個非Angular應用程序),因爲鏈接後面的頁面大部分是相同的,我如何選擇未知列表中的每個元素,而不用重寫一個荒謬的數量的代碼。

我以前的方法是圍繞計數TR的表中,並推出一系列的循環週轉不過是笨拙的,那麼,只是壞代碼:

//something like this 
elements(by.tagName('tr')).count().then(function(numberOfTRs) { 
    for(int i = 1; i <= numberOfTRs; i++) 
    elements(by.tagName('tr')).get(i); 
}); 

不過,承諾繼續後頁加載並且當然會產生錯誤。應該有一種方法可以等待(不使用browser.sleep(...)),但我不確定要做什麼。通常我會研究這個問題,但我甚至不知道要搜索什麼(我猜「白癡搭配以非設計方式使用量角器」會變得很多)。

在此先感謝...

編者按:

一個理想的功能會以這種方式工作

element(whatever).all(listsoflinks).someFunction(function (elementToUse, index) { 
//...do stuff.... 
    //....return to page.... 
}); 

我能找到的將是「每個」功能最接近的事,但它崩潰與錯誤:

Failed: Element not found in the cache - perhaps the page has changed since it was looked up 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html 
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12' 
System info: host: 'BAHCND4397GQF', ip: '10.138.1.15', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_72' 
Driver info: driver.version: unknown 

So, obviously the function is "loosing" its footing when the page change happens

我把計數器(console.log)在「每個」功能和它,當然,飛過,好像它不是諾言的一部分...

回答

1

如何收集鏈接到數組中,循環訪問數組並導航到每個URL:

$$("table.bodyTable tr td a").getAttribute("href").then(function(links) { 
    for(int i = 0; i <= links.length; i++) { 
     browser.get(links[i]); 
     // do smth 
    } 
}); 
+0

這看起來與我之前嘗試過的相似,問題在於頁面會加載,然後立即加載循環中的下一頁(或者由於頁面已更改而不再存在的元素,會被選中),這可能會在循環中使用多個瀏覽器實現來解決,但這與其他任何東西一樣笨拙(必須有這樣做的方式沒有) – jsNoob

+0

@jsNoob它取決於你在身體中有什麼的循環。你到底在做什麼? – alecxe

+0

暫停@alecxe我要做一個編輯我認爲我有我想要做的答案 – jsNoob