Java 这是正确的使用方法吗;at";Geb中的关闭
场景:我有一个使用ajax验证用户的登录页面,如果登录无效,它将保持在同一页面上 我想知道这是否是在Geb中使用at的正确方法,或者我可以在这方面即兴创作。关注事项:Java 这是正确的使用方法吗;at";Geb中的关闭,java,groovy,spock,geb,Java,Groovy,Spock,Geb,场景:我有一个使用ajax验证用户的登录页面,如果登录无效,它将保持在同一页面上 我想知道这是否是在Geb中使用at的正确方法,或者我可以在这方面即兴创作。关注事项: 我正在使用带有硬编码超时等的waitFor waitFor是否应位于at块中 有没有更好的写作方法 规格定义 def "perform invald login"() { given: "I am at the login page" to LoginPage when : "I entered inva
def "perform invald login"()
{
given: "I am at the login page"
to LoginPage
when : "I entered invalid data"
loginForm.loginClientCode = "test"
loginForm.loginSystemCode = "test"
loginForm.loginUserId = "test"
loginForm.loginPassword = "test"
loginButton().click()
then: "Log in attempt unsuccessful"
at(LoginPage)
}
页面对象
class LoginPage extends Page
{
static url = "login/login.jsf";
static at =
{
waitFor(10,0.5)
{ $("div.ic-h1").text() == "User Authentication" }
}
static content =
{
loginForm
{
$("form",id: "loginForm")
}
loginButton
{
$("button", id: "loginButton")
}
statusMessages
{
$('div.ui-messages').text()
}
}
}
我们通常仅为验证目的保留at,然后执行以下操作:
waitFor{ at LoginPage }
但考虑到0.7中对隐式断言的新支持,可能不需要这样做
我认为您真正想要的是测试是否存在错误消息,然后等待
i、 e
因为你不可能真的让你的条件失败,否则
此外,您可能会将该条件置于页面对象的状态,例如
def isErrorState() {
statusMessage == 'this login failed'
}
在你的测试中,它变得更容易阅读
waitFor{ isErrorState() }
+1由于隐式断言的支持,您能详细说明什么是不需要的吗对不起,我的意思是您通常会执行waitFor{at LoginPage},然后测试at LoginPage。但现在是geb 0.7。您只需等待{at LoginPage},而不需要进行额外的检查
waitFor{ isErrorState() }