功能如下:
如果您搜索名称,搜索结果将显示在行中。在这些结果中,应选择状态为“有效”的一个。要选择一个,您应该单击位于行开头的链接。选择取决于状态。
因此,我尝试从状态“活动”遍历到文本为“名称在此处”的链接,并得到NoSuchElementException
。
代码是:
<tr height="20" class="evenListRowS1">
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">Name goes here</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">email</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">position</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">Solutions - CRM Practice</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','daac0d91-4481-2204-9b62-580600287265');">Mishra</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">email-address</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<a href="javascript:void(0)" onclick="send_back('Users','b559b4f3-20ee-9bb0-320d-5a4f630dea17');">+1 62900*2813</a>
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
Active
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
2018-09-30 02:33 PM
</td>
<td scope="row" align="left" valign="top" class="evenListRowS1" bgcolor="">
<input type="checkbox" disabled="disabled" class="checkbox">
</td>
</tr>
我尝试过
driver.findElement(By.xpath(".//table[@class='list view']/tr[td[8][text()=\"Active\"]/td[1]")).click();
但是我收到了NoSuchElementException。
答案 0 :(得分:2)
因此,您本质上想要这样:
查找表
//table[@class='list view']
在表的行之间跳过任何内容,因为它们并不重要:
//table[@class='list view']//tr
查找第8列的值为Active
的行(由于您使用的是过滤器,因此此处通过过滤器功能更容易识别位置。同样基于HTML,该列中的文本还包含新的行,因此text()='Active'
将不匹配,但是contains
将:
<...>/td[position()=8 and contains(text(),'Active')]
从同一行获取列#1。因此,请使用..
返回行范围,然后选择其他列
<...>/td[position()=8 and contains(text(),'Active')]/../td[1]
完整的xpath是:
//table[@class='list view']//tr/td[position()=8 and contains(text(),'Active')]/../td[1]
答案 1 :(得分:0)
您是否尝试过使用x-path定位要单击的链接?这样的事情可能会起作用,但是您将需要知道如何对其进行自定义以使其在您的情况下起作用。
//table[@id="myTable"]//tr[td[8][text()="Active"]]/td[1]
//table[@id="myTable"]
查找表。将id="myTable"
更改为唯一标识表格的内容。//tr[td[8][text()="Active"]]
查找行。这将为您提供第8列中所有具有“活动”状态的行。/td[1]
/a
中找到链接以下是https://www.w3schools.com/html/html_tables.asp
上的示例 //table[@id="customers"]/tbody/tr[td[2][text()="Maria Anders"]]/td[1]
这将选择第一行中第二列具有“ Maria Anders”的第一个单元格。