Selenium用XPath获取div文本时报[object Text]应为元素错误如何解决
错误原因
你编写的XPath通过末尾的text()语法定位到了DOM文本节点,但Selenium的findElements()方法仅支持接收返回DOM元素节点的查询规则,无法直接识别文本节点,因此抛出对应报错。
解决方案
方案1(官方推荐):先定位元素再提取文本
调整XPath仅定位符合要求的div元素,后续调用Selenium内置的getText()方法获取文本内容即可,修改后代码如下:
// 仅定位符合class规则的div元素节点 List<WebElement> priceGameWebElement = webDriver.findElements(By.xpath("//div[contains(@class,'search_price')]")); // 遍历元素提取文本 for (WebElement priceDiv : priceGameWebElement) { // getText()会自动提取元素下的所有可见文本,trim()可去除前后多余空白字符 String priceContent = priceDiv.getText().trim(); // 此处添加后续业务逻辑 }
该写法符合Selenium的设计规范,兼容性和稳定性最高,也方便后续扩展其他对该元素的操作。
方案2:通过JS执行器直接获取文本
如果你确实需要保留XPath里的文本节点过滤逻辑(只取第一个非空文本节点),可以借助JavascriptExecutor执行脚本直接返回文本内容,代码示例如下:
JavascriptExecutor jsExecutor = (JavascriptExecutor) webDriver; List<String> priceTextList = (List<String>) jsExecutor.executeScript( "const xpathResult = document.evaluate(\"//div[contains(@class,'search_price')]/text()[normalize-space()][1]\", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);" + "const result = [];" + "for (let i = 0; i < xpathResult.snapshotLength; i++) {" + " result.push(xpathResult.snapshotItem(i).textContent.trim());" + "}" + "return result;" );
内容的提问来源于stack exchange,提问作者Денис Задорожний
相关产品推荐
相关产品推荐

