我有一个<div name="myDiv">0</div>
.
我尝试编写 myDiv 的测试0其中的文字。使用 WebDriver 是:
String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();
但在结果中我有一个空字符串。我不应该使用 getText() 来获取 div 的内容吗?
我有同样的问题;经过一番挖掘,我发现了这一点:
https://groups.google.com/forum/#!msg/webdriver/fRb_1QOr3wg/wzUsW3Ll6bgJ
当您尝试在 CSS 属性“display”设置为“none”的元素上调用 WebElement#getText() 时,HTMLUnitDriver(显然还有 FirefoxDriver)将返回空字符串。
这是我的解决方案:
public void assertContainsText(final By by, final String value) {
browser.waitTillElementPresent(by);
Boolean result = new WebDriverWait(getWebDriver(),Browser.DEFAULT_WAIT_TIMEOUT_SECONDS).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver arg0) {
WebElement elem = arg0.findElement(by);
String text = "";
if (elem.isDisplayed()) {
text = elem.getText();
} else {
//have to use JavaScript because HtmlUnit will return empty string for a hidden element's text
text = (String) executeScript("return arguments[0].innerHTML", elem);
text = text.replace("<BR></BR>", "\n"); //scary
}
return text.contains(value);
}
});
Assert.assertTrue(by.toString() + " contains value ["+value+"]", result);
}
是的,这就像罪恶一样丑陋。请注意 text.replace("
") - 这是因为当您提取原始数据时,HTML 标记不会被转义。如果您在元素上调用 #getText(),WebDriver 会很好地“取消转义”此内容。
我现在已向我们的 IT 人员提出请求,要求在我们的 CI 服务器上安装 X-Windows,以便我们可以运行 FirefoxDriver。除了 HTMLUnitDriver 带来的麻烦之外,我们什么也没有遇到,而且它的启动速度非常慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)