如果出现点击错误,请继续测试

Continue test if a click error occurs

本文关键字:继续 测试 错误 如果      更新时间:2023-09-26

我正在使用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");
});