捕获waitForSelector错误

时间:2018-11-10 02:41:48

标签: javascript node.js automation ui-automation puppeteer

我使用一个名为Puppeteer的模块。

我试图等待页面上可能没有出现的选择器。在我采用的两种方法中,只有try-catch方法有效。

尝试捕获块-工作中

try {
    await page.waitForSelector('.element');
    //element appeared
} catch (error) {
    //element did not appear
}

承诺链接-不起作用

await page.waitForSelector('.element')
    .catch((error) => { 
        //element did not appear
    })
    .then(() => {
        //element appeared
    });

似乎waitForSelector确实返回了API中指示的Promise,但是我不知道为什么后一种方法不起作用。无论如何,它引发了错误。

有人遇到过同样的问题吗?

1 个答案:

答案 0 :(得分:1)

您应该重组Promise Chaining示例,使其在then()方法之前使用catch()方法。

使用page.waitForSelector()考虑​​以下示例:

// Correct Method
await page.waitForSelector('#example').then(() => {
  console.log('SUCCESS');
}).catch(e => {
  console.log('FAIL');
});

如果该元素不存在,那么FAIL将被记录到控制台。否则,如果元素确实存在,则输出将为SUCCESS

另一方面,请看下面的示例,其中then()catch()颠倒了:

// Incorrect Method
await page.waitForSelector('#example').catch(e => {
  console.log('FAIL');
}).then(() => {
  console.log('SUCCESS - not necessarily');
});

如果该元素不存在,那么FAIL将被记录到控制台,但是无论该元素是否存在,SUCCESS也将被写入控制台。这是因为记录SUCCESS是尝试捕获错误之后链中的下一个直接步骤。

then()之前使用catch()将允许您打印两条消息之一并获得所需的结果。