我尝试使用以下路径通过 xpath 定位元素,但收到以下错误。 xpath 有可能找到这个元素吗?还是驱动本身的问题?
我希望能够区分/p[4]/text()[1] 和/p[4]/text()[2] 中的值
.//*[@id='content']/p[4]/text()[1]
org.openqa.selenium.InvalidSelectorException: The given selector .//*[@id='content']/p[4]/text()[1] is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError:xpath 表达式“.//*[@id='content']/p[4]/text()[1]”的结果是:[object XrayWrapper [object Text]]。它应该是一个元素。
这是示例的 html。我正在尝试使用/text() 验证文本“( session 的额外问题)”。
<div class="ad_field">
<label for="survey_id">Survey</label>
(extra questions for session)
<br>
</div>
最佳答案
嗯,问题是这个 XPath 表达式不会为您找到一个元素,而是您选择了一些文本。
也就是说,错误消息还告诉您:
给定的选择器 [...] 不会生成 WebElement。
您要求 .//*[@id='content']/p[4]/text()[1]
以函数 /text( )
它选择的不是一个节点,而是它的文本。我不太确定 /text()[1]
做了什么,但假设它会选择该文本中的第二个字符。至少我认为可以安全地假设它不会神奇地将文本转换为 DOM 元素。
但是,WebDriver 假定您的表达式生成一个 DOM 元素,它可以表示为 WebElement
。这个表达式没有,因此它抛出表达式。
作为提示,您应该打开网页并在有疑问时使用工具手动检查您的 XPath。为此,我将 Firebug 与 FirePath AddOn 结合使用,但您可以随意使用您认为有用的任何内容。
关于java - WebDriver 找不到 - 是 [object XrayWrapper [object Text],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21651033/