硒Java的需要获取从第三HTML子元素

问题描述:

下方的innerText值是html代码硒Java的需要获取从第三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 = '某某']“)的gettext。 (); InvalidSelectorError出错:xpath表达式的结果为“// h2 [@ id ='xyz']/following-sibling :: text()” :[object Text]。它应该是一个元素。

2.)By.xpath( “// H2 [@ ID = 'XYZ']”)的getAttribute(的innerText); 通过这种选择我得到的输出作为第1行,第2行&我需要这个文本

我的预期输出应该只是“我需要此文本”

您正在运行方法的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等... Works。因为它有h2标签下的按钮,所以html被写错了。所以你最好的选择是删除你从按钮获得的文本。

+0

它没有工作....型定位器我用不管是哪个,但如果使用用gettext()方法然后它返回一个空值 –

+0

但是这种修改将来自HTML代码方面的权利?硒有什么可行的办法可以解决这个问题吗? –

+0

是的,更改必须在html中。 Webdriver返回h2所有的文本,包括按钮下的文本。简单地使用字符串替换或什么..看到这里http://*.com/questions/7775364/how-can-i-remove-a-substring-from-a-given-string – Moshisho

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); 
} 
+0

真棒!这对我工作..谢谢:) –