【发布时间】:2018-10-20 20:20:42
【问题描述】:
我已经配置了一些 geb 测试,以根据我的网络应用程序中的登录尝试检查不同的消息。由于消息和输入字段将在第三次登录尝试时发生变化。
登录是基于发送到特定电话号码的密码的两步登录,因此在第一页 LoginPage 中,用户介绍了他们的 Id 和 phoneNumber ,然后它被重定向到第二个页面ValidationLoginPage,用户在其中介绍收到的密码。
我想检查,在第二页中,用户只能输入三个错误密码,并且在第四次尝试输入密码时,输入密码的输入将消失,并显示一条不同的消息,表明不再尝试。
为了检查这一点,我准备了一个测试,它在 given: 子句中引入了 Id 和 phoneNumber,并使用 where: 子句引入了 3 次错误密码.由于where: 重复所有测试,我尝试使用where: 中的注入变量来控制部分重复,所以我有类似的东西:
def "Test max loging attempts"(){
given:
if(loginAttempt == 1)
to LoginPage
loginModule.startLogin(cfg.user.id,cfg.user.phone)
}
when:
at LoginValidationPage
assert $('div.box_id_header h3').text() == 'Verify your code'
assert $('#code').css('display').contains('block')
loginModule.verifyPassword('WRONGPASSWORD')
then:
at LoginValidationPage
println "Attempt ${loginAttempt}"
if(loginAttempt == 4){
// last attempt
assert $('#code').css('display') == 'none'
assert $('#divCodeErrorMsg').text().contains('No more attempts')
}else{
assert $('#code').css('display').contains('block')
assert $('#divCodeErrorMsg').text().contains('Wrong password. Try again.')
}
where:
loginAttempt << (1..4)
}
我的问题是,每次where: 迭代都会清除cookies,我认为消息和行为不是我所期望的。我不想在GebConfig.groovy 文件中配置autoClearCookies=false,因为我还有另一个需要此功能的测试。有一种方法可以避免使用 spock def setupSpec() {} 方法清除此方法的 cookie 并在 def cleanupSpec() {} 方法中重新激活?
此外,还可以以更简洁的方式使用where:,避免检查loginAttempt 变量以避免多次运行given: 部分,或者有更好的方法根本不使用where:?
【问题讨论】:
标签: cookies where-clause spock geb