我对这里使用的导航器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异常。
是什么给出了?
答案 0 :(得分:5)
这是因为页面上模块上的表元素是必需元素(默认值)。当您尝试使用所需的页面元素,但选择器返回一个空导航器时,geb将抛出该异常。要解决此问题,您需要告诉geb该模块不是必需的:
class Module{
static content {
table(required: false) { /* selector here*/ }
}
}
现在当你使用table时,你会得到空的导航器而不是异常。