Самый первый пример руководства Geb не выполняется

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

  • установлен JDK и JRE 6u29
  • установил селен автономный 2.8
  • Крутой 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 секунд

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


person hnaderi    schedule 26.10.2011    source источник


Ответы (4)


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

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

// hit the "Google Search" button

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

сразу после

// enter wikipedia into the search field

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

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

person J. Levine    schedule 27.10.2011

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

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

waitFor(10) (at WikipediaPage)

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

gradlew firefoxTest --debug --stacktrace
person majjinator    schedule 24.03.2013

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

Первая проблема WaitFor:

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

$("ввод", имя: "btnG").click()

после:

$("ввод", имя: "q").значение("википедия").

Вторая проблема с ожиданием:

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

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

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

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

person Brendan Prin    schedule 22.10.2014

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

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" }
}
person Jorge    schedule 28.02.2015