硒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被写错了。所以你最好的选择是删除你从按钮获得的文本。
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);
}
真棒!这对我工作..谢谢:) –
它没有工作....型定位器我用不管是哪个,但如果使用用gettext()方法然后它返回一个空值 –
但是这种修改将来自HTML代码方面的权利?硒有什么可行的办法可以解决这个问题吗? –
是的,更改必须在html中。 Webdriver返回h2所有的文本,包括按钮下的文本。简单地使用字符串替换或什么..看到这里http://stackoverflow.com/questions/7775364/how-can-i-remove-a-substring-from-a-given-string – Moshisho