2016-07-05 80 views
1

我在這個迭代多個表內

<tbody> 
    <tr> 
     <td> Test1 </td> 
     <td> .. </td> 
    <tr/> 
    <tr> ... </tr> 
</tbody> 
<tbody> 
    <tr> 
     <td> Test2 </td> 
     <td> .. </td> 
    <tr/> 
    <tr> .. </tr> 
</tbody> 
<tbody> 
    <tr> 
     <td> Test3 </td> 
     <td> .. </td> 
    <tr/> 
    <tr> .. </tr> 
</tbody> 

我需要有一個字符串的Test1,Test2的,Test3的列表格式的HTML。我試着做在Ruby中

elements = driver.find_elements(:xpath, "//tbody/tr[1]/td[1]") 
for x in elements 
    puts x.findElement 

以下這似乎並不印出的Test1,Test2的,Test3.Since我不熟悉的紅寶石,我試圖用Java下面,它似乎工作。

List<String> inOneStatement = driver.findElements(By.xpath("//tbody/tr[1]/td[1]")) 
.stream().map(WebElement::getText) 
.collect(Collectors.toList()); 

我怎麼能在Ruby中做到這一點?

回答

1

你應該嘗試,如下面Ruby: -

elements = driver.find_elements(:xpath, "//tbody/tr[1]/td[1]").map(&:text) 
# => [" Test1 ", " Test2 ", " Test3 "] 

編輯: - 實施wait,直到存在下面的所有elements: -

wait = Selenium::WebDriver::Wait.new(:timeout => 10) 
elements = wait.until { driver.find_elements(:xpath, "//tbody/tr[1]/td[1]") } 

elements.each do |el| 
    puts el.text 
end 

希望它會幫助你..: )

+0

這似乎不起作用。返回的內容似乎是空的 –

+0

@JonnyPeppers確保提供的'xPath'正確的只是'$ x(「// tbody/tr [1]/td [1]」)'在瀏覽器控制檯上粘貼它,看看它會發生什麼返回..如果它返回的數組是你想要的那個元素,那麼你應該嘗試實現一些'wait',直到頁面上所有可用的元素都試圖找到。 –