我有一个<div name="myDiv">0</div>
。
我试着编写一个测试,检查myDiv里面的文本是否为0。使用WebDriver,代码如下:
String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();
但是结果中我得到的是一个空字符串。难道我不应该使用getText()方法来获取div标签的内容吗?
我有一个<div name="myDiv">0</div>
。
我试着编写一个测试,检查myDiv里面的文本是否为0。使用WebDriver,代码如下:
String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();
但是结果中我得到的是一个空字符串。难道我不应该使用getText()方法来获取div标签的内容吗?
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);
}
是的,这看起来很丑陋。请注意文本.replace("<BR></BR>") - 这是因为在提取原始数据时未转义HTML标记。如果您在元素上调用#getText(),WebDriver会很好地'取消转义'。
我已向我们的IT人员提出请求,在我们的CI服务器上安装X-Windows,以便我们可以运行FirefoxDriver。我们从HTMLUnitDriver那里遇到了无尽的麻烦,而且启动速度非常慢。
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);
请查看此处的文档。
driver.getPageSource().contains(text);
你也可以通过以下方式验证 div 中的文本:
$browser.is_element_present("//div[@name='myDiv']/.[text()='0']")
试试这个
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);