有没有办法在Selenium WebDriver中使用JavaScript通过XPath获取元素?

我正在寻找类似的东西:

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

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

我可以使用ID属性,但并非所有元素都具有ID属性 .

[FIXED]

我正在使用jsoup在Java中完成它 . 这符合我的需要 .

回答(6)

3 years ago

你可以使用 document.evaluate

评估XPath表达式字符串,并在可能的情况下返回指定类型的结果 .

这是w3-standardized和整个文件: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

3 years ago

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

$x("some xpath")

3 years ago

对于来自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

3 years ago

您可以使用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

3 years ago

public class 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");
    }
}

确保使用正确的定位器 .

3 years ago

假设您的目标是开发和测试屏幕映射的xpath查询 . 然后使用Chrome's developer tools . 这允许您运行xpath查询以显示匹配项 . 或者在Firefox> 9中,您可以使用Web Developer Tools console执行相同的操作 . 在早期版本中使用x-path-finderFirebug .