WebDriver无法找到 - 是[对象XrayWrapper [对象文本]

时间:2014-02-08 19:53:34

标签: java selenium xpath selenium-webdriver

我尝试使用以下路径通过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()验证文本'(会话的额外问题)。

<div class="ad_field">
<label for="survey_id">Survey</label>
(extra questions for session)
<br>

</div>

3 个答案:

答案 0 :(得分:5)

嗯,问题是这个XPath表达式不会找到你的元素,而是你选择了一些文本。

也就是说,错误消息还告诉您: The given selector [...] does not result in a WebElement.

您已经要求.//*[@id='content']/p[4]/text()[1]以函数/text()结尾,该函数不选择节点,而是选择文本。我不确定/text()[1]会做什么但是假设它会选择该文本中的第二个字符。至少我认为可以安全地假设它不会将文本神奇地转换为DOM元素。

然而,

WebDriver假设您的表达式导致它可以表示为WebElement的DOM元素。这个表达式不会因此抛出表达式。

作为提示,您应该打开网页并使用工具在有疑问时手动检查您的XPath。我将Firebug与FirePath AddOn一起用于此,但您可以随意使用您认为有用的任何内容。

答案 1 :(得分:1)

我相信'text()[1]'部分在使用xpath查找元素时是不可接受的。 driver.findElement(By.xpath())在网页中查找标记。但是你的xpath .// * [/ id ='content'] / p [4] / text()[1]并没有指向任何标签。

driver.findElement(By.xpath(".//*[@id='content']/p[4]")).getText();

使用上面的代码获取文本到String并对其进行字符串操作以区分文本。

如果这有助于您,请告诉我。

答案 2 :(得分:0)

使用这个代替:

//*[@id='content']/p[4][1]

要删除/text(),将使xpath的特殊text node起作用。