我有一个页面,我点击“更改”链接,显示另一个部分。发生这种情况时,页面会垂直滚动一点,以便可见部分在屏幕上稍微居中。
我测试的下一步是点击这个新显示的容器内的东西。但是,由于视口滚动,geb为可点击元素选取的坐标不再准确,geb告诉我它无法点击链接。
在可见内容方面我无法在waitFor
中断言。但我想知道是否有办法让waitFor
内容停止滚动?
waitFor { // page no longer scrolling }
如果没有,有没有办法告诉geb在继续下一个事件之前等待几秒钟?
答案 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
)循环,直到它稳定下来。