如何让gebwebdriver移动到页面上可能不在浏览器视图中的元素。该元素存在于页面上并显示,但可能会出现在页面底部,浏览器需要向下滚动才能查看该元素。
import geb.Page
class myPage extends Page {
static url = "mypage.xhtml"
static at = {title == "myPage"}
static content = {
someElement = {$("#bottomOfPage")}
anotherElement = {$(".someClass",5)}
}
void clickElement(){
//possibility to fail because element may not be displayed in browsers view
//if not in view, scroll to element, then click
someElement.click()
}
}
以这个页面为例,如果一个元素在页面上不在视图中,可能在最底部,我如何告诉webdriver将该元素带入视图?我有一些复杂的测试,当页面内容不在视图中时会失败。在某些情况下,驱动程序将移动到元素,即使它不在视图中。但我想明确地告诉驱动程序,如果某个元素不在视图中,那么它就不能自己移动。
selenium库确实有一个moveToElement()函数,但它只接受WebElement类的对象。使用geb,当创建页面类时,我的测试中使用的所有元素都在内容部分中声明,因此属于SimplePageContent类。SimplePageContent也不能强制转换为WebElement。
moveToElement(By.id("bottomOfPage"))
确实有效,但并不理想,因为我不想要硬编码的值。如果可能的话,我更愿意传递页面内容对象本身。