GEB - 查找并计算文本中具有特定单词的所有元素
GEB - find and count all elements with specific word in text
所以,我对这种语言还很陌生,我有特定的任务要在 google 的搜索页面中查找和计算带有标签的所有特定单词。
所以我设法打开并找到它,但我找不到任何进一步移动的方法。
我的代码:
class GoogleUiSpec extends GebSpec {
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")}
$("h3").findAll{ it.has("ebay")}
}
}
这个 运行 很顺利,但我几乎可以肯定这是错误的,我不知道如何继续计算这些元素。
感谢您的帮助。
你很接近!您可以执行以下操作来检索 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()
,因为大多数结果 return 与 "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 Manual 很好,但是 Geb 是用 Groovy 编写的 - 所以搜索如何使用 Groovy 而不是 Geb 来帮助你。
感谢您的回答,它们也有效,但我设法用另一种方式做到了,所以我将其张贴在这里。成功的行:
println $(By.className("LC20lb")).findAll {it.text().contains("ebay")}.size()
所以,我对这种语言还很陌生,我有特定的任务要在 google 的搜索页面中查找和计算带有标签的所有特定单词。 所以我设法打开并找到它,但我找不到任何进一步移动的方法。 我的代码:
class GoogleUiSpec extends GebSpec {
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")}
$("h3").findAll{ it.has("ebay")}
}
}
这个 运行 很顺利,但我几乎可以肯定这是错误的,我不知道如何继续计算这些元素。 感谢您的帮助。
你很接近!您可以执行以下操作来检索 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()
,因为大多数结果 return 与 "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 Manual 很好,但是 Geb 是用 Groovy 编写的 - 所以搜索如何使用 Groovy 而不是 Geb 来帮助你。
感谢您的回答,它们也有效,但我设法用另一种方式做到了,所以我将其张贴在这里。成功的行:
println $(By.className("LC20lb")).findAll {it.text().contains("ebay")}.size()