在多个表

时间:2016-07-05 13:55:04

标签: ruby selenium selenium-webdriver

我有一个HTML格式的

 <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。我尝试在Ruby中执行以下操作

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

这似乎没有打印出Test1,Test2,Test3。由于我不熟悉ruby,我在Java中尝试了以下内容,它似乎有效。

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

我怎么能在Ruby中做到这一点?

1 个答案:

答案 0 :(得分: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

希望它会对你有所帮助.. :)