是否可以断言页面已停止在waitFor中滚动

时间:2013-04-18 18:15:37

标签: selenium webdriver spock geb

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

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

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

waitFor { // page no longer scrolling }

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

2 个答案:

答案 0 :(得分: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 }

答案 1 :(得分:-2)

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