我有一个元素与另一个没有封闭标签的元素同级。我正在尝试定位第二个元素,因此可以检索其文本。我可以使用parent/sibling/following-sibling::text()[1]
从控制台执行此操作,因此格式为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];
。但是,尽管在检查器工具上运行良好,但text()部分还是破坏了Selenium。除了获取整个父div并破坏其String文本(例如
{{1}}
但是感觉有没有一种更好的方法来获取同级元素呢?
非常感谢。
答案 0 :(得分:1)
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;");