Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium Webdriver Xpath:查找并比较元素的文本,然后单击';后4行_Java_Selenium_Selenium Webdriver_Html Table_Xpath 2.0 - Fatal编程技术网

Java Selenium Webdriver Xpath:查找并比较元素的文本,然后单击';后4行

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

我想找到并比较表中的标题。然后单击标题下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]”)。单击()

这就是表及其代码的外观

标题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]”)。单击()

我得到了我想要的一切条件

  • 搜索与给定输入标题相似的标题
  • 单击搜索元素下方3行的“删除”链接
  • 即使有多个批次的行,也应工作(批次表示从标题到删除)
  • 这批货不一定要井然有序

  • 您好@Dmitry,很遗憾,此代码不起作用。我确实看了你发送的链接,不知怎的,我对该做什么有了很好的理解。如果你对这个问题有更多的想法,我仍然需要帮助。谢谢。我错过了。单击();在我的代码末尾。你能分享一下你在使用它后得到的错误吗?请注意,可以有更多或更少的一批行(一批是从标题到选项)。阿赫罗·朱希,不幸的是,我尝试过这种方法,但没有成功。非常感谢。
    //tr[th = 'Heading 2']/following-sibling::tr[starts-with(td[1], 'Options')][1]//a[. = 'delete']