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.
你能告诉我我的评论是否真的找到了一个孩子或者需要纠正什么吗?
1条答案
按热度按时间ncecgwcz1#
子XPath必须是relativeXPath。通常这意味着XPath表达式以点
.
开始,以使此XPath**相对于它应用的节点。即相对于父节点。否则Selenium将从整个页面的顶部开始搜索给定的xpath
(您传递给此方法的参数)。例如,如果传递的
xpath
是"//span[@id='myId']"
,那么它应该是".//span[@id='myId']"
。或者,您可以将此点
.
添加到parent.findElement(By.xpath(xpath));
行中,使其但是用点传递
xpath
是一种更简单明了的方法,特别是当传递的xpath
是像"(//div[@class='myClass'])[5]//input"
这样的复杂表达式时--在这种情况下,自动在这个表达式之前添加一个点可能无法正常工作。