Является ли это правильным способом использовать "на" замыкание в Geb - PullRequest
1 голос
/ 22 марта 2012

Сценарий: у меня есть страница входа в систему, которая использует ajax для проверки пользователя, и в случае неверного входа она остается на той же странице.

Мне интересно, является ли это правильным способом использования в в Гебе, или я могу импровизировать на этом.Проблемы:

  1. Я использую waitFor с жестко запрограммированным таймаутом и т. Д.
  2. Должен ли waitFor находиться в в блоке?
  3. Есть лилучший способ написать это?

Spec Def

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

1 Ответ

3 голосов
/ 23 марта 2012

Обычно мы храним только для целей проверки, а затем делаем:

waitFor{ at LoginPage }

Но это может не понадобиться, учитывая новую поддержку неявных утверждений в 0.7. http://www.gebish.org/manual/snapshot/implicit-assertions.html#at_verification

Я думаю, что вы действительно хотите здесь, чтобы проверить наличие сообщения об ошибке и ждать этого.

т.е.,

 loginButton().click()

 then: "Log in attempt unsuccessful"
 waitFor{ statusMessage == 'this login failed' }

, так как иначе вы не сможете заставить ваше тогдашнее состояние потерпеть неудачу.

Более того, вы, вероятно, могли бы перевести условие в состояние объекта вашей страницы, например что-то вроде

def isErrorState() {
    statusMessage == 'this login failed'
}

и в вашем тесте становится легче читать.

waitFor{ isErrorState() } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...