Как проверить допустимость ограничений ввода в Geb?

Я переписываю некоторые тесты, чтобы проверить проверку ограничений на входных данных электронной почты. Я пытаюсь проверить следующий JavaScript:

document.getElementById('theEmailId').validity.typeMismatch

Когда я тестирую это с простым старым JavaScript, все в порядке. Я получаю «true», который является ожидаемым ответом, когда адрес электронной почты недействителен. Когда я пытаюсь сделать это в Geb, я получаю всевозможные проблемы. Когда я пытаюсь

    def isValid = js.exec("document.getElementById('theEmailAddress')")

с утверждением, что isValid = = true

Я получаю ошибку сравнения spock со следующим выводом:

Condition not satisfied:

isValid == true
|       |
null    false

Когда я пытаюсь

         def isValid = js.exec(theEmailAddress,
            """
                return $(this).validity;
            """
    )

Я получаю java.ленг.Ошибка IllegalArgumentException со следующим отчетом:

java.lang.IllegalArgumentException: Argument is of an illegal type: geb.content.TemplateDerivedPageContent
at org.openqa.selenium.remote.internal.WebElementToJsonConverter.apply(WebElementToJsonConverter.java:81)
at com.google.common.collect.Iterators.transform(Iterators.java:817)
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
at com.google.common.collect.Iterators.addAll(Iterators.java:365)
at com.google.common.collect.Lists.newArrayList(Lists.java:162)
at com.google.common.collect.Lists.newArrayList(Lists.java:146)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:572)
at geb.js.JavascriptInterface.execjs(JavascriptInterface.groovy:37)
at geb.js.JavascriptInterface.exec(JavascriptInterface.groovy:67)
at com.ag.functionaltest.crs.specs.LoginGebSpec.The customer can not register using an email without @(LoginGebSpec.groovy:33)

Я в растерянности. Я пробовал браузер.водитель.executeScript, js.exec, js., everything возвращает null или ошибку. Есть какие-то указания на то, что я мог бы сделать, чтобы это сработало?

1 ответ

  1. Решил! Вот что получилось:

        given: "The customer goes to login page"
        to LoginPage
        waitFor { LoginPage }
    
        when: "The customer tries to register with an email without domain"
        theEmailId.value("anemail@.com")
    
        and: "The customer clicks the continue button"
        continueButton.click()
        def isValid = js."window.document.getElementById('theEmailAddress').validity['typeMismatch']"
    
        println isValid
    
        then: "The customer should see this error"
    
        assert isValid == true