GEB - найти и посчитать все элементы с определенным словом в тексте - PullRequest
0 голосов
/ 16 января 2019

Итак, я довольно новичок в этом языке, и у меня есть конкретная задача найти и подсчитать все конкретные слова с помощью тега на странице поиска в 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")}
    }
}

Это проходит гладко, но я почти уверен, что это неправильно, и я не знаю, как перейти к подсчету этих элементов.Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Спасибо за ответы, они тоже работают, но мне удалось сделать это по-другому, поэтому я публикую это здесь. Строка, которая делает трюк:

println $(By.className("LC20lb")).findAll {it.text().contains("ebay")}.size()
0 голосов
/ 16 января 2019

Вы довольно близко! Вы можете сделать следующее, чтобы получить счетчик, где 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, поможет вам.

...