gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:03:28 25 4
gpt4 key购买 nike

这是页面对象。

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@something.com"
assert $('form').username == "email@something.com"
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@something.com", "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@something.com.com, secret]

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

最佳答案

而不是这个:

    when:
LoginPage.loginSubmit("email@something.com", "secret")

用这个:
    when:
loginSubmit("email@something.com", "secret")

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

我希望这会有所帮助。

关于Grails 功能测试 Geb 页面对象模块不起作用 没有方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com