Geb:测试之间等待/休眠

时间:2014-02-18 04:21:39

标签: automated-tests 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 个答案:

答案 0 :(得分:9)

您可能不想等待一段时间 - 这会使您的测试变慢。理想情况下,您希望在添加记录后立即继续。您可以使用Geb的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秒后仍然没有完成则失败。

要查看有关设置等待时间和间隔的选项,请参阅The Book of Geb中的waiting部分。您可能还想查看implicit assertions in waitFor blocks上的部分。

如果你的第二个特征方法依赖于第一个特征方法的成功,那么你应该考虑用@Stepwise来注释这个规范。

答案 1 :(得分:4)

您应该始终尝试使用waitFor并尽可能检查条件。但是,如果您发现没有可以检查的特定元素或任何其他要检查的条件,您可以使用它来等待指定的时间:

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

我必须在等待一些图表库动画完成之前使用它,然后才能在报告中捕获屏幕截图。

答案 2 :(得分:2)

Thread.sleep(30000)

也有诀窍。当然仍然同意“尽可能使用waitFor”。