[英]How to type Gmail Body text in Selenium2 (Webdriver) using Java
[英]How to get dynamic body text in Selenium with Java
我需要获取文本值,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<b>Some Text I can find using xPath</b>
<hr>
**TEXT I WOULD LIKE TO FIND THAT IS BEING ADDED DYNAMICALLY - it will be different number every time page loads**
<hr>
**some other text dynamically added**
</body>
</html>
我尝试使用
driver.findElement(By.xpath("/html/body/text()[1]"));
没有运气。
由于WebDriver除元素节点外不处理任何其他事情,因此并非一帆风顺。 不久前,我打开了两个问题:一个针对WebDriver ,另一个针对W3C WebDriver规范 。 (如果有必要,请投票给他们,这有助于显示用户群的需求)。
同时,作为(痛苦的)解决方法,您将需要依赖WebDriver
JavascriptExecutor
功能。 在我的较早答案中 ,有一个示例(因此,必须根据您的具体情况进行调整)。
根据您的情况进行了调整,并附带说明, 其中可能包含由错别字引起的错误 (我没有检查过):
WebElement contextNode=driver.findElement(By.xpath("/html/body"));
if(driver instanceof JavascriptExecutor) {
String jswalker=
"var tw = document.createTreeWalker("
+ "arguments[0],"
+ "NodeFilter.SHOW_TEXT,"
+ "{ acceptNode: function(node) { return NodeFilter.FILTER_ACCEPT;} },"
+ "false"
+ ");"
+ "var ret=null;"
// skip over the number of text nodes indicated by the arguments[1]
+ "var skip;"
+ "for(skip=0; tw.nextNode() && skip<arguments[1]; skip++);"
+ "if(skip==arguments[1]) { " // found before tw.nextNode() ran out
+ "ret=tw.currentNode.wholeText.trim();"
+ "}"
+ "return ret;"
;
int textNodeIndex=3; // there will be empty text nodes before after <b>
Object val=((JavascriptExecutor) driver).executeScript(
jswalker, contextNode, textNodeIndex
);
String textThatINeed=(null!=val ? val.toString() : null);
}
请让我知道它是否/如何工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.