首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法通过XPath在Selenium WebDriver中使用JavaScript来获取元素?

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

Stack Overflow用户
提问于 2012-05-15 15:55:18
回答 11查看 446K关注 0票数 343

我正在寻找类似这样的东西:

代码语言:javascript
复制
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

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

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

固定

我正在使用jsoup在Java中完成它。这可以满足我的需求。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-01-12 02:54:11

您可以使用document.evaluate

如果可能,

将计算XPath表达式字符串并返回指定类型的结果。

它是w3-standardized和完整的文档:https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate

代码语言:javascript
复制
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]") );
代码语言:javascript
复制
<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

备用版本,使用XPathEvaluator

代码语言:javascript
复制
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]") );
代码语言:javascript
复制
<div>foo/bar</div>

票数 577
EN

Stack Overflow用户

发布于 2013-12-12 17:21:47

在Chrome Dev Tools中,您可以运行以下命令:

代码语言:javascript
复制
$x("some xpath")
票数 220
EN

Stack Overflow用户

发布于 2014-06-21 00:55:28

对于来自chrome命令行api的类似$x的内容(选择多个元素),可以尝试:

代码语言:javascript
复制
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

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10596417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档