次のようなものを探しています:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
JS を使用して要素の innerHTML を取得する必要があります (WebDriver 自体では見つけられないため、Selenium WebDriver/Java で使用するため)。どうすればよいでしょうか?
ID 属性を使用することもできますが、すべての要素に ID 属性があるわけではありません。
ベストアンサー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 Developer Network にも素晴らしい紹介があります:https://developer.mozilla.org/en-US/docs/JavaScript での XPath の使用の概要#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>