我有这张桌子,每一行都有一个链接来执行功能。使用我拥有的代码,它单击了第一行,而我想要实现的是查找item是否等于该行中的项目,并在找到该行后单击按钮。这是示例:
WebElement baseTable = driver.findElement(By.xpath("//table[@id='materials']"));
List<WebElement> materialsRow = baseTable.findElements(material_table_tr);
List<WebElement> clickAction = driver.findElements(material_first_column);
try {
for (int i = 0; i < materialsRow.size(); i++) {
String name = materialsRow.get(i).getText();
Thread.sleep(500);
if (name.contains(item)) {
clickAction .get(i).click();
} else
throw new Exception("Invalid Selection");
}
} catch (Exception e) {
e.getMessage();
}
预期: item =台北101
在名称与项目相同的行中查找。如果找到,请单击行中的按钮。
实际: 上面的代码仅单击第一行。
HTML:
<tbody>
<tr>
<th scope="row">Burj Khalifa</th>
<td>UAE</td>
<td>Dubai</td>
<td>829m</td>
<td>2010</td>
<td>1</td>
<td><a href="#">details</a></td>
</tr>
<tr class="odd">
<th scope="row">Clock Tower Hotel</th>
<td>Saudi Arabia</td>
<td>Mecca</td>
<td>601m</td>
<td>2012</td>
<td>2</td>
<td><a href="#">details</a></td>
</tr>
<tr>
<th scope="row">Taipei 101</th>
<td>Taiwan</td>
<td>Taipei</td>
<td>509m</td>
<td>2004</td>
<td>3</td>
<td><a href="#">details</a></td>
</tr>
<tr class="odd">
<th scope="row">Financial Center</th>
<td>China</td>
<td>Shanghai</td>
<td>492m</td>
<td>2008</td>
<td>4</td>
<td><a href="#">details</a></td>
</tr>
答案 0 :(得分:0)
您可以将代码更改为
boolean found = false;
for (int i = 0; i < materialsRow.size(); i++) {
String name = materialsRow.get(i).getText();
Thread.sleep(500);
if (name.contains(item)) {
clickAction .get(i).click();
found = true;
break; // do not need to look anymore
}
}
if (!found) throw new Exception ("not found");
答案 1 :(得分:0)
我只是使用下面的xpath而不是循环。
//table//tr[th[.='Taipei 101']]/td/a
截屏:
这是代码的点击行。
driver.findElement(By.xpath("//table//tr[th[.='Taipei 101']]/td/a")).click();
// generic line of code using item
driver.findElement(By.xpath("//table//tr[th[.='" + item +"']]/td/a")).click();
如果要检查然后单击,可以使用以下逻辑。
List<WebElement> items =driver.findElements(By.xpath("//table//tr[th[.='" + item +"']]/td/a"));
if items.size()>0{
// click on the item
items.get(0).click();
}else{
// write your logic here when item not exist
}