在Geb / Spock中调用js.exec时,exec方法被标记为'null'

时间:2019-02-06 17:37:22

标签: geb

我正在为网站创建一套测试(使用Geb / Spock)。在其中之一中,我要访问的元素位于页面顶部,因此,为确保可见,我想滚动到页面顶部。

我正在使用的命令是:

  

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 :(得分:0)

首先,您无需手动滚动页面即可显示元素-支撑Geb的Selenium WebDriver将在您开始与内容进行交互(单击,设置值等)后自动为您完成此操作

第二,您遇到的失败是来自自动断言(expect:或{{1}})Spock块中的语句的断言。在我看来,您不了解Spock的核心概念,因此应首先阅读about it in the manual。它应该使您变得更加清晰。

答案 1 :(得分:0)

感谢您的回答。显然:我并不完全了解不同块对可执行文件施加的约束。一旦迷路了,手册就很清楚了!

我对您的第一个断言很感兴趣,他指出Selenium WebDriver一旦与该元素交互将立即移动到该元素。那是我的理解,但是没有用。我确保所讨论的元素具有唯一标识符,但是,如果必须通过向上滚动找到该元素,则无法找到它。另一方面,当找到元素WebDriver向下滚动页面时,它可以正常工作。

再次感谢您的解释。我今天学到了一些新东西!