При вызове js.exec в Geb / Spock метод exec помечается как 'null' - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю набор тестов (используя Geb / Spock) для веб-сайта.В одном из них элемент, к которому я хочу получить доступ, находится в верхней части страницы, поэтому, чтобы убедиться, что он виден, я хочу прокрутить до верхней части страницы.

Используемая мной командаis:

browser.js.exec ('window.scrollTo (0, 0);')

или его варианты, например

js.exec ('window.scrollTo (0, 0);')

или другой альтернативный вариант, например:

js.exec ('window.scrollBy (0, -250); ')

Ни один из них не заставляет страницу прокручиваться вверх, и при выполнении я получаю следующую ошибку (это единственная ошибка, других отзывов нет).Сообщение об ошибке, использующее другие перечисленные выше параметры, идентично (кроме самой команды):

    Condition not satisfied:
    browser.js.exec('window.scrollTo(0, 0);')
    |       |  |
    |       |  null
    |       geb.js.JavascriptInterface@4019094f
    geb.Browser@3dcac33e
        at UserCreatesCompany.Go to Home Page and click on the log to
GitHub button as user User1(UserCreatesCompany.groovy:170)

Я не могу интерпретировать сообщение о том, что exec является нулем.Что именно это значит?Чтобы сделать вещи более интересными, в конце этого сценария я выполняю следующую процедуру очистки

    js.exec('window.scrollTo(0, document.body.scrollHeight);')
    DeleteButton.click()
    $("button",'data-automation-id':"button-modal-yes").click()
}

, и она работает хорошо: страница прокручивается вниз.Таким образом, не возникает проблем с отсутствующей библиотекой.Любое предложение о том, что я могу делать неправильно?

Версия различных компонентов, которые я использую:

    groovyVersion = '2.5.4'
    gebVersion = '2.3'
    seleniumVersion = '3.141.59'
    chromeDriverVersion = '2.45'

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Спасибо за ответ.Ясно: я не полностью осознавал различные ограничения, накладываемые различными блоками на то, что исполняется или нет.После того, как вы наткнулись, руководство довольно ясно!

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

Еще раз спасибо за объяснение.Сегодня я узнал что-то новое!

0 голосов
/ 09 февраля 2019

Прежде всего, вам не нужно когда-либо вручную прокручивать страницу, чтобы сделать элементы видимыми - Selenium WebDriver, лежащий в основе Geb, сделает это для вас автоматически, как только вы начнете взаимодействовать (щелчок, значение настройки и т. Д.) С контентом.

Во-вторых, ошибка, которую вы получаете, является ошибочным утверждением, полученным из оператора в автоматически утвержденном (then: или expect:) блоке Спока.Мне кажется, что вы не понимаете концепцию, которая является ключевой для Спока, и поэтому вы должны сначала прочитать об этом в руководстве .Это должно прояснить ситуацию с ошибкой.

...