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/!味精/webdriver/fRb_1QOr3wg/wzUsW3Ll6bgJ

HTMLUnitDriver(显然FirefoxDriver)将返回空字符串,当你试图调用webelement# getText()的元素,其CSS属性'display'被设置为'none'。

这是我的解决方案:

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("
")—这是因为当您提取原始数据时,HTML标记不会被转义。如果你在元素上调用#getText(), WebDriver会很好地'unescape'这个。

我现在已经请求我们的IT人员在CI服务器上安装X-Windows,这样我们就可以运行FirefoxDriver了。我们的HTMLUnitDriver除了麻烦什么都没有,而且它的启动速度非常慢。

我只需要使用一个真正的浏览器为我的webDriver:

webDriver = new FirefoxDriver();

可能是JavaScript的问题

听起来你正在使用HTMLUnitDriver。在这种情况下,您需要像下面这样启用JavaScript代码。

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");

试试这个

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']")

最新更新