[英]Selenium WebDriver getText
我有一个<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("<BR></BR>") - 这是因为当您提取原始数据时,HTML 标记不会被转义。 如果您在元素上调用 #getText(),WebDriver 将很好地“取消转义”它。
我现在已经向我们的 IT 人员提出了在我们的 CI 服务器上安装 X-Windows 的请求,以便我们可以运行 FirefoxDriver。 我们遇到了 HTMLUnitDriver 带来的麻烦,而且启动速度非常慢。
在 Selenium 2 中,我使用了它,它对我来说很好用。
driver.getPageSource().contains(text);
即使它没有任何内容,您也可以使用 getText()。 这应该不是问题。
从您的回答来看,问题似乎是您没有实例化 FirefoxDriver。
Selenium WebDriver 只会与可见元素交互,因此不可见元素的文本将始终作为空字符串返回。
您可以尝试使用jsoup库来解析 HTML。
首先只需将页面内容 (driver.getPageSource()) 加载到 jsoup 文档对象并使用该优秀库的丰富方法(向作者致敬)。
例子:
String pageSource = driver.getPageSource();
Document doc = Jsoup.parse(pageSource);
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");
我只需要为我的webDriver使用一个真正的浏览器:
webDriver = new FirefoxDriver();
然后它起作用了。
也许这是一个 JavaScript 问题。
听起来您正在使用 HTMLUnitDriver。 在这种情况下,您需要启用如下所示的 JavaScript 代码。
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
在此处查看文档。
尝试这个
WebDriver driver = new YourBrowserdirver(); //FirefoxDriver or ChromeDriver etc..
String Text = driver.findElement(By.id("myDiv")).getText();
System.out.println("The text present in myDiv = "+Text);
您还可以通过以下方式验证div 中的文本:
$browser.is_element_present("//div[@name='myDiv']/.[text()='0']")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.