有没有办法在Selenium WebDriver中使用JavaScript通过XPath获取元素?

我正在寻找类似的东西:

getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

我需要使用JS获取元素的内部HTML(在Selenium WebDriver / Java中使用它,因为WebDriver本身找不到它),但是如何呢?

我可以使用ID属性,但并非所有元素都有ID属性。

[已修复]

我正在使用jsoup在Java中完成它。这符合我的需求。


答案 1

您可以使用 :document.evaluate

计算 XPath 表达式字符串,如果可能,则返回指定类型的结果。

它是w3标准化和完整的文档:https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//html[1]/body[1]/div[1]") );
<div>foo</div>

https://gist.github.com/yckart/6351935

关于 mozilla 开发者网络还有一个很好的介绍:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate


替代版本,使用 :XPathEvaluator

function getElementByXPath(xpath) {
  return new XPathEvaluator()
    .createExpression(xpath)
    .evaluate(document, XPathResult.FIRST_ORDERED_NODE_TYPE)
    .singleNodeValue
}

console.log( getElementByXPath("//html[1]/body[1]/div[1]") );
<div>foo/bar</div>

答案 2

在 Chrome 开发工具中,您可以运行以下命令:

$x("some xpath")