Вы довольно близко! Вы можете сделать следующее, чтобы получить счетчик, где h3 содержит слово «ebay» и подтвердить правильность отображаемого числа:
def "checking for word"() {
given: " Search for word 'ebay' in google"
go "https://www.google.pl/"
$("body").find("input", name: "q").value("ebay")
$("center").$("input", 0, name: "btnK").click()
waitFor { title.endsWith(" Szukaj w Google")}
then: "Correct results are show"
$("h3").count { it.text().toLowerCase().contains("ebay") } == 10
}
Обратите внимание на toLowerCase()
, так как большинство результатов возвращаются как "eBay" и не совпадают с "eBay".
Я бы порекомендовал изучить объекты страницы и создать GoogleHomePage и GoogleResultsPage, похожие на:
import geb.Page
class GoogleHomePage extends Page {
static url = "http://www.google.com"
static at = {
logo.displayed
}
static content = {
logo { $("#hplogo") }
searchField { $("body").find("input", name: "q") }
searchButton { $("center").$("input", 0, name: "btnK") }
}
ResultsPage searchFor(String search) {
searchField.value(search)
searchButton.click()
browser.at(ResultsPage)
}
}
Страница результатов:
import geb.Page
class ResultsPage extends Page {
static at = { title.endsWith(" Szukaj w Google") }
static content = {
results { $("h3") }
}
def countResultsContaining(String expectedResultPhrase) {
results.count { it.text().toLowerCase().contains(expectedResultPhrase) }
}
}
Тогда ваш тест выглядит намного чище без всех селекторов и т. Д., И у вас есть код для повторного использования:
class GoogleSpec extends GebReportingSpec {
def "checking for word"() {
given: " Search for word 'ebay' in google"
def searchPhrase = "ebay"
def googlePage = to GoogleHomePage
when: "I search for ebay"
def resultsPage = googlePage.searchFor(searchPhrase)
then: "Correct results are shown"
resultsPage.countResultsContaining(searchPhrase) == 10
}
}
Что касается ресурсов, Руководство по Geb хорошо, но Geb написан на Groovy - так что поиск того, как это сделать, используя Groovy, а не Geb, поможет вам.