微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 如何使用Capybara获取HTML表格行

我正在尝试使用部分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>

在cucumber-jvm步骤定义中,我很容易像下面那样执行它(我使用Ruby更舒服)

@Given("^if there are...$")
public void if_there_are...() throws Throwable {
            ...
            ...
           baseTable = driver.findElement(By.id("blah"));
           tblRows = baseTable.findElements(By.tagName("tr"));

        for(WebElement row : tblRows) {                                                 
            if (row.findElements(By.xpath(".//a[contains(@href,'key=HONDA')]")).size() > 0) {
                List<WebElement> col = row.findElements(By.tagName("td")); 
                tblData dummyThing = new tblData();
                dummyThing.col1 = col.get(0).getText();
                dummyThing.col2 = col.get(1).getText();
                dummyThing.col3 = col.get(2).getText();
                dummyThing.col4 = col.get(3).getText();
                dummyThings.add(dummyThing);
            }
        }

在这里很无能为力

page.find('#blah').all('tr').each { |row|
  # if row matches xpath then grab that complete row
  # so that other column values can be verified
  # I am clueless from here
  row.find('td').each do { |c|

  }
  page.find('#blah').all('tr').find(:xpath,".//a[contains(@href,'key=HONDA')]").each { |r|
    #we got the row that matches xpath,let us do something
  }
}

解决方法

我想你想做的事情:
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’查找元素中的所有trs
>迭代每个trs
>如果tr没有包含HONDA的href的链接,请忽略它
>否则,输出行的文本(符合条件).你可以在这里做任何你需要的东西.

您还可以使用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,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

原文地址:https://www.jb51.cc/ruby/269142.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐