【发布时间】:2018-01-11 13:01:54
【问题描述】:
我在我的页面对象中这样做:
try{
I.selectOption(this.SELECT, this.OPTION);
}
catch(error){
I.say('Option missing, but thats sometimes expected ' + error);
}
但当定位器与选项元素不匹配时,它仍然无法通过测试。
我想赶上并继续测试,不失败。
更新:
看起来这取决于 try 块中的内容。
如果我在那里放一个断言,比如I.see('something');,那么catch块就不会被跳过。但是 try 块中的非断言,例如 I.selectOption('something') 会抛出未被 catch 捕获的错误。
【问题讨论】:
-
这听起来很奇怪“缺少选项,但有时这是意料之中的”。不过既然你抓到了,这应该不会失败吧?
-
@lorenz,这只是错误日志的任意字符串。我可以在那里传递“ABCD”。但我认为这不会导致我的 catch 块被跳过。
-
@PatMeeker 您是否曾经想出解决方案或解决方法?我遇到了同样的问题。不过有一些想法: (1) 由于 I.* 函数通常返回承诺,因此您需要将
await放在I.selectOption调用之前,以便catch捕获失败。 (2) 我有一种预感,这是因为 CodeceptJS 使用了全局承诺链。因此,如果 I.* 失败,无论是否被捕获,内部全局承诺都会失败。 -
@drmercer 不幸的是没有。在我的情况下,可以将上下文信息传递给我用来有条件地选择选项的方法,这不像我上面的懒惰方法那样干净 - 先尝试选择然后做出反应。无论如何,我想另一种方法可能是使用 JS Executor,并将您需要的任何非断言方法的功能复制到您自己的自定义 JS 函数中,如果您真的想让这个流程工作的话。
标签: javascript node.js try-catch webdriver-io codeceptjs