繁体   English   中英

如何使用Java在Selenium中获取动态正文

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM