Grails功能测试Geb页面对象模块不起作用,没有方法签名

问题描述 投票:0回答:2

这是页面对象。

package myapp.pages
import geb.Page

class LoginPage extends Page {
    static url = "http://localhost:8080/login/auth"
    //static at = {title.contains("Login")}
    static at = {
        waitFor {title.contains("Login")} // Add waitFor here to verify on page
    }
    static content = {
        loginForm { $( 'form') }
        usernameField { $('form').userName }
        passwordField { $('form').password }
        submitButton { $('input#submit' )}
    }

    void  loginSubmit(String email, String password) {
        usernameField = "[email protected]"
        assert $('form').username == "[email protected]"
        passwordField = "secret"
        assert $('form').password == "secret"
        submitButton.click()
    }
}

这是LoginSpec测试文件

package myapp.login

import geb.spock.GebSpec
import grails.testing.mixin.integration.Integration
import grails.transaction.*
import myapp.pages.LoginPage

@Integration
@Rollback
class LoginSpec extends GebSpec {

    def setup() {
    }

    def cleanup() {
    }

    void "user successfully logs in, is redirected to homepage"() {
        given:
        to LoginPage

        when:
        LoginPage.loginSubmit("[email protected]", "secret")

        then:
        title.contains("Dashboard")
    }
}

当我运行此测试时,出现以下错误:

groovy.lang.MissingMethodException: No signature of method: static myapp.pages.LoginPage.loginSubmit() is applicable for argument types: (java.lang.String, java.lang.String) values: [[email protected], secret]

当我将用户名和密码硬编码到登录页面loginsubmit函数中时,基本上会出现相同的错误。选择器很好,当我直接在LoginSpec测试中直接使用相同的选择器来设置用户名和密码时,测试就会通过。仅当我尝试使用页面对象时,才会出现此问题。

grails groovy spock functional-testing geb
2个回答
0
投票

Geb会记住当前页面,并自动将方法调用分派到该页面,因此您无需包括页面类名称:测试中的loginSubmit("[email protected]", "secret")将在页面上调用该方法。


0
投票

代替此:

    when:
    LoginPage.loginSubmit("[email protected]", "secret")

使用此:

    when:
    loginSubmit("[email protected]", "secret")

问题不是真正的问题。 JVM不允许您在类引用上调用实例方法,因为执行该调用所需的上下文将不存在。 loginSubmit是实例方法,而不是静态方法。

我希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.