Java Selenium Webdriver Xpath:查找并比较元素的文本,然后单击';后4行
我想找到并比较表中的标题。然后单击标题下3行中的“删除”按钮 示例:假设给定的输入是标题2。我想搜索标题2,看看它是否存在,然后单击与“标题2”关联的删除按钮(如后面的3-4行) 到目前为止,这是我接近的代码。唯一的问题是,它总是单击第一个选择,而不是我希望它去的地方 String HeadingName=“Heading 2”Java Selenium Webdriver Xpath:查找并比较元素的文本,然后单击';后4行,java,selenium,selenium-webdriver,html-table,xpath-2.0,Java,Selenium,Selenium Webdriver,Html Table,Xpath 2.0,我想找到并比较表中的标题。然后单击标题下3行中的“删除”按钮 示例:假设给定的输入是标题2。我想搜索标题2,看看它是否存在,然后单击与“标题2”关联的删除按钮(如后面的3-4行) 到目前为止,这是我接近的代码。唯一的问题是,它总是单击第一个选择,而不是我希望它去的地方 String HeadingName=“Heading 2” driver.findElement(By.xpath(“//tr[contains(,,““+HeadingName+”))]/tr[position()=4]/td
driver.findElement(By.xpath(“//tr[contains(,,““+HeadingName+”))]/tr[position()=4]/td[2]/div/a[2]”)。单击() 这就是表及其代码的外观 标题1
姓名:乔
性别:男性
选项:更新|删除
标题2
姓名:珍妮
性别:女性
选项:更新|删除
<table>
<tbody>
<tr>
<th class="st-head-row" colspan="2">Heading 1</th>
</tr>
<tr class="even">
<td class="st-key">Name:</td>
<td class="st-val">Joe</td>
</tr>
<tr class="even">
<td class="st-key">Gender:</td>
<td class="st-val">Male</td>
</tr>
<tr class="even last-row">
<td class="st-key">Options:</td>
<td class="st-val">
<div style="white-space:nowrap;">
<a id="save" href="linkaddress">save</a>
|
<a id="delete" href="linkaddress">delete</a>
</div>
</td>
</tr>
<tr>
<th class="st-head-row" colspan="2">Heading 2</th>
</tr>
<tr class="even">
<td class="st-key">Name:</td>
<td class="st-val">Jenny</td>
</tr>
<tr class="even">
<td class="st-key">Gender:</td>
<td class="st-val">female</td>
</tr>
<tr class="even last-row">
<td class="st-key">Options:</td>
<td class="st-val">
<div style="white-space:nowrap;">
<a id="save" href="linkaddress">save</a>
|
<a id="delete" href="linkaddress">delete</a>
</div>
</td>
</tr>
</tbody>
</table>
标题1
姓名:
乔
性别:
男性
选项:
|
标题2
姓名:
珍妮
性别:
女性的
选项:
|
使用xpath尝试下一个代码
String headingName = "Heading 2";
driver.findElement(By.xpath("//th[text()='"+ headingName +"']/parent::tr/following-sibling::tr[@class='even last-row']/td[@class='st-val']/div/a[@id='delete']")).click();
如果可行,有关如何创建此xpath的详细信息,请参见-尝试此代码,希望它能帮助您
driver.findElement(By.xpath("//tr/th[contains(text(),'" + HeadingName + "')]//following::tr[3]/td[2]/div/a[2]")).click();
谢谢我会尽量让XPath更“语义化”,例如
在这里,我专门寻找下一个“选项”行中的“删除”链接,而不是像“下一个两行中的第二个链接”这样更脆弱的链接。我实际上给出了一个对我来说出人意料的答案 dUtil.findElement(By.xpath(“//tr/th[contains(text(),“+headingName+”))]/../following::tr[3]/td[2]/div/a[2]”)。单击() 我得到了我想要的一切条件
您好@Dmitry,很遗憾,此代码不起作用。我确实看了你发送的链接,不知怎的,我对该做什么有了很好的理解。如果你对这个问题有更多的想法,我仍然需要帮助。谢谢。我错过了。单击();在我的代码末尾。你能分享一下你在使用它后得到的错误吗?请注意,可以有更多或更少的一批行(一批是从标题到选项)。阿赫罗·朱希,不幸的是,我尝试过这种方法,但没有成功。非常感谢。
//tr[th = 'Heading 2']/following-sibling::tr[starts-with(td[1], 'Options')][1]//a[. = 'delete']