Selenium WebDriver getText
我有一个
。
我尝试编写一个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() { @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("
", "\n"); //scary } return text.contains(value); } }); Assert.assertTrue(by.toString() + " contains value ["+value+"]", result); }
是的,它像罪一样丑陋。 请注意text.replace(“
”) – 这是因为拉出原始数据时不会转义HTML标记。 如果你在元素上调用#getText(),WebDriver就会很好地’unescape’。
我现在向我们的IT人员请求在我们的CI服务器上安装X-Windows,这样我们就可以运行FirefoxDriver了。 我们从HTMLUnitDriver中得到的只是麻烦,而且启动速度非常慢。
我找到了答案,我只需要使用真正的浏览器来访问我的webDriver
webDriver = new FirefoxDriver();
然后它工作。
也许是JavaScript问题。
听起来你正在使用HTMLUnitDriver,在这种情况下你需要启用如下所示的Java脚本,
HtmlUnitDriver driver = new HtmlUnitDriver(); driver.setJavascriptEnabled(true);
在这里查看文档
在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");
您还可以通过以下方式validationDiv中的文本:$ 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);