获取包含html标记的WebElement文本

时间:2015-04-16 07:42:51

标签: java javascript html selenium

如何使用Selenium获取WebElement的内部HTML?

这是我到目前为止所尝试的:

WebElement divData=driver.findElement(By.id("data"));  
divData.getText();  //returns empty   
OR  
divData.getAttribute("innerHTML"); //returns empty  
OR  
String script="return arguments[0].innerHTML";  
String result=(String) ((JavascriptExecutor)driver).executeScript(script,divData);

System.out.println(""+result); //empty

1 个答案:

答案 0 :(得分:0)

正如我从评论中看到的那样 {quote}

 你好
“这是学校”

{报价}

在树视图中表示以上内容: tree view of HTML

所以基本的webdriver方法WebElement.getText()应该适用于包含文本的任何正确定位的元素。

因此有2种可能找到webelement的文本:

  • I)尝试从与上述div相关的所有分段(孩子)中获取文本:

    List<WebElement> childsOfDiv =driver.findElements(By.cssSelector(#data>*));
    
    for(WebElement iter: childsOfDiv){
        System.out.println(iter.getText());
    }
    
  • II) 通过涉及javascriptexecutor的js方法获取元素的文本 最初的步骤是找到与div相关的子元素的定位器:

    String child1CSS="#data>b";
    String child2CSS="#data>br";
    
    public String getTextInvolvingJs(String cssLocator)
    {
     JavascriptExecutor js = (JavascriptExecutor) driver;
     StringBuilder stringBuilder = new StringBuilder();
    
     stringBuilder.append("var x = $(\""+cssLocator+"\");");
     stringBuilder.append("return x.text().toString();")       ;
    
     String res= (String) js.executeScript(stringBuilder.toString());
     return res;
    
    }
    
    String foundText1= getTextInvolvingJs(child1CSS);
    String foundText2= getTextInvolvingJs(child2CSS);
    

希望这适合你。