Самый первый пример, когда руководство Geb не выполняется - PullRequest
2 голосов
/ 26 октября 2011

У меня есть следующие настройки:

  • установлен JDK & JRE 6u29
  • установленный селен автономно 2.8
  • Groovy 1.8.3
  • Геб 0.6.1

Используя только GroovyConsole, я попытался выполнить самый первый пример, приведенный в руководстве Geb:

import geb.Browser

Browser.drive {
    go "http://google.com/ncr"

// make sure we actually got to the page
assert title == "Google"

// enter wikipedia into the search field
$("input", name: "q").value("wikipedia")

// wait for the change to results page to happen
// (google updates the page dynamically without a new request)
waitFor { title.endsWith("Google Search") }

// is the first link to wikipedia?
def firstLink = $("li.g", 0).find("a.l")
assert firstLink.text() == "Wikipedia"

// click the link 
firstLink.click()

// wait for Google's javascript to redirect to Wikipedia
waitFor { title == "Wikipedia" }
}

но я получаю следующую ошибку:

ПРЕДУПРЕЖДЕНИЕ: дезинфекция трассировки стека:

geb.waiting.WaitTimeoutException: условие не прошло в 5.0 секунд * * тысяча двадцать-одна

Что-то не так с примером? Я делаю что-то неправильно? это очень расстраивает, потому что ОЧЕНЬ первый пример даже не запускается!

Ответы [ 4 ]

3 голосов
/ 27 октября 2011

Сценарий вводит wikipedia в поле поиска, но не нажимает кнопку Google Search, чтобы начать поиск.

Если вы добавите:

// hit the "Google Search" button

$("input", name: "btnG").click()

сразу после

// enter wikipedia into the search field

$("input", name: "q").value("wikipedia")

Вы получите немного дальше.

2 голосов
/ 22 октября 2014

У меня была та же проблема, с которой вы столкнулись.

Первая ошибка WaitFor:

Первое ожидание можно исправить ответом Дж. Левина. Добавление:

$ («вход», имя: «btnG»). Click ()

после

$ ("input", name: "q"). Value ("wikipedia").

Второй выпуск WaitFor:

Название страницы, на которую Википедия открывается из Google, отличается от главной страницы Википедии. На главной странице это <title>Wikipedia<title> на главной странице (которую открывает Google это <title>Wikipedia, the free encyclopedia<title>.

Итак, измените:

waitFor {title == "Википедия"}}
Кому:
waitFor {title == "Википедия, бесплатная энциклопедия"}
}

И это должно исправить вторую проблему ожидания

2 голосов
/ 24 марта 2013

В примере используется функция автоматической загрузки в Google, благодаря которой результаты поиска отображаются при вводе в поиск, поэтому вам не нужно нажимать кнопку поиска.При запуске теста вы должны увидеть, что отображаются результаты поиска, и ссылка на Википедию является первой.

Исключение WaitTimeoutException, которое вы получаете, скорее всего, потому что браузер закрывается слишком быстро после перехода на страницу Википедии.Чтобы это исправить, просто обновите вызов waitFor, чтобы он дольше ожидал перед закрытием браузера, т.е.

waitFor(10) (at WikipediaPage)

В качестве альтернативы, если вы запускаете gradle в режиме отладки, процесс выполняется намного медленнее и, следовательно, позволяет проверятьдля заголовка до завершения работы браузера

gradlew firefoxTest --debug --stacktrace
1 голос
/ 28 февраля 2015

Ничто из вышеперечисленного не сработало для меня.После некоторой отладки я получил код, работающий так:

Browser.drive {

    go "http://google.com"

    // make sure we actually got to the page
    assert title == "Google"

    // enter wikipedia into the search field
    $("input", name: "q").value("wikipedia")

    // wait for the change to results page to happen
    // (google updates the page dynamically without a new request)
    waitFor { title.endsWith("Google Search") }

    // is the first link to wikipedia?
    def firstLink = $("li.g", 0).find("a")
    assert firstLink.text() == "Wikipedia, the free encyclopedia"

    // click the link
    firstLink.click()

    // wait for Google's javascript to redirect to Wikipedia
    waitFor { title == "Wikipedia, the free encyclopedia" }
}
...