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()