Функциональный тест Grails. Объектный модуль страницы Geb не работает. Нет подписи метода. - PullRequest
0 голосов
/ 20 февраля 2020

Это объект страницы.

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()
    }
}

А это тестовый файл LoginSpe c

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]

Я в основном получаю ту же ошибку, когда жестко кодирую имя пользователя и пароль в функцию входа в систему на странице входа в систему. Селекторы в порядке, когда я использую те же селекторы непосредственно в тесте LoginSpe c для установки имени пользователя и пароля, тест проходит. Эта проблема возникает только при попытке использования объекта страницы.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Вместо этого:

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

Используйте это:

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

На самом деле проблема не в Geb. JVM не позволяет вам вызывать метод экземпляра для ссылки на класс, так как контекст, необходимый для выполнения этого вызова, не существует. loginSubmit - это метод экземпляра, а не метод stati c.

Надеюсь, это поможет.

0 голосов
/ 20 февраля 2020

Geb запоминает текущую страницу и автоматически отправляет вызовы методов на страницу, поэтому вам не нужно включать имя класса страницы: loginSubmit("email@something.com", "secret") в тесте вызовет метод на странице.

...