Geb 在空导航器上使用导航器方法
Geb using Navigator Methods on empty Navigators
我对此处 http://www.gebish.org/manual/current/api/geb/navigator/Navigator.html
中用于导航器 API 的措辞有点困惑
特别是,我对 .isDisplayed 方法感到困惑。
方法文档指出:
"Returns true if the sole context element is displayed or false for empty Navigators. Cannot be called on multi element Navigators."
问题是如果我在空导航器上调用 .isDisplayed() 它不会 return false。相反,它抛出这个错误:
table: geb.navigator.EmptyNavigator' is not present
它失败的行看起来像这样:
at SomePage //This page has a module element called "module"
if(module.table.isDiplayed()){ // module has a navigtor element called table
//do stuff
}
有问题的 table 元素确实不存在,因此 table 元素确实是一个空导航器,但根据文档,这意味着当我调用 .isDisplayed() 它时应该 return false 但它会抛出上述错误
这与调用模拟导航器方法(例如 .isEmpty())时的情况相同
同样,如果在页面上找不到该元素,我希望 .isEmpty() 在从空元素调用时为 return true,但它会抛出 EmptyNavigator 异常。
什么给了?
这是因为页面模块中的 table 元素是必需元素(默认)。当您尝试使用必需的页面元素,但选择器 returns 为空导航器时,geb 将抛出该异常。要解决此问题,您需要告诉 geb 该模块不是必需的:
class Module{
static content {
table(required: false) { /* selector here*/ }
}
}
现在当您使用 table 时,您将返回空导航器而不是异常。
我对此处 http://www.gebish.org/manual/current/api/geb/navigator/Navigator.html
中用于导航器 API 的措辞有点困惑特别是,我对 .isDisplayed 方法感到困惑。
方法文档指出: "Returns true if the sole context element is displayed or false for empty Navigators. Cannot be called on multi element Navigators."
问题是如果我在空导航器上调用 .isDisplayed() 它不会 return false。相反,它抛出这个错误:
table: geb.navigator.EmptyNavigator' is not present
它失败的行看起来像这样:
at SomePage //This page has a module element called "module"
if(module.table.isDiplayed()){ // module has a navigtor element called table
//do stuff
}
有问题的 table 元素确实不存在,因此 table 元素确实是一个空导航器,但根据文档,这意味着当我调用 .isDisplayed() 它时应该 return false 但它会抛出上述错误
这与调用模拟导航器方法(例如 .isEmpty())时的情况相同 同样,如果在页面上找不到该元素,我希望 .isEmpty() 在从空元素调用时为 return true,但它会抛出 EmptyNavigator 异常。
什么给了?
这是因为页面模块中的 table 元素是必需元素(默认)。当您尝试使用必需的页面元素,但选择器 returns 为空导航器时,geb 将抛出该异常。要解决此问题,您需要告诉 geb 该模块不是必需的:
class Module{
static content {
table(required: false) { /* selector here*/ }
}
}
现在当您使用 table 时,您将返回空导航器而不是异常。