Selenium WebDriver getText

我有一个

0

我尝试编写一个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);