在Selenium WebDriver中,有没有一种通过使用JavaScript获取元素的方法?

我正在寻找像这样的东西:

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

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

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

[固定]

我正在使用jsoup来完成它在Java中完成。 这符合我的需求。 感谢您的答案。 🙂

您可以使用document.evaluate

计算XPathexpression式string,并在可能的情况下返回指定types的结果。

这是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> 

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

 $x("some xpath") 

对于像铬命令行api的$ x(select多个元素)尝试:

 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

您可以使用javascript的document.evaluate在DOM上运行XPathexpression式。 我认为它在浏览器中以某种方式支持IE 6。

MDN: https : //developer.mozilla.org/en-US/docs/Web/API/Document/evaluate

IE支持selectNode

MSDN: https : //msdn.microsoft.com/en-us/library/ms754523(v= vs.85) .aspx

假设你的目标是开发和testing你的XPath查询屏幕地图。 然后使用Chrome的开发者工具 。 这使您可以运行xpath查询来显示匹配项。 或者在Firefox> 9中,您可以使用Web Developer Tools控制台执行相同的操作。 在较早的版本中,使用x-path-finder或Firebug 。

公共类JSElementLocator {

 @Test public void locateElement() throws InterruptedException{ WebDriver driver = WebDriverProducerFactory.getWebDriver("firefox"); driver.get("https://www.google.co.in/"); WebElement searchbox = null; Thread.sleep(1000); searchbox = (WebElement) (((JavascriptExecutor) driver).executeScript("return document.getElementById('lst-ib');", searchbox)); searchbox.sendKeys("hello"); } 

}

确保你使用正确的定位器。

Interesting Posts