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

2024-01-06

我正在寻找类似的东西:

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

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

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


您可以使用document.evaluate:

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

It is w3-标准化 https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate并完整记录:https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate 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 https://gist.github.com/yckart/6351935

mozilla 开发者网络上也有一个很棒的介绍:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 Selenium WebDriver 中使用 JavaScript 通过 XPath 获取元素? 的相关文章

随机推荐