Selenium WebDriver getText

时间:2011-11-04 08:31:46

标签: java selenium-webdriver

我有<div name="myDiv">0</div>

我尝试编写myDiv中包含 0 文本的测试。使用WebDriver,它是:

String text =  webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();

但结果我有一个空字符串。我不应该使用getText()来获取div的内容吗?

8 个答案:

答案 0 :(得分:2)

我有同样的问题;一点点挖掘让我想到了这个:

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<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(“&lt; BR&gt;&lt; / BR&gt;”) - 这是因为拉出原始数据时不会转义HTML标记。如果你在元素上调用#getText(),WebDriver就会很好地'unescape'。

我现在向我们的IT人员请求在我们的CI服务器上安装X-Windows,以便我们可以运行FirefoxDriver。 HTMLUnitDriver我们只有麻烦,而且启动速度极慢。

答案 1 :(得分:1)

我找到了答案,我只需要使用真正的浏览器来获取 webDriver

webDriver = new FirefoxDriver();

然后它有效。

也许是JavaScript问题。

答案 2 :(得分:1)

听起来您正在使用HTMLUnitDriver,在这种情况下,您需要启用如下所示的Java脚本,

HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);

查看文档here

答案 3 :(得分:1)

在Selenium 2中,我使用了它,它对我很有用。

driver.getPageSource().contains(text);  

答案 4 :(得分:1)

即使没有内容,也可以使用getText()。这应该不是问题。 从你的答案来看,问题似乎是你没有实例化FirefoxDriver。 Selenium WebDriver只会与可见元素进行交互,因此不可见元素的文本将始终作为空字符串返回。

答案 5 :(得分:1)

您可以尝试使用jsoup库来解析html。

首先将页面内容(driver.getPageSource())加载到jsoup文档对象,并使用该优秀库的丰富方法(对作者而言是赞誉)。

示例:

String pageSource = driver.getPageSource();
Document doc = Jsoup.parse(pageSource);
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");

答案 6 :(得分:0)

您还可以通过以下方式验证Div中的文字:  $ browser.is_element_present( “// DIV [@名称= 'myDiv'] / [文本()= '0']”)

答案 7 :(得分: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);