Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 在geb自动测试中使用waitFor{}和sleep()的最佳实践是什么?_Selenium_Automated Tests_Geb - Fatal编程技术网

Selenium 在geb自动测试中使用waitFor{}和sleep()的最佳实践是什么?

Selenium 在geb自动测试中使用waitFor{}和sleep()的最佳实践是什么?,selenium,automated-tests,geb,Selenium,Automated Tests,Geb,目前正在学习如何使用geb编写自动测试,因此这可能是一个noob观察和问题。仅仅是我,还是当一个接一个地运行许多测试时,似乎加快了测试的执行?例如,当编写一个新的测试时,我会注释掉我的其他测试,只是为了运行一个或两个方法,以确保其正常工作。一切都会顺利通过的。然后,当我取消对所有内容的注释以运行完整测试时,测试似乎运行得非常快,以至于我正在自动运行的web应用程序无法跟上,并且会由于未加载元素而导致测试失败。甚至在使用waitFor{}块时。我发现在某些地方使用sleep(1000)有帮助,但我

目前正在学习如何使用geb编写自动测试,因此这可能是一个noob观察和问题。仅仅是我,还是当一个接一个地运行许多测试时,似乎加快了测试的执行?例如,当编写一个新的测试时,我会注释掉我的其他测试,只是为了运行一个或两个方法,以确保其正常工作。一切都会顺利通过的。然后,当我取消对所有内容的注释以运行完整测试时,测试似乎运行得非常快,以至于我正在自动运行的web应用程序无法跟上,并且会由于未加载元素而导致测试失败。甚至在使用
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填充字段