繁体   English   中英

Selenium WebDriver getText

[英]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/#!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("<BR></BR>") - 这是因为当您提取原始数据时,HTML 标记不会被转义。 如果您在元素上调用 #getText(),WebDriver 将很好地“取消转义”它。

我现在已经向我们的 IT 人员提出了在我们的 CI 服务器上安装 X-Windows 的请求,以便我们可以运行 FirefoxDriver。 我们遇到了 HTMLUnitDriver 带来的麻烦,而且启动速度非常慢。

在 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使用一个真正的浏览器:

webDriver = new FirefoxDriver();

然后它起作用了。

也许这是一个 JavaScript 问题。

听起来您正在使用 HTMLUnitDriver。 在这种情况下,您需要启用如下所示的 JavaScript 代码。

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

此处查看文档。

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM