ruby – 如何使用Capybara获取HTML表格行
发布时间:2020-12-17 04:30:06 所属栏目:百科 来源:网络整理
导读:我正在尝试使用部分href xpath扫描 HTML表中的行,并使用该行的其他列值执行进一步的测试. div id = "blah" table tr tda href="afile?key=HONDA"link/a/td td29 33 485/td td45.2934,00 EUR/td /tr tr tda href="afile?key=HONDA"link/a/td td22 93 485/td t
我正在尝试使用部分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 您还可以使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |