【问题标题】:How to write a locator for the text in between before:: and after::如何为 before:: 和 after:: 之间的文本编写定位器
【发布时间】:2019-08-26 22:32:17
【问题描述】:

我正在尝试为以下文本编写 xpath,并且在 chropath(chrome 插件)中突出显示时它工作正常。但它在运行时失败,尽管它在应用程序中可见。我无法在谷歌中得到正确的答案。请帮我解决这个问题。

<div class="abc">
::before
<content style="">Please fill out this field.</content>
::after
</div>

xpath : //div[@class='abc']//content[contains(text(),\"Please fill out this field\")]

【问题讨论】:

  • 你不应该用这个得到它吗://div[@class='abc']/content/text()
  • 不,它在运行时失败。
  • 分享你用 Selenium 写的代码

标签: javascript selenium selenium-webdriver xpath css-selectors


【解决方案1】:

听起来有点奇怪,但是有时候text()函数会失败,当使用.令牌成功时:

let xpath = "//div[@class = 'abc']//content[contains(., 'Please fill out this field')]";

如果仍然失败,请确保 class 属性不包含多个值,在这种情况下,您还需要在类上使用 contains()

let xpath = "//div[contains(@class, 'abc')]//content[contains(., 'Please fill out this field')]";

【讨论】:

    【解决方案2】:

    根据您分享的 HTML,很明显 HTML DOM 包含动态元素。因此,要将文本标识为请填写此字段的节点。您可以使用以下任一解决方案:

    • cssSelector

      div.abc content[style]
      
    • xpath

      //div[@class='abc']//content[@style and contains(., 'Please fill out this field')]
      

    【讨论】:

      【解决方案3】:

      尝试对 text() 使用单引号。

      //div[@class='abc']//content[contains(text(),'Please fill out this field')]

      或者

      直接指向类似的内容

      //content[contains(text(),'Please fill out this field')]
      

      【讨论】:

        【解决方案4】:

        你需要

        //span[@class="order-num"]/text()
        

        获取所需值

        【讨论】:

        • 在这个问题的任何地方,哪里有 order-num 类的元素?还是&lt;span&gt; 元素?
        猜你喜欢
        • 2022-01-05
        • 2021-06-30
        • 2021-05-21
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 2011-08-14
        相关资源
        最近更新 更多