Selenium WebDriverでJavaScriptを使用してXPathで要素を取得する方法はありますか? 質問する

Selenium WebDriverでJavaScriptを使用してXPathで要素を取得する方法はありますか? 質問する

次のようなものを探しています:

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>

おすすめ記事