在空导航器上使用导航器方法的Geb

时间:2016-06-03 15:02:17

标签: jquery geb

我对这里使用的导航器API的措辞感到有些困惑http://www.gebish.org/manual/current/api/geb/navigator/Navigator.html

特别是,我对.isDisplayed方法感到困惑。

方法文档说明: “如果显示唯一的上下文元素,则返回true;对于空的Navigators,返回false。无法在多元素导航器上调用。”

问题是如果我在空导航器上调用.isDisplayed()它不会返回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元素确实是一个空的导航器,但是根据文档意味着当我调用.isDisplayed()时它应该返回false但是它抛出了上面提到的错误

调用类似.isEmpty()等simular导航器方法的情况与此相同 再次,如果在页面上找不到元素,我希望.isEmpty()在从空元素调用时返回true,而是抛出EmptyNavigator异常。

是什么给出了?

1 个答案:

答案 0 :(得分:5)

这是因为页面上模块上的表元素是必需元素(默认值)。当您尝试使用所需的页面元素,但选择器返回一个空导航器时,geb将抛出该异常。要解决此问题,您需要告诉geb该模块不是必需的:

class Module{

  static content {
    table(required: false) { /* selector here*/ }
  }
}

现在当你使用table时,你会得到空的导航器而不是异常。