I am trying to scan rows in a HTML table using partial href xpath and perform further tests with that row's other column values.
我正在尝试使用部分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>
In cucumber-jvm step definition, I performed this much easily like below (I am more comfortable using Ruby)
在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);
}
}
I am clueless here
我在这里很无能为力
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
}
}
1 个解决方案
#1
12
I think you are looking to do:
我想你想做的事情:
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
This basically says to:
这基本上说:
- Find all trs in the element with id 'blah'
- Iterate through each of the trs
- If the tr does not have a link that has a href containing HONDA, ignore it
- Otherwise, output the text of the row (that matches the criteria). You could do whatever you need with the tr here.
找到id为'blah'的元素中的所有trs
迭代每个trs
如果tr没有包含HONDA的href的链接,请忽略它
否则,输出行的文本(符合条件)。你可以在这里做任何你需要的东西。
You could also use xpath to collapse the above into a single statement. However, I do not think it is as readable:
您还可以使用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
Here is an example of how to inspect each matching row's link url and column values:
以下是如何检查每个匹配行的链接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
#1
12
I think you are looking to do:
我想你想做的事情:
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
This basically says to:
这基本上说:
- Find all trs in the element with id 'blah'
- Iterate through each of the trs
- If the tr does not have a link that has a href containing HONDA, ignore it
- Otherwise, output the text of the row (that matches the criteria). You could do whatever you need with the tr here.
找到id为'blah'的元素中的所有trs
迭代每个trs
如果tr没有包含HONDA的href的链接,请忽略它
否则,输出行的文本(符合条件)。你可以在这里做任何你需要的东西。
You could also use xpath to collapse the above into a single statement. However, I do not think it is as readable:
您还可以使用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
Here is an example of how to inspect each matching row's link url and column values:
以下是如何检查每个匹配行的链接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