Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebDriver可以';t find-is[object XrayWrapper[object Text]_Java_Selenium_Xpath_Selenium Webdriver - Fatal编程技术网

Java WebDriver可以';t find-is[object XrayWrapper[object Text]

Java WebDriver可以';t find-is[object XrayWrapper[object Text],java,selenium,xpath,selenium-webdriver,Java,Selenium,Xpath,Selenium Webdriver,我试图通过xpath使用以下路径定位元素,但收到以下错误。xpath是否可能找到此元素?或者这是驱动程序本身的问题 我希望能够区分/p[4]/text()[1]和/p[4]/text()[2]中的值 InvalidSelectorError:xpath表达式“//*[@id='content']]/p[4]/text()[1]”的结果是:[object XrayWrapper[object text]]。它应该是一个元素 这是一个示例的html。我正在尝试用/text()验证文本“(会话的额外问

我试图通过xpath使用以下路径定位元素,但收到以下错误。xpath是否可能找到此元素?或者这是驱动程序本身的问题

我希望能够区分/p[4]/text()[1]和/p[4]/text()[2]中的值

InvalidSelectorError:xpath表达式“//*[@id='content']]/p[4]/text()[1]”的结果是:[object XrayWrapper[object text]]。它应该是一个元素


这是一个示例的html。我正在尝试用/text()验证文本“(会话的额外问题)”


调查
(会议附加问题)


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

也就是说,错误消息还告诉您:
给定的选择器[…]不会生成WebElement。

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

然而,WebDriver假定您的表达式会产生一个DOM元素,它可以表示为
WebElement
。此表达式不会,因此它会抛出该表达式

作为提示,您应该打开网页,并在有疑问时使用工具手动检查XPath。为此,我使用Firebug和FirePath插件,但您可以自由使用任何您认为有用的内容。

我认为使用XPath查找元素时,“text()[1]”部分是不可接受的。driver.findelelement(By.XPath())在网页中查找标记。但是您的xpath.//*[@id='content']/p[4]/text()[1]未指向任何标记

driver.findElement(By.xpath(".//*[@id='content']/p[4]")).getText();
使用上述代码获取字符串的文本,并对其执行字符串操作以区分文本

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

请改用这个:

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

删除
/text()
将使特殊的
xpath
适用于
文本节点

使用时,实际上返回了两行。//*[@id='content']/p[4]。检入firebug firepath将返回/text()[1]和/test()[2]。我希望能够分别验证这两行,而不是同时确认这两行。另一个需要验证的示例是,表单标签右侧有文本,返回/form/div[5]/text()。我可以使用/form/div[5]一起验证标签和文本。但我想分别验证它们。这是html示例。我试图用/text()验证文本(会话的额外问题)。调查(会话的额外问题)
根据我的理解,我认为使用webdriver是不可能的。我使用firebug获取xpath。对于返回的文本,它返回/text()[1]和/text()[2]用于父/p[4]路径中的每一行。我可以仅使用/p[4]来验证这两行,但希望分别验证每一行。这种需要的另一个示例是当表单标签右侧有文本时,返回/form/div[5]/text()。我可以使用/form/div[5]来同时验证标签和文本。但我想分别验证它们。我不太确定您想做什么,但您不能选择
/text()
使用XPath和WebDriver。WebDriver希望您选择一个DOM元素,而不是一个文本节点。并非每个有效的XPath表达式对WebDriver选择
WebElement
都有效。恐怕这个答案并不总是准确的。“文本”和“节点”之间没有对立,因为文本内容也是一个节点-文本节点。因此,
text()
在上下文中选择元素节点的文本节点。此外,
text()[1]
不选择文本的第一个字符,而是选择上下文元素节点的第一个文本节点。
driver.findElement(By.xpath(".//*[@id='content']/p[4]")).getText();
//*[@id='content']/p[4][1]