Selenium Java-需要从第3个html子元素中获取innertext值

时间:2016-11-21 11:47:15

标签: java selenium selenium-webdriver

以下是html代码

<h2 id="xyz" class="test">
  <button class="restore 1" value="test2" title="hello"> Line1 </button>
  <button class="restore 2" value="test3" title="click"> Line2 </button>
  I need this text
</h2>

我需要从上面的代码中提取“我需要这个文本”的文字。

我尝试了以下方法,但无法得到唯一的一行“我需要这个文字:

1。)By.xpath(“// h2 [@ id ='xyz']”)。gettext(); 收到错误说InvalidSelectorError:xpath表达式的结果“// h2 [@ id ='xyz'] / follow-sibling :: text()” 是:[对象文本]。它应该是一个元素。

2。)By.xpath(“// h2 [@ id ='xyz']”)。getattribute(innerText); 通过这个选择器,我得到输出为line1,line2&amp;我需要这个文字

我的预期输出应该只是“我需要这个文字”

2 个答案:

答案 0 :(得分:2)

Selenium API不支持文本节点。如果您只想从节点获取文本,请使用带有一些JavaScript的帮助函数:

WebElement element = driver.findElement(By.cssSelector("#xyz"));
String text = getNodesText(element);
public static String getNodesText(WebElement element) {
    String SCRIPT = 
     "for(var arr = [], e = arguments[0].firstChild; e; e = e.nextSibling) " +
     "  if(e.nodeType === 3) arr.push(e.nodeValue);                        " +
     "return arr.join('').replace(/ +/g, ' ').trim();                     " ;

    WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();
    return  (String)((JavascriptExecutor)driver).executeScript(SCRIPT, element);
}

答案 1 :(得分:1)

您正在getText()上运行By方法。你需要在WebElement

上运行它
WebElement h2 = driver.findElement(By.xpath("//h2[@id='xyz']"));
String wantedText = h2.getText();

更好,直接使用ID:

WebElement h2 = driver.findElement(By.id("xyz"));

编辑:返回孔文本的第二个选项,例如Line1,line2等......工作。 html写错了,因为它有h2标签下的按钮...所以你更好的选择是删除你从按钮获得的文本。