Ruby 如何使用Capybara获取HTML表格行

Ruby 如何使用Capybara获取HTML表格行,ruby,selenium-webdriver,cucumber,capybara,cucumber-jvm,Ruby,Selenium Webdriver,Cucumber,Capybara,Cucumber Jvm,我正在尝试使用partial href xpath扫描HTML表中的行,并使用该行的其他列值执行进一步的测试 <div id = "blah"> <table> <tr> <td><a href="afile?key=HONDA">link</a></td> <td>29 33 485</td> <td>45.2934,00

我正在尝试使用partial href xpath扫描HTML表中的行,并使用该行的其他列值执行进一步的测试

  <div id = "blah">
  <table>
    <tr>
      <td><a href="afile?key=HONDA">link</a></td>
      <td>29 33 485</td>
      <td>45.2934,00 EUR</td>
    </tr>
    <tr>
      <td><a href="afile?key=HONDA">link</a></td>
      <td>22 93 485</td>
      <td>38.336.934,123 EUR</td>
    </tr>
    <tr>
      <td><a href="afile?key=something_else">link</a></td>
      <td>394 27 3844</td>
      <td>3.485,2839 EUR</td>
    </tr>    
  </table>
  </div>

我认为您希望做:

page.all('#blah tr').each do |tr|
  next unless tr.has_selector?('a[href*="HONDA"]')

  # Do stuff with trs that meet the href requirement
  puts tr.text
end
#=> link 29 33 485 45.2934,00 EUR
#=> link 22 93 485 38.336.934,123 EUR
这基本上是说:

  • 查找id为“blah”的元素中的所有TR
  • 迭代每个TR
  • 如果tr没有包含本田的href的链接,请忽略它
  • 否则,输出行的文本(与条件匹配)。你可以在这里用tr做任何你需要的事情
  • 您还可以使用xpath将上述内容折叠为一条语句。但是,我认为它没有那么可读:

    page.all(:xpath, '//div[@id="blah"]//tr[.//a[contains(@href, "HONDA")]]').each do |tr|
      # Do stuff with trs that meet the href requirement
      puts tr.text
    end
    #=> link 29 33 485 45.2934,00 EUR
    #=> link 22 93 485 38.336.934,123 EUR
    
    以下是如何检查每个匹配行的链接url和列值的示例:

    page.all('#blah tr').each do |tr|
      next unless tr.has_selector?('a[href*="HONDA"]')
    
      # Do stuff with trs that meet the href requirement
      href = tr.find('a')['href']
      column_value_1 = tr.all('td')[1].text
      column_value_2 = tr.all('td')[2].text
    
      puts href, column_value_1, column_value_2
    end
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 29 33 485
    #=> 45.2934,00 EUR
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 22 93 485
    #=> 38.336.934,123 EUR
    

    Hi Ko,如何获取与xpath匹配的链接的href。我需要用匹配行的列值检查一些东西。那么,如何获得匹配的列(值)?您可以使用普通查找器检查tr。添加了一个示例。我在缓存中未找到Selenium error
    元素-可能页面在查找后已更改…
    。但是,如果我简单地
    放置tr.text
    删除
    tr.has_selector?..
    ,它就会起作用。使用xpath单语句解决方案正在起作用,而且似乎是目前的解决方案。谢谢
    page.all(:xpath, '//div[@id="blah"]//tr[.//a[contains(@href, "HONDA")]]').each do |tr|
      # Do stuff with trs that meet the href requirement
      puts tr.text
    end
    #=> link 29 33 485 45.2934,00 EUR
    #=> link 22 93 485 38.336.934,123 EUR
    
    page.all('#blah tr').each do |tr|
      next unless tr.has_selector?('a[href*="HONDA"]')
    
      # Do stuff with trs that meet the href requirement
      href = tr.find('a')['href']
      column_value_1 = tr.all('td')[1].text
      column_value_2 = tr.all('td')[2].text
    
      puts href, column_value_1, column_value_2
    end
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 29 33 485
    #=> 45.2934,00 EUR
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 22 93 485
    #=> 38.336.934,123 EUR