在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"); }
}
确保你使用正确的定位器。