Selenium 在geb自动测试中使用waitFor{}和sleep()的最佳实践是什么?
目前正在学习如何使用geb编写自动测试,因此这可能是一个noob观察和问题。仅仅是我,还是当一个接一个地运行许多测试时,似乎加快了测试的执行?例如,当编写一个新的测试时,我会注释掉我的其他测试,只是为了运行一个或两个方法,以确保其正常工作。一切都会顺利通过的。然后,当我取消对所有内容的注释以运行完整测试时,测试似乎运行得非常快,以至于我正在自动运行的web应用程序无法跟上,并且会由于未加载元素而导致测试失败。甚至在使用Selenium 在geb自动测试中使用waitFor{}和sleep()的最佳实践是什么?,selenium,automated-tests,geb,Selenium,Automated Tests,Geb,目前正在学习如何使用geb编写自动测试,因此这可能是一个noob观察和问题。仅仅是我,还是当一个接一个地运行许多测试时,似乎加快了测试的执行?例如,当编写一个新的测试时,我会注释掉我的其他测试,只是为了运行一个或两个方法,以确保其正常工作。一切都会顺利通过的。然后,当我取消对所有内容的注释以运行完整测试时,测试似乎运行得非常快,以至于我正在自动运行的web应用程序无法跟上,并且会由于未加载元素而导致测试失败。甚至在使用waitFor{}块时。我发现在某些地方使用sleep(1000)有帮助,但我
waitFor{}
块时。我发现在某些地方使用sleep(1000)
有帮助,但我觉得似乎有更好的方法来解决这个问题。每当用户对某个字段执行任何操作时,我正在使用的web应用程序似乎会大量刷新页面,这可能是我无法真正控制的问题的一部分。在测试的一个部分,我需要填写一个表单,但在填写输入后页面会刷新,所以我已经在下面编写了代码,代码可以正常工作,但由于所有的sleep语句,看起来有点像meh
void populateRequiredFields(){
def fName = "Test"
def lName = "User"
def email = "abc@abc.com"
def question = "Do you even test bro?"
clear.click()
//sleep() to slow down test in order to get correct elements due to page refreshing
sleep(3000)
firstName << fName
sleep(1000)
lastName << lName
sleep(1000)
emailAddress << email
sleep(1000)
veryifyEmail << email
sleep(1000)
questionField << question
sleep(1000)
}
void populateRequiredFields(){
def fName=“测试”
def lName=“用户”
def电子邮件=”abc@abc.com"
def question=“你甚至测试过兄弟吗?”
清除。单击()
//sleep()减慢测试速度,以便由于页面刷新而获得正确的元素
睡眠(3000)
firstName使用sleep()不是一个好主意。尝试使用waitFor{some results present}我发现,最好在和上的方法内部执行典型的异步操作后,将等待页面处于预期状态的逻辑括起来。这样,您就不会将所有的waitFor{
noise,当您添加更多测试时,您不会忘记等待,因为等待是可重用逻辑的一部分
因此,在你的情况下:
导入geb.Page
class APageThatCanBeCleared extends Page {
static content = {
clear { $(/*whatever the selector for the clearing element is*/) }
firstName { $(/*whatever the selector for the first name element is*/) }
}
void clear() {
clear.click()
waitFor { firstName.displayed }
}
}
然后在你的测试中:
to APageThatCanBeCleared
clear()
firstName << "Test"
到无法清除的APAGETHATS
清除()
firstName如果您需要等待的时间超过waitFor提供的标准10秒,您可以执行以下操作:
waitFor(30, 0.5){ firstName << fName }
waitFor(30,0.5){firstName,所以经常使用waitFor{firstName.displated},然后用firstName填充字段