Geb: Ожидание / сон между тестами

Есть ли способ ждать установленное количество времени между тестами? Мне нужно решение, чтобы компенсировать отставание сервера. При создании записи в моей среде для поиска записи требуется немного времени.

В следующем примере кода, как бы я подождал 30 секунд между первым тестом и вторым тестом и не имел бы времени ожидания между вторым тестом и третьим тестом?

    class MySpec extends GebReportingSpec {
        // First Test
        def "should create a record named myRecord"() {
            given:
            to CreateRecordsPage

            when:
            name_field = "myRecord"

            and:
            saveButton.click()

            then:
            at IndexPage
        }

        // Second Test
        def "should find record named myRecord"() {
            given:
            to SearchPage

            when:
            search_query = "myRecord"

            and:
            searchButton.click()

            then:
            // haven't figured this part out yet, but would look for "myRecord" on the results page
        }

        // Third Test
        def "should delete the record named myRecord"() {
            // do the delete
        }
    }

3 ответа

Решение

Вы, вероятно, не хотите ждать установленное количество времени - это замедлит ваши тесты. В идеале вы хотели бы продолжить, как только запись будет добавлена. Вы можете использовать Геба waitFor {} опросить условие, которое должно быть выполнено.

    // Second Test
    def "should find record named myRecord"() {
        when:
        to SearchPage

        then:
        waitFor(30) {
            search_query = "myRecord"
            searchButton.click()
            //verify that the record was found
        }
    }

Это будет производить опрос каждые полсекунды в течение 30 секунд, чтобы условие выполнялось, как только оно было выполнено, и не выполнялось, если оно все еще не выполнено через 30 секунд.

Чтобы увидеть, какие у вас есть варианты для установки времени ожидания и интервала, посмотрите раздел ожидания в Книге Геба. Вы также можете проверить раздел о неявных утверждениях в waitFor блоки

Если ваш второй функциональный метод зависит от успешности первого, тогда вам, вероятно, следует рассмотреть возможность аннотировать эту спецификацию с помощью @Stepwise.

Вы всегда должны пытаться использовать waitFor и проверять условия везде, где это возможно. Однако, если вы обнаружите, что нет определенного элемента, который вы можете проверить, или какого-либо другого условия для проверки, вы можете использовать это, чтобы ждать указанное количество времени:

def sleepForNSeconds(int n) {
    def originalMilliseconds = System.currentTimeMillis()
    waitFor(n + 1, 0.5) {
        (System.currentTimeMillis() - originalMilliseconds) > (n * 1000) 
    }
}

Мне пришлось использовать это в ожидании завершения анимации библиотеки графиков, прежде чем сделать снимок экрана в отчете.

Thread.sleep(30000)

также делает трюк. Конечно, все еще согласны "использовать waitFor, когда это возможно".

Другие вопросы по тегам