使用selenium webdriver处理表标签

时间:2014-09-09 14:49:19

标签: html selenium

我正在尝试使用selenium web驱动程序从表中找到元素,但由于表id是动态的,我无法点击我想要的那个。

例如在表格中:

       col_1 entity_id      .    . . . .   col_10  
row1     1                                  Edit(Button) delete (button)
row2     2                                  Edit(Button) delete (button) 

所以这里如果我想点击特定的编辑按钮(entity_id)让我们说1,我看不出它们之间有任何关系。有什么办法吗?

以下是HTML标记:

<tr id="tableRow_0" class="even" bgcolor="#e3e3e3">
<td>20003601</td>
<td>AAB Securities Finance - Amsterdam</td>
<td>EQDF</td>
<td>ShortSelling</td>
<td>Y</td>
<td>Y</td>
<td>09-09-2014</td>
<td></td>
<td>TestUser</td>
<td>09-09-2014 17:42:40</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td id="operationCol" width="110" align="center">
<input id="delete_4827" class="hrefButton buttonClass" type="button" onclick="deleteEntityReferenceList(4827)" value="Delete">
<input id="edit_4827" class="hrefButton buttonClass" type="button" onclick="updateEntityReferenceList(4827)" value="Edit">
</td>
<td align="center"> </td>
</tr>

2 个答案:

答案 0 :(得分:0)

对于你的例子,xpath将是这样的:

//tr[td[text()='20001304']]/td/input[@value='Edit']

您可以使用某些变量而不是20001304来表示不同的值。

通常,要根据单元格的内容识别某些列/行的编号,请使用xpath轴(http://www.w3schools.com/Xpath/xpath_axes.asp

答案 1 :(得分:0)

如果您使用的是 .NET 版本的 WebDriver,则可以使用 TableDriver 扩展 (https://github.com/jkindwall/TableDriver.NET)。它是专门为处理此类问题而设计的。解释原始问题中的示例表有点困难,html 代码不完整,但假设表的每一列都有标题,我们假设相关列的标题文本是“实体 ID”和“操作” ,以下应该达到预期的结果。

Table table = Table.Create(driver.FindElement(By.Id("theTableId")));
TableCell cell = table.FindCell("Entity Id=1", "Operation");
cell.Element.FindElement(By.CssSelector("input[value=Edit]")).Click();

更新

TableDriver.Java 现已可用。详情请见:https://github.com/jkindwall/TableDriver.Java