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 时,您将返回空导航器而不是异常。