【问题标题】:What XPath to select only non-taged text inside div. Selenium. Java什么 XPath 只选择 div 内的非标记文本。硒。爪哇
【发布时间】:2022-04-15 10:20:22
【问题描述】:

我想使用 XPath(Java 中)从下面的代码片段中仅选择文本“仅此文本”,但该文本是随机,我不知道那里写的是什么。

 <div class="A">
    <input id="button" type="button">x</input>
    only this random text
 </div>

什么是最简单的xpath?

 //div[@class='A'][what next?]

我看到类似的问题,但答案总是太复杂,我想知道最简单的方法。

还有没有其他方法,不使用 XPath(在 Java 中)来获取该文本?

谢谢。

【问题讨论】:

    标签: java html xpath selenium


    【解决方案1】:

    您可以使用轴步text()选择文本节点。

    //div[@class='A']/text()
    

    如果您只想要&lt;input/&gt; 节点之后的文本节点,请使用:

    //div[@class="A"]/input/following-sibling::text()
    

    您也可以将任意谓词添加到 &lt;input/&gt; 元素 - 就像您为 &lt;div/&gt; 所做的那样。

    【讨论】:

    • 我猜最初的问题有点不具体。如果没有关于您问题的 cmets,也没有得到它......
    • '//div[@class='A']/text()' 正在工作,但我得到“文本元素”而不是“WebElement”并且我在 JUnit 中得到错误“text() 要么无效或不会产生 WebElement”
    【解决方案2】:

    这行得通:

    //div[@class='A']/node()[not(self::input)]
    

    但它返回文本元素,现在是 WebElement
    似乎没有办法将它作为 WebElement 检索,因为文本应该是这样的元素:

    <div class="A">
        <input id="button" type="button">x</input>
        <text>only this random text</text>
     </div>
    

    【讨论】:

      【解决方案3】:

      使用parent 标签定位并使用 .

      如果div标签内的文本没有标签。

      div[@class='A']
      

      [contains(.,'只有这个随机文本')]

      【讨论】:

        【解决方案4】:

        您也可以通过以下方式找到它:

        //div[.='what next?']
        

        因此,它将返回一个包含此值的 item(div)

        但请记住,这是一个通用映射,如果屏幕上有多个具有此值的项目,则它不会那么准确。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-17
          • 2013-02-13
          • 1970-01-01
          • 2016-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多