java 按xpath查找子元素

46qrfjad  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(180)
public WebElement findChildByXpath(WebElement parent, String xpath) {
    loggingService.timeMark("findChildByXpath", "begin. Xpath: " + xpath);

    String parentInnerHtml = parent.getAttribute("innerHTML"); // Uncomment for debug purpose.

    WebElement child = parent.findElement(By.xpath(xpath));

    String childInnerHtml = child.getAttribute("innerHTML"); // Uncomment for debug purpose.

    return child;
}

这段代码的问题是childInnerHtml给了我错误的结果。我刮取数字,它们是相等的。
我甚至假设我的代码等于driver.findElement(By.xpath.
你能告诉我我的评论是否真的找到了一个孩子或者需要纠正什么吗?

ncecgwcz

ncecgwcz1#

子XPath必须是relativeXPath。通常这意味着XPath表达式以点.开始,以使此XPath**相对于它应用的节点。即相对于父节点。否则Selenium将从整个页面的顶部开始搜索给定的xpath(您传递给此方法的参数)。
例如,如果传递的xpath"//span[@id='myId']",那么它应该是".//span[@id='myId']"
或者,您可以将此点.添加到parent.findElement(By.xpath(xpath));行中,使其

WebElement child = parent.findElement(By.xpath("." + xpath));

但是用点传递xpath是一种更简单明了的方法,特别是当传递的xpath是像"(//div[@class='myClass'])[5]//input"这样的复杂表达式时--在这种情况下,自动在这个表达式之前添加一个点可能无法正常工作。

相关问题