如何移动到在浏览器中不可见的 geb 页面内容window?
How to move to geb page content that is not visible in the browser window?
如何让 geb webdriver 移动到页面上可能不在浏览器视图中的元素。该元素存在于页面上并显示,但该元素可能会出现在页面底部,浏览器需要向下滚动才能显示该元素。
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 class 的对象。使用 geb,在创建页面 classes 时,我的测试中使用的所有元素都在内容部分声明,因此属于 SimplePageContent class。 SimplePageContent 也不能转换为 WebElement。 moveToElement(By.id("bottomOfPage"))
确实有效,但并不理想,因为我不想要硬编码值。如果可能的话,我宁愿传递页面内容对象本身。
根据我的经验,我可以说,如果您要求 WebDriver 单击当前不在视图中的元素,它将首先滚动到该元素,然后单击它。因此,如果它没有发生,你要么遇到了某种错误,要么元素不在视图中的事实并不是导致你的元素不被点击的原因。
如果您仍然想使用 Actions.moveToElement()
显式移动到元素,那么您可以轻松地转换从内容定义返回的对象,因为它们实现了 Navigator
,它带有 [=22] =] 当你的 Navigator
恰好有一个 WebElement
.
还有一种更简单的方法,不需要从您的 Navigator
中提取 WebElement
- 使用 interact {}
块:
interact {
moveToElement(someElement)
}
如何让 geb webdriver 移动到页面上可能不在浏览器视图中的元素。该元素存在于页面上并显示,但该元素可能会出现在页面底部,浏览器需要向下滚动才能显示该元素。
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 class 的对象。使用 geb,在创建页面 classes 时,我的测试中使用的所有元素都在内容部分声明,因此属于 SimplePageContent class。 SimplePageContent 也不能转换为 WebElement。 moveToElement(By.id("bottomOfPage"))
确实有效,但并不理想,因为我不想要硬编码值。如果可能的话,我宁愿传递页面内容对象本身。
根据我的经验,我可以说,如果您要求 WebDriver 单击当前不在视图中的元素,它将首先滚动到该元素,然后单击它。因此,如果它没有发生,你要么遇到了某种错误,要么元素不在视图中的事实并不是导致你的元素不被点击的原因。
如果您仍然想使用 Actions.moveToElement()
显式移动到元素,那么您可以轻松地转换从内容定义返回的对象,因为它们实现了 Navigator
,它带有 [=22] =] 当你的 Navigator
恰好有一个 WebElement
.
还有一种更简单的方法,不需要从您的 Navigator
中提取 WebElement
- 使用 interact {}
块:
interact {
moveToElement(someElement)
}