有一点页面:
<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 回答
可能是由于页面在元素显示之前未完全加载,因此在构建selenium测试时,您将遇到不是错误的错误,只会对浏览器的不一致性和速度造成影响 . 您可以通过构建计划无法找到的项目的稳定代码来为它们做好准备 .
等待功能有帮助
您还可以通过允许程序刷新页面进行准备,如果您认为需要,并在失败时再次尝试测试,双重检查方法 .
对于你的xpath我总是使用,如果他们没有名称或ID
你的xpath似乎是正确的,但我看不到你的页面我无法分辨 . 您的示例适用于此stackoverflow页面:
我知道这很有效,因为我使用FireFox的FirePath扩展进行了测试 . 尝试使用它来测试它:https://addons.mozilla.org/en-US/firefox/addon/firepath/
那应该有一个围绕“某些文字”的span标签 . 这只是糟糕的HTML标记 .
您还可以使用:
我不确定是什么导致了这个问题,但我同意有时会有一个问题 . 我建议你尝试以下方法:
或者,如 redp 建议的那样,您可以使用
*
但请确保正确指定父元素,以防您的页面具有多个具有相同文本的标签:如果内存服务,你可以使用
contains(.,'some text')
的contains(.,'some text')
. 另外,请考虑在检查器工具中仔细检查元素,并注意查看 Properties 选项卡 . 并且,请记住,您可以使用 Inspector 中的搜索找到您的元素,这将为您节省大量时间 .如果这对您有帮助,请更新我 .