【问题标题】:Selenium WebDriver getTextSelenium WebDriver getText
【发布时间】:2011-12-21 20:08:34
【问题描述】:

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

我尝试编写一个 myDiv 包含 0 文本的测试。使用 WebDriver 是:

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

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

【问题讨论】:

标签: java selenium-webdriver


【解决方案1】:

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

首先只需将页面内容(driver.getPageSource())加载到 jsoup 文档对象并使用该优秀库的丰富方法(感谢作者)。

例子:

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

【讨论】:

    【解决方案2】:

    即使没有任何内容,您也可以使用 getText()。这应该不是问题。

    从您的回答来看,问题似乎是您没有实例化 FirefoxDriver。

    Selenium WebDriver 只会与可见元素交互,因此不可见元素的文本将始终作为空字符串返回。

    【讨论】:

      【解决方案3】:

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

      driver.getPageSource().contains(text);
      

      【讨论】:

        【解决方案4】:

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

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

        查看文档here

        【讨论】:

        • 是的,你是对的,但它不起作用,我将 Qquery fadeIn() 用于 tahte 元素 - 但是带有 setJavascriptEnabled(true) 的事件并设置了 wait(xxxx) 它不起作用..所以我更喜欢使用 Real 浏览器。
        【解决方案5】:

        您还可以通过以下方式验证 div 中的文本:

        $browser.is_element_present("//div[@name='myDiv']/.[text()='0']")
        

        【讨论】:

          【解决方案6】:

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

          webDriver = new FirefoxDriver();
          

          然后就可以了。

          可能是 JavaScript 问题。

          【讨论】:

          • 虽然 Chrome 或 Firefox 驱动程序确实可以工作,但你知道为什么 HtmlUnitDriver 不能吗?
          【解决方案7】:

          试试这个

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

          【讨论】:

            【解决方案8】:

            我遇到了同样的问题;一点点挖掘让我明白了这一点:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-09-08
              • 2012-07-22
              • 1970-01-01
              • 2017-03-13
              • 1970-01-01
              • 2015-11-25
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多