以下是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;我需要这个文字
我的预期输出应该只是“我需要这个文字”
答案 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标签下的按钮...所以你更好的选择是删除你从按钮获得的文本。