【问题标题】:Is it possible to assert that the page has stopped scrolling in a waitFor是否可以断言页面已停止滚动等待
【发布时间】:2013-04-18 18:15:36
【问题描述】:

我有一个页面,我在其中单击“更改”链接,该链接显示另一个部分。发生这种情况时,页面会垂直滚动一点,以便可见部分在屏幕上居中。

我在测试中的下一步是单击这个新显示的容器内的某些内容。但由于视口滚动,geb 为可点击元素获取的坐标不再准确,并且 geb 告诉我它无法点击链接。

就可见内容而言,我无法在waitFor 中断言。但我想知道是否有办法让我waitFor 内容停止滚动?

waitFor { // page no longer scrolling }

如果没有,有没有办法告诉 geb 在继续下一个事件之前等待几秒钟?

【问题讨论】:

  • 硒 RC?还是 WebDriver?
  • 坐标滚动后不能再获取吗?我们还能看到一些 HTML 吗?
  • 好吧,如果我知道如何等待滚动完成以获取新坐标,我的问题就解决了,对吧?
  • 天哪,你有没有看我的问题?
  • 对不起,我想我听不懂。

标签: selenium webdriver spock geb


【解决方案1】:

如果您知道要滚动到哪个元素(完成滚动后位于浏览器视口顶部的元素),您可以等待表示该元素的导航器的 y 属性为零.以下是一个示例,您可以将其粘贴到 groovy 控制台中,该控制台转到一个页面,然后通过在 url 中使用它的 id 滚动到一个元素(我知道这里没有等待,滚动也没有动画,但我只是想展示一下属性可以用来实现你想要的):

@Grapes([
   @Grab('org.gebish:geb-core:0.9.0'),
   @Grab('org.seleniumhq.selenium:selenium-firefox-driver:2.32.0')
])

import geb.Browser

Browser.drive {    
    //at the top of the page
    go 'http://docs.codehaus.org/display/GROOVY/Creating+an+extension+module'

    //an element we'll scroll to later
    def elem = $('#Creatinganextensionmodule-Themoduledescriptor')
    assert elem.y != 0

    //scroll to the element
    go 'http://docs.codehaus.org/display/GROOVY/Creating+an+extension+module#Creatinganextensionmodule-Themoduledescriptor'
    assert elem.y == 0
}

所以你应该得到类似的结果:

waitFor { elementWeScrollTo.y == 0 }

甚至:

waitFor { !elementWeScrollTo.y }

【讨论】:

  • 这看起来是个好方法。我会试一试并报告。谢谢!
【解决方案2】:

我不知道如何在 geb 中表达它,但我会编写一个循环反复检查 document.body.pageYOffset(IE 为 document.body.scrollTop),直到它稳定下来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多