如果出现点击错误,请继续测试
Continue test if a click error occurs
我正在使用PhantomJS运行CasperJS。我让它转到一个 url 并单击基于 XPath 的元素。这可能会发生几次而没有问题,直到,我怀疑页面加载有延迟,它找不到 XPath,它会抛出错误并停止测试。我希望它继续通过错误。我不想等待+点击的时间比我已经更长,因为有很多点击正在进行,并且随机点击可能会出错,等待每次点击都会适得其反。
我试过把整个测试放进一个尝试捕捉中,它不会接住。
我能找到的唯一处理只是提供了有关错误的更多信息,仍然停止了测试。
我会等待您要运行的选择器,超时时间很短。在成功功能中单击,在超时功能中报告问题(或根本不执行任何操作)。
例如:
casper.waitForSelector('a.some-class', function() {
this.click('a.some-class');
}, function onTimeout(){
this.echo("No a.some-class found, skipping it.");
},
100); //Only wait 0.1s, as we expect it to already be there
});
(如果您在此之前已经在执行casper.wait()
,请将其替换为上面的代码,并相应地增加超时。
您无法在异步执行的内容中捕获错误。所有then*
和wait*
函数都是异步的阶跃函数。
达伦库克提供了一个很好的可靠解决方案。这里有两个可能适合您的。
casper.options.exitOnError
CasperJS提供了一个选项,用于禁用错误时退出。它工作可靠。堆栈跟踪的完整错误将打印在控制台中,但脚本执行仍在继续。虽然,当您还遇到其他可能想要停止执行的错误时,这可能会产生不利影响。
尝试捕获
使用 try-catch 块在 CasperJS 中有效,但仅适用于同步代码。以下代码显示了一个示例,其中仅打印错误消息而不打印堆栈跟踪:
casper.then(function() {
try {
this.click(selector);
} catch(e){
console.log("Caught", e);
}
});
或更多集成:
// at the beginning of the script
casper.errorClick = function(selector) {
try {
this.click(selector);
} catch(e){
console.log("Caught", e);
return false;
}
return true;
};
// in the test
casper.then(function() {
this.errorClick("someSelector");
});
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 为什么继续;语句冻结浏览器
- 如何在断言失败时继续测试用例 在 CasperJS 中
- QUnit 异步测试在出错后不会继续
- 如果出现点击错误,请继续测试
- javascript.继续测试直到正确
- 当到达ajax代码时,Javascript测试不会继续