【问题标题】:How to locate the element using xpath by searching for a text next to that element如何使用 xpath 通过搜索该元素旁边的文本来定位该元素
【发布时间】:2021-04-25 00:22:42
【问题描述】:

我有以下 HTML 结构

<tr> 
  <td><input name="Choice" type="radio" value="someValue"></td>
  <td><a href="">text</a></td>
</tr>

我想编写一个 Xpath,通过其文本的值找到链接,然后搜索输入元素并执行诸如单击输入单选按钮之类的操作。

我已经尝试过很多这样的 Xpath

//a[contains(text(), 'text')]/ancestor::/td/input

但他们都失败了。 xpath 的第一部分是正确的,但与祖先的第二个路径是它遇到麻烦的地方。

【问题讨论】:

    标签: html selenium selenium-webdriver dom xpath


    【解决方案1】:
    //a[contains(text(), 'text')]/../..//input
    

    //a[contains(text(), 'text')]/ancestor::tr/td/input
    

    只需使用 '..' 转到直接父级,然后找到该父级的输入子标记

    你必须提到要选择哪个祖先标签

    【讨论】:

      【解决方案2】:

      如果你想通过链接文本选择输入节点尝试

      //td[a="text"]/preceding-sibling::td/input
      

      【讨论】:

        【解决方案3】:
        //tr[.//[contains(text(), 'text')]]//input
        

        您可以先搜索包含文本的通用包装器。然后只需在该包装器中搜索所需的元素。

        它不关心元素的顺序,这取决于你的任务。它也不关心元素是否在同一级别,但两个元素都应该在tr 标签内。

        您可以通过添加内部路径或属性选择更精确。

        //tr[td[contains(text(), 'text')]]/td/input
        

        由于某种原因,这种模式很少使用,但我会推荐它,因为它的可读性、简单性和直截了当的方法。

        【讨论】:

          【解决方案4】:

          你已经够近了。要相对于&lt;a&gt; 标记定位&lt;input&gt; 元素,其中文本为text,您可以使用以下任一Locator Strategies

          • 使用 &lt;td&gt; 及其 child 属性:

            //td[.//a[text()='text']]//preceding::td[1]/input
            
          • 使用textContext&lt;a&gt;

            //a[text()='text']//preceding::td[1]/input
            

          【讨论】:

            猜你喜欢
            • 2013-10-14
            • 2023-03-25
            • 2015-10-17
            • 1970-01-01
            • 2019-08-08
            • 1970-01-01
            • 1970-01-01
            • 2021-08-17
            • 2015-09-01
            相关资源
            最近更新 更多