我们最近开始使用Geb / Spock进行自动化,而且我遇到了一个对我来说根本没有任何意义的问题。解释起来会有点复杂,但我会尽力而为。
我的公司为公司的所有应用程序使用内部定制的登录服务。我们的测试做的是使用setupSpec()来启动我们的应用程序的URL,然后在setup()中我有一个登录方法:
setupSpec():
def setupSpec() {
page = waitFor(10) { to LoginPage }
}
navigateToLogin():
def navigateToLogin(){
page = at LoginPage
login(page)
waitFor { at HomePage }
}
登录():
static def login(LoginPage page){
page.username.value("username")
page.password.value("password")
page.signInButton.click()
}
然后它运行功能测试,然后我们的cleanup()方法单击一个注销按钮并等待浏览器返回登录页面。测试结束并开始下一个测试。但是,这就是问题的开始。
当第二个测试进入登录方法并输入用户名和密码并点击登录时,我们的登录服务会给我一条消息,说明"我们遇到了困难"这是我们在登录服务遇到问题时通常会收到的消息。但是踢球者是登录服务没有问题。每次第一次功能测试后都会发生此错误。如果我打开自己的浏览器并手动连续运行我的测试,我没有问题,所以我不相信我们的登录服务是这里的问题。
我感到困惑的是:如果我在调试模式下运行我的测试并在注销后返回登录页面时暂停它,然后我自己输入凭据我可以不用任何问题。但是,如果我让自动化运行并在测试失败之前快速输入用户名和密码(等待时间为5秒),那么测试将失败并出现"技术难题"错误。
因此,输入相同的凭据,自动化使用WHILE自动化运行=登录失败。当自动化不运行或PAUSED =成功时,键入相同的凭据。
这让我相信自动化正在持续到SOMETHING并且错误地传递它。问题是我不知道是什么。我们已经尝试在每次注销时清除cookie而没有结果。我们在测试中使用了@Stepwise这实际上是有效的,我们没有得到登录失败。但是我们不能使用@Stepwise,因为我们不希望测试在第一次失败时停止运行。所以@Stepwise正在做一些我们想要发生的事情而不是第一次停止。
我们目前正在使用"解决方法",我们将setupSpec()中的page = waitFor(10) { to LoginPage }
放入navigateToLogin()方法中,如下所示:
def navigateToLogin(){
page = waitFor(10) { to LoginPage }
login(page)
waitFor { at HomePage }
}
基本上我们所做的只是更改at
和to
。当我们有'到'然后会发生什么是当我们退出并且我们在登录页面上时,它基本上重新输入应用程序URL并刷新页面。这是有效的,原因我不明白。如果可能的话,我想删除刷新,因为它浪费了时间。对于少量的测试,浪费的时间是微不足道的,但是对于运行整个套件而言,这并非易事。
有没有人对可能发生的事情有任何见解?