首页 > 解决方案 > 如何使用 Selenium 中的以下子项检索没有标签的元素的文本

问题描述

我有一个元素与另一个没有封闭标签的元素是同级的。我正在尝试定位第二个元素,以便检索它的文本。我可以使用div[4]/h5/following-sibling::text()[1]格式从控制台执行此操作parent/sibling/following-sibling::text()[1]。但是 text() 部分破坏了 Selenium,尽管在检查器工具上运行良好。除了获取整个父 div 并破坏其字符串文本之外,不确定如何继续,例如

String dateString = driver.findElement(By.xpath("//mat-dialog-container/ims-presenting-complaint-create/ims-presenting-complaint-details/div/div[3]/div[4]")).getText().split("\\n")[1];

但是感觉可能有更好的方法来获取兄弟元素而不这样做?

在此处输入图像描述

非常感谢。

标签: javaseleniumselenium-webdriverxpath

解决方案


text()返回 TextNode,Selenium 不支持它。它在 devtools 中工作,因为它执行 JQuery。您提到的解决方法是要走的路,或者您可以找到 div 并<h5>从完整文本中删除子文本

WebElement parentElement = driver.findElement(By.xpath("//mat-dialog-container/ims-presenting-complaint-create/ims-presenting-complaint-details/div/div[3]/div[4]"));
String allText = parentElement.getText();
String childText = parentElement.findElement(By.xpath("./h5"));
String dateString = allText.replace(childText, "");

或者你可以使用 JS

String dateString = driver.executeScript("return document.evaluate('div[4]/h5/following-sibling::text()[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.textContent;");

推荐阅读