【问题标题】:Selenium WebDriver find object text. Errors out with The result of the xpath expression is: [object Text]. It should be an elementSelenium WebDriver 查找对象文本。出错 xpath 表达式的结果是:[object Text]。它应该是一个元素
【发布时间】:2025-12-28 19:25:16
【问题描述】:

我正在使用 Selenium 来验证网页中是否存在某些文本。这就是 html 的样子。

<html>
<div class="a-content">
 <!--!-->==$0
 "
        Text to Find"
 <br>
 <br>
 "
        Second Text to find"
 <br>
</div>

我能够识别此文本的唯一方法是通过 xpath。

//div[contains(@class, 'a-content')]//br[1]/preceding-sibling::text()[1] 

我无法使用常规方法来识别此元素,因为它返回对象 Text 而不是元素。

var x = webDriver.FindElement(By.XPath("//div[contains(@class, 'a-content')]//br[1]/preceding-sibling::text()")).Text;

这是我得到的错误:

OpenQA.Selenium.InvalidSelectorException : 无效选择器: xpath 表达式的结果 "//div[contains(@class, 'a-content')]//br[1]/preceding-sibling::text() " 是:[对象文本]。它应该是一个元素。

或者,我尝试使用 JavaScript Executer 来查找此文本对象。但是当我运行下面的代码时,它返回 null。

IJavaScriptExecutor javascriptExecutor = (IJavaScriptExecutor)webDriver;
String value = (String)javascriptExecutor.ExecuteScript("document.evaluate(\"//div[contains(@class, 'a-content')]//br[1]/preceding-sibling::text()[1]\") ; ");

对此的任何帮助表示赞赏。

【问题讨论】:

    标签: javascript selenium selenium-webdriver xpath


    【解决方案1】:

    你应该可以取出“::text()”来获取web元素(然后获取Text属性):

    var x = webDriver.FindElement(By.XPath("//div[contains(@class, 'a-content')]//br[1]/preceding-sibling")).Text;
    

    添加 ::text() 将返回您选择的元素的文本。这是 xapth 的一个特性,不符合 findElement 的 WebElement 期望。

    【讨论】:

    • 不幸的是,如果我删除 text() 它不会识别任何元素 OpenQA.Selenium.NoSuchElementException :没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:” //div[contains(@class, 'a-content')]//br[1]/preceding-sibling"}
    • 试试吧。 "//div[contains(@class, 'a-content')]"
    最近更新 更多