## Внешние зависимости и установка
GRADLE_HOME
, указывающую на распакованную директорию, а также добавьте путь GRADLE_HOME/bin
в переменную PATH
.gradle -v
Вы можете использовать функцию управления зависимостями Gradle для автоматической установки Groovy, что позволяет избежать отдельной установки. Пример кода:
compile "org.gebish:geb-core:0.12.2"
compile "org.seleniumhq.selenium:selenium-firefox-driver:2.45.0"
compile "org.seleniumhq.selenium:selenium-support:2.45.0"
После установки всех необходимых библиотек скачайте пример проекта.
Откройте командную строку в корневой директории проекта и выполните команду gradle test
. Это запустит все функциональные тесты проекта.
## Использование
По умолчанию конфигурационный файл Geb назван GebConfig.groovy
.
baseUrl
После того как вы установили baseUrl
в конфигурационном файле, вы сможете использовать относительные пути при написании тестов.
Например, в конфигурационном файле можно указать следующее:baseUrl = 'http://myapp.com/'
Тестовый класс может выглядеть так:
{
go "abc"
}```
Таким образом, полный URL будет выглядеть так: `http://myapp.com/abc`
* Поддержка браузера
`WebDriver` по умолчанию поддерживает `Firefox`. Для использования других браузеров вам потребуется скачать соответствующий `driver`.
Например, для `Chrome` вам потребуется скачать `chromedriver` (в данном проекте уже включен, поэтому дополнительно скачивать не требуется).
Дополнительную информацию см. в официальной документации.
### Основные методы API
#### Часто используемые
* `go`: переход на указанную страницу
* `to`: переход на страницу, определённую классом `Page`
* `waitFor`: ожидание ответа страницы
```groovy
// Ожидание, пока заголовок страницы не станет равным определённому значению
waitFor { title == "Страница заголовок" }
// Синтаксис
waitFor {} // По умолчанию время ожидания составляет 1 секунду
waitFor(10) {} // Максимальное время ожидания равно 10 секундам
waitFor(10, 0.5) {} // Максимальное время ожидания равно 10 секундам, проверка условия происходит каждую 0.5 секунды
waitFor("быстро") {} // Ожидание времени, установленного пользователем
При использовании waitFor
, не следует использовать ссылки на объекты, поскольку это приведёт к тому, что каждый раз будет проверяться один и тот же объект.
При написании автономных тестов для браузера часто требуется выполнять операции с DOM. К счастью, Geb предоставляет аналогичные jQuery селекторы, позволяющие легко находить элементы DOM.
$()
метод``` Используется аналогично jQuery
Синтаксис:
```groovy
```markdown
$([CSS селектор], [индекс или диапазон], [атрибут DOM элемента или совпадение текста])
Примеры:
$("div p", 0)
$("div p", title: "что-то")
$(0)
$(title: "что-то")
$("p", 0..1).text()
$("p", text: "p1").size()
$("p", text: "p1", class: "a").size()
// регулярные выражения
$("p", text: ~/p./)
$("p", text: startsWith("p"))
$("p", text: endsWith("2"))
$("p", text: contains(/\d/))
```### Geb предоставляет следующие методы работы с регулярными выражениями:
| Метод | Описание |
|-------|----------|
| startsWith | Начинается со строки |
| contains | Содержит строку |
| endsWith | Заканчивается строкой |
| containsWord | Содержит слово |
| notStartsWith | Не начинается со строки |
| notContains | Не содержит строки |
| notEndsWith | Не заканчивается строкой |
| notContainsWord | Не содержит слова |
#### Поиск и фильтрация
```groovy
// Эти два примера эквивалентны
$("div").find(".b")
$("div").$(".b")
// Получаем div с классом b
$("div").filter(".b")
// Получаем DOM, который не содержит p и имеет класс b
$(".b").not("p")
$("div").hasNot("p")
// Получаем div, содержащий p
$("div").has("p")
$("p.d").previous()
$("p.e").prevAll()
$("p.d").next()
$("p.c").nextAll()
$("p.d").parent()
$("p.c").siblings()
$("div.a").children()
$("a.login").click()
$("div").height == 20
$("div").width == 40
$("div").x == 20
$("div").y == 10
<p title="a" class="a para">a</p>
<p title="b" class="b para">b</p>
<p title="c" class="c para">c</p>
assert $("p").text() == "a"
assert $("p").tag() == "p"
assert $("p").@title == "a"
assert $("p").classes() == ["a", "para"]
assert $("div").css("float") == "left"
// Ввести "foo"
$("input") << "foo"
assert $("input").value() == "foo"
// Ввести Ctrl+C
$("input") << Keys.chord(Keys.CONTROL, "c")
WebElement
API WebDriverActions
def actions = new Actions(driver)
WebElement someItem = $("li.clicky").firstElement()
def shiftClick = actions.keyDown(Keys.SHIFT).click(someItem).keyUp(Keys.SHIFT).build()
shiftClick.perform()
```3. Использование замыканий
```groovy
interact {
нажми_shift_keys Keys.SHIFT
клик $("li.clicky")
отпусти_shift_keys Keys.SHIFT
}
4 Пример Перетаскивание
interact {
клик_и_удерживай($('#draggable'))
переместиться_на_отступ(150, 200)
освободить()
}
// или
interact {
перетащить_и_выпустить_по_координатам($("#draggable"), 150, 200)
}
// или
interact {
перетащить_и_выпустить($("#draggable"), $("#droppable"))
}
Ctrl + одиночный клик
import org.openqa.selenium.Keys
interact {
нажми(Keys.CONTROL)
клик($("ul.multiselect li", text: "Order 1"))
клик($("ul.multiselect li", text: "Order 2"))
клик($("ul.multiselect li", text: "Order 3"))
отпусти(Keys.CONTROL)
}
Скроллбар
Actions actions = new Actions(driver)
actions.moveToElement(driver.findElement(By.id('tab'))).perform()
// или
interact {
клик_и_удерживай($('#tab'))
освободить()
}
// или
interact {
клик(theUI)
}
// или
interact {
переместиться_к_элементу(theUI)
}
// или использовать js (не показано)
(не показано)
(не показано)
(не показано)
(не показано)
(не показано)
(не показано)
Geb
может реализовать повторное использование страниц через наследование класса Page
. Через наследование класса Module
можно реализовать локальные страницы для повторного использования.Симулировать клик Alert()
driver.switchTo().alert().accept();
Дополнительная информация доступна в официальной документации.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )