我有一个表,其数据根据添加和删除的内容而变化.在表中有多个列Name,Qty,type,Status.我所拥有的只是名称文本,我需要找到具有该名称的该行的状态字段.
问题是具有相同类名的html标签,我试图抓住父母和兄弟一切都失败了.请找到下表的html结构:
<table>
<thead> </thead>
<tbody>
<tr>
<td class = "c1">
<a class = txtclass> text1 </a>
</td>
<td class = "c1"> Qty </td>
<td class = "c2"> type </td>
<td class = "c3">
<div id = "1" class = "status1"> /div>
</td>
</tr>
<tr>
<td class = "c1">
<a> text2 </a>
</td>
<td class = "c1"> Qty </td>
<td class = "c2"> type </td>
<td class = "c3">
<div id = "2" class = "status2"> /div>
</td>
</tr>
</tbody>
</table>
所以我和我在一起的是text2,我需要获得该行的状态.
我该怎么办?我试过了
List<WebElement> ele = driver.findElements(By.xpath("//*[@class = 'txtClass'][contains(text(),'text')]"));
for(WebElement el1:ele)
{
WebElement parent = el1.findElement(By.xpath(".."));
WebElement child1= parent.findElement(By.xpath("//td[4]/div"));
System.out.println(child1.getAttribute("class"));
}
这给了我总是表中第一行状态的类名.
同样我尝试过
WebElement child = el1.findElement(By.xpath("//following-sibling::td[4]/div[1]"));
我得到了表中第一行的类名.我想,因为所有子元素的类名都相同,所以它总是会抓取第一行元素,而不是行中的元素.
请帮助我被困在这里很长时间,如果您需要任何其他细节,请告诉我.
最佳答案 你正在尝试使用 –
el1.findElements(By.xpath("//following-sibling::td[4]/div[1]"));
它匹配页面中格式为td [4] / div [1]的所有元素,并检索第一个匹配项.
您必须使用以下xpath根据您的文本获取div下的状态.
driver.findElement(By.xpath(".//tr/td[contains(.,'text1')]/following-sibling::td[3]/div")).getAttribute("class");
如果您要求提取所有状态,请尝试以下代码 –
List<WebElement> allElements = driver.findElements(By.xpath(".//tr/td[contains(.,'text2')]/following-sibling::td[3]/div"));
for(WebElement element:allElements)
{
String status = element.getAttribute("class");
System.out.println(status);
}