我正在寻找类似的东西:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
我需要使用 JS 获取元素的 innerHTML(在 Selenium WebDriver/Java 中使用它,因为 WebDriver 无法找到它本身),但是如何?
我可以使用 ID 属性,但并非所有元素都具有 ID 属性。
[固定的]
我正在使用 jsoup 在 Java 中完成它。这适合我的需要。
我正在寻找类似的东西:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
我需要使用 JS 获取元素的 innerHTML(在 Selenium WebDriver/Java 中使用它,因为 WebDriver 无法找到它本身),但是如何?
我可以使用 ID 属性,但并非所有元素都具有 ID 属性。
[固定的]
我正在使用 jsoup 在 Java 中完成它。这适合我的需要。
您可以使用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
:
在 Chrome Dev Tools 中,您可以运行以下命令:
$x("some xpath")
对于 chrome 命令行 api 中的 $x 之类的东西(选择多个元素),请尝试:
var xpath = function(xpathToExecute){
var result = [];
var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){
result.push( nodesSnapshot.snapshotItem(i) );
}
return result;
}
此 MDN 概述有所帮助:https : //developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript
要识别WebElement使用路径 和 javascript您必须使用evaluate()
评估xpath表达式并返回结果的方法。
document.evaluate()返回一个XPathResult基于一个的XPath表达式和其它给定的参数。
语法是:
var xpathResult = document.evaluate(
xpathExpression,
contextNode,
namespaceResolver,
resultType,
result
);
在哪里:
xpathExpression
: 表示要评估的 XPath 的字符串。contextNode
:指定查询的上下文节点。通常的做法是document
作为上下文节点传递。namespaceResolver
:将传递任何命名空间前缀的函数,并应返回一个表示与该前缀关联的命名空间 URI 的字符串。它将用于解析 XPath 本身内的前缀,以便它们可以与文档匹配。null
在 HTML 文档或不使用名称空间前缀时很常见。resultType
: 一个整数,它对应于使用命名常量属性返回的结果 XPathResult 的类型,例如XPathResult.ANY_TYPE
XPathResult 构造函数的 ,这些属性对应于从 0 到 9 的整数。result
:用于结果的现有 XPathResult。null
是最常见的,会创建一个新的 XPathResult作为一个例子,搜索框的内谷歌的主页,其可唯一使用被识别的XPath的//*[@name='q']
,也可以使用识别谷歌浏览器开发工具 通过以下命令控制台:
$x("//*[@name='q']")
快照:
也可以使用document.evaluate()
和xpath表达式来识别相同的元素,如下所示:
document.evaluate("//*[@name='q']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
快照:
您可以使用 javascript 的document.evaluate在 DOM 上运行 XPath 表达式。我认为它在浏览器中以一种或另一种方式支持回到 IE 6。
MDN:https : //developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
IE 支持selectNodes。
MSDN:https : //msdn.microsoft.com/en-us/library/ms754523(v= vs.85) .aspx