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

swi*_*201 2 jquery geb

我对位于此处http://www.gebish.org/manual/current/api/geb/navigator/Navigator.html的导航器API所用的语言感到有些困惑

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

方法文档指出:“如果显示唯一的上下文元素,则返回true;如果是空的导航器,则返回false。不能在多元素导航器上调用。”

问题是,如果我在空的导航器上调用.isDisplayed(),则不会返回false。而是抛出此错误:

table: geb.navigator.EmptyNavigator' is not present
Run Code Online (Sandbox Code Playgroud)

它失败的行看起来像这样:

at SomePage //This page has a module element called "module"
if(module.table.isDiplayed()){ // module has a navigtor element called table
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

问题中的表元素确实不存在,因此该表元素确实是一个空的导航器,但是根据文档,这意味着当我调用.isDisplayed()时,它应该返回false,但是会抛出上述错误

再次调用诸如.isEmpty()之类的类似导航器方法时,情况相同,如果在页面上未找到该元素,我希望从空元素中调用.isEmpty()时返回true,但它抛出EmptyNavigator异常。

是什么赋予了?

jk4*_*k47 5

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

class Module{

  static content {
    table(required: false) { /* selector here*/ }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,当您使用表格时,您将获得空的导航器,而不是异常。