首页 文章

找不到包含一些文字的元素

提问于
浏览
0

有一点页面:

<label>
   <input type="checkbox">

   </input>
"  some text"
</label>

我需要找到一个包含“some text”的元素 . 如果我使用

WebElement().ByXPath("//div/label[contains(text(),'some text')]");

但这并没有给出结果 . 无法找到元素 .

但!!如果我尝试使用这样的元素获取属性(InnerHTML,GetText,innerText)

WebElement.ByXPath("//div/label").GetAttribute("InnerHTML"/"innerText");
   WebElement.ByXPath("//div/label").Text;

有正确的结果(WebElement.ByXPath(“// div / label”) . Text ==“some text”)!

对于此XPath元素:

WebElement().ByXPath("//div/label[contains(@innerHtml,'some text')]");
WebElement().ByXPath("//div/label[contains(@innerText,'some text')]");

它也不起作用 .

为什么这可能?为什么我无法通过页面上的唯一文本找到元素?

4 回答

  • 0

    可能是由于页面在元素显示之前未完全加载,因此在构建selenium测试时,您将遇到不是错误的错误,只会对浏览器的不一致性和速度造成影响 . 您可以通过构建计划无法找到的项目的稳定代码来为它们做好准备 .

    等待功能有帮助

    public IWebElement WaitForElement(By element)
        {
                return new WebDriverWait(this.browser,
                    TimeSpan.FromSeconds(10)).
                    Until(ExpectedConditions.
                    ElementIsVisible(element));
        }
    

    您还可以通过允许程序刷新页面进行准备,如果您认为需要,并在失败时再次尝试测试,双重检查方法 .

    对于你的xpath我总是使用,如果他们没有名称或ID

    By.Xpath("//*[contains(text(), 'Some Text')]");
    
  • 0

    你的xpath似乎是正确的,但我看不到你的页面我无法分辨 . 您的示例适用于此stackoverflow页面:

    //p[contains(text(), 'Why is this possible?')]
    

    我知道这很有效,因为我使用FireFox的FirePath扩展进行了测试 . 尝试使用它来测试它:https://addons.mozilla.org/en-US/firefox/addon/firepath/

  • 0

    那应该有一个围绕“某些文字”的span标签 . 这只是糟糕的HTML标记 .

    您还可以使用:

    //label/text()[last()]
    //label/text()[2]
    
  • 0

    我不确定是什么导致了这个问题,但我同意有时会有一个问题 . 我建议你尝试以下方法:

    //div//label[contains(node(),'some text')]
    

    或者,如 redp 建议的那样,您可以使用 * 但请确保正确指定父元素,以防您的页面具有多个具有相同文本的标签:

    //div//*[contains(node(),'some text')]
    

    如果内存服务,你可以使用 contains(.,'some text')contains(.,'some text') . 另外,请考虑在检查器工具中仔细检查元素,并注意查看 Properties 选项卡 . 并且,请记住,您可以使用 Inspector 中的搜索找到您的元素,这将为您节省大量时间 .

    如果这对您有帮助,请更新我 .

相关问题