我正在寻找类似的东西:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
我需要使用JS获取元素的innerHTML(要在Selenium WebDriver / Java中使用它,因为WebDriver本身无法找到它),但是如何?
我可以使用ID属性,但并非所有元素都具有ID属性。
[固定]
我正在使用jsoup在Java中完成它。这符合我的需求。
您可以使用document.evaluate
:
计算XPath表达式字符串,并在可能的情况下返回指定类型的结果。
它是W3标准化的,并且完整记录在案:https : //developer.mozilla.org/zh-CN/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/zh-CN/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate
备用版本,使用XPathEvaluator
:
在Chrome开发工具中,您可以运行以下命令:
$x("some xpath")
对于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
您可以使用javascript的document.evaluate在DOM上运行XPath表达式。我认为在IE 6的浏览器中都以某种方式支持它。
MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/evaluate
IE而是支持selectNodes。
MSDN:https : //msdn.microsoft.com/zh-CN/library/ms754523(v= vs.85) .aspx
使用标识WebElement路径 和 javascript您必须使用evaluate()
评估xpath表达式并返回结果的方法。
document.evaluate()
document.evaluate()返回一个XPathResult基于一个的XPath表达式和其它给定的参数。
语法为:
var xpathResult = document.evaluate(
xpathExpression,
contextNode,
namespaceResolver,
resultType,
result
);
哪里:
xpathExpression
:表示要评估的XPath的字符串。contextNode
:指定查询的上下文节点。常见的做法是通过document
作为上下文节点。namespaceResolver
:该函数将传递任何名称空间前缀,并应返回一个字符串,该字符串表示与该前缀关联的名称空间URI。它将用于解析XPath本身中的前缀,以便它们可以与文档匹配。null
对于HTML文档是常见的,或者不使用名称空间前缀时使用。resultType
:一个整数,它对应于要使用XPathResult构造函数的命名常量属性(例如)返回的结果XPathResult的类型,该属性XPathResult.ANY_TYPE
对应于从0到9的整数。result
:现有的XPathResult用于结果。null
是最常见的,它将创建一个新的XPathResult
示范
作为一个例子,搜索框的内谷歌的主页,其可唯一使用被识别的XPath的//*[@name='q']
,也可以使用识别google-chrome-devtools 通过以下命令进行控制台:
$x("//*[@name='q']")
快照:
也可以使用document.evaluate()
和xpath表达式来标识相同的元素,如下所示:
document.evaluate("//*[@name='q']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
快照:
假设您的目标是为屏幕映射开发和测试xpath查询。然后使用Chrome的开发人员工具。这使您可以运行xpath查询以显示匹配项。或者,在Firefox> 9中,您可以使用Web Developer Tools控制台执行相同的操作。在早期版本中,请使用x-path-finder或Firebug。
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");
}
}
确保使用正确的定位器。
**Different way to Find Element:**
IEDriver.findElement(By.id("id"));
IEDriver.findElement(By.linkText("linkText"));
IEDriver.findElement(By.xpath("xpath"));
IEDriver.findElement(By.xpath(".//*[@id='id']"));
IEDriver.findElement(By.xpath("//button[contains(.,'button name')]"));
IEDriver.findElement(By.xpath("//a[contains(.,'text name')]"));
IEDriver.findElement(By.xpath("//label[contains(.,'label name')]"));
IEDriver.findElement(By.xpath("//*[contains(text(), 'your text')]");
Check Case Sensitive:
IEDriver.findElement(By.xpath("//*[contains(lower-case(text()),'your text')]");
For exact match:
IEDriver.findElement(By.xpath("//button[text()='your text']");
**Find NG-Element:**
Xpath == //td[contains(@ng-show,'childsegment.AddLocation')]
CssSelector == .sprite.icon-cancel
要指出这一点,您可以轻松地使用xapth。请尝试提供反馈。谢谢。
JavascriptExecutor js = (JavascriptExecutor) driver;
//To click an element
WebElement element=driver.findElement(By.xpath(Xpath));
js.executeScript(("arguments[0].click();", element);
//To gettext
String theTextIWant = (String) js.executeScript("return arguments[0].value;",driver.findElement(By.xpath("//input[@id='display-name']")));
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
System.setProperty("webdriver.chrome.driver", "path of your chrome exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com");
driver.findElement(By.xpath(".//*[@id='UserName']")).clear();
driver.findElement(By.xpath(".//*[@id='UserName']")).sendKeys(Email);
文章标签:document.evaluate , javascript , selenium , selenium-webdriver , xpath
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!