有没有办法在测试之间等待一段时间?我需要一个解决方案来弥补服务器滞后。创建记录时,在我的环境中可以搜索记录之前需要一点时间。
在下面的代码示例中,如何在第一次测试和第二次测试之间等待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
}
}
答案 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”。