Selenium WebDriver getText - PullRequest
       6

Selenium WebDriver getText

3 голосов
/ 04 ноября 2011

У меня есть <div name="myDiv">0</div>.

Я пытаюсь написать тест, в котором myDiv содержит текст 0 . С WebDriver это:

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

но в результате у меня есть пустая строка. Разве я не должен использовать getText () для получения содержимого div?

Ответы [ 8 ]

2 голосов
/ 26 июля 2012

У меня была такая же проблема;небольшое копание привело меня к этому:

https://groups.google.com/forum/#!msg/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 не экранируются при извлечении необработанных данных.WebDriver будет прекрасно «отменять» это, если вы вызовете #getText () для элемента.

Я сейчас обратился к нашим ИТ-специалистам с просьбой установить X-Windows на наших CI-серверах, чтобы мы могли запуститьFirefoxDriver.У нас не было ничего, кроме проблем с HTMLUnitDriver, и загрузка невероятно медленная.

1 голос
/ 17 февраля 2016

Вы можете попробовать использовать библиотеку jsoup для анализа html.

Сначала загрузите содержимое страницы (driver.getPageSource ()) в объект документа jsoup и используйте множество методов этой превосходной библиотеки (спасибо автору).

Пример:

String pageSource = driver.getPageSource();
Document doc = Jsoup.parse(pageSource);
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");
1 голос
/ 01 сентября 2015

Вы можете использовать getText (), даже если у него нет содержимого.Это не должно быть проблемой.Судя по вашему ответу, проблема заключается в том, что вы не создали экземпляр FirefoxDriver.Selenium WebDriver будет взаимодействовать только с видимыми элементами, поэтому текст невидимого элемента всегда будет возвращаться в виде пустой строки.

1 голос
/ 04 июня 2012

в Selenium 2 я этим пользовался, и у меня все нормально работает.

driver.getPageSource().contains(text);  
1 голос
/ 05 ноября 2011

Звучит так, будто вы используете HTMLUnitDriver, в этом случае вам нужно будет включить скрипт Java, как показано ниже,

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

Ознакомьтесь с документацией здесь

1 голос
/ 04 ноября 2011

Я нашел ответ, мне просто нужно использовать реальный браузер для моего webDriver

webDriver = new FirefoxDriver();

тогда это работает.

Может быть, это проблема JavaScript.

0 голосов
/ 28 ноября 2014

Попробуйте это

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);
0 голосов
/ 05 ноября 2011

Вы также можете проверить текст в Div: $ Browser.is_element_present ( "// DIV [@ имя = 'myDiv'] /. [Текст () = '0']")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...