当前位置: 首页 > 知识库问答 >
问题:

Selenium Webdriver Xpath:查找并比较元素的文本,然后单击4行之后的链接

段干瑞
2023-03-14

我想查找并比较表中的标题。然后单击标题接下来3行中的删除按钮。

示例:假设给定的输入是标题 2。我想搜索标题2并查看它是否存在,然后单击与“标题2”关联的删除按钮(如3-4行之后)。

到目前为止,这是我最接近的代码。唯一的问题是它总是点击第一个选项,而不是我想让它去的地方。

String HeadingName=“Heading 2”
driver.findElement(By.xpath(“//tr[contains(.,'“HeadingName”')]/tr[position()=4]/td[2]/div/a[2]”).click();

这是表和它的代码的样子。

标题1
姓名:Joe
性别:男性< br >选项:更新|删除< br >标题2
姓名:Jenny
性别:女性< br >选项:更新|删除< br >

 <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>

共有3个答案

尉迟景福
2023-03-14

我会尽量让XPath更加“语义化”,例如。

//tr[th = 'Heading 2']/following-sibling::tr[starts-with(td[1], 'Options')][1]//a[. = 'delete']

在这里,我特别寻找下一个“选项”行中的“删除”链接,而不是像“下一个但只有两行的第二个链接”这样更脆弱的链接。

陶腾
2023-03-14

使用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的详细信息,请查看此处 - http://www.w3schools.com/xpath/xpath_axes.asp

盖辉
2023-03-14

试试这个代码,希望它能帮助你。

driver.findElement(By.xpath("//tr/th[contains(text(),'" + HeadingName + "')]//following::tr[3]/td[2]/div/a[2]")).click();

谢谢

 类似资料:
  • 我搞不懂这个。 我在这个网站上工作,我使用Python中的selenium来单击类名“yellow showPopupUnder”下的第一个元素(屏幕的主要部分有20行关于房屋的黄色信息)。 当我让Selenium点击该行后,它会打开并显示更多信息。我对有“选中”和“未选中”框的部分感兴趣。这些复选框位于这样的div中: 未选中的框位于一个div中,如下所示: 我试着用几种方法联系他们: 我还尝试

  • 点击一个元素后,如何使用selenium找到当前url?我有这个网站:http://www.runningintheusa.com/Classic/View.aspx?RaceID=5622 我有代码(假设所有相关的库都已导入) 我运行代码,它只返回原来的网址是http://www.runningintheusa.com/Classic/View.aspx?RaceID=5622 我怎么能找到的网

  • 当单击的elemenet是父元素的最后一个子元素时,我要显示报警。我的HTML结构: 在本例中,我希望在单击该元素(父行的最后一个元素)时显示报警: 我知道我可以使用这样的somethink获得最后一个元素(但我不能在我的例子中使用这个): 我想试着做这样的事,但每次都是假的

  • 当按下按钮时,我想遍历工作表中的所有单元格,找到包含。doc或。xls或。pdf的单元格,并隐藏整行。我知道我不能使用,但肯定有类似的内容。 单元格示例 这是我现在所拥有的,我可以用什么来替换包含?

  • 当您需要查找单列列表的th最后一个元素时,通常的简单方法是执行两个过程。第一个查找列表的长度,第二个迭代到元素。 而优化版本利用了两个指针: 引用列表的头部 是在之前的第2个元素 这允许我们在到达列表末尾时返回的元素。我不明白为什么第二种方法比第一种更快,因为在这两种情况下,我们都有一个指针遍历整个列表,另一个指针一直迭代到元素。 这是因为缓存优化吗? 谢谢

  • 在一个页面中有很多不同的策略可以定位一个元素。在你的项目中, 你可以选择最合适的方法去查找元素。Selenium提供了下列的方法给你: find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_eleme