0

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

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

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

waitFor { // page no longer scrolling }

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

4

2 回答 2

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 }
于 2013-04-19T18:18:05.383 回答
-2

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

于 2013-04-19T10:45:04.457 回答