java – Selenium WebDriver getText
I have a < div name = "mydiv" > 0 < / div >
I try to write a test with 0 text in mydiv Use webdriver, which is:
String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();
But I ended up with an empty string Shouldn't I use gettext () to get the contents of div?
Solution
I have the same problem; A little digging reminds me of this:
https://groups.google.com/forum/# ! msg/webdriver/fRb_ 1QOr3wg/wzUsW3Ll6bgJ
When you try to call webelement #gettext() on an element whose CSS property "display" is set to "None", the htmlunitdriver (obviously Firefox driver) will return an empty string
This is my solution:
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);
}
Yes, it's as ugly as sin Note text Replace ("< br > < / BR >") – this is because HTML tags are not escaped when the original data is pulled out If you call #gettext () on an element, the webdriver will 'unescape' well
I now ask our IT staff to install X - Windows on our CI server so that we can run Firefox driver All we get from htmlunitdriver is trouble, and the startup speed is very slow
