如何在webdriverjs中等待截图截图

How to wait in webdriverjs for takeScreenshot to have the screenshot taken

本文关键字:等待 webdriverjs      更新时间:2024-01-11

我使用以下类型的代码进行屏幕截图:

var promise = driver.takeScreenshot();
promise.then(function (data) {
    var base64Data = data.replace(/^data:image'/png;base64,/, '');
    fs.writeFileSync('screenshot.png', base64Data, 'base64');
});

由于takeScreenshot的异步性质,不幸的是,屏幕截图将在任意时间点进行,如果在此期间应用程序抛出异常,则根本不会编写屏幕截图。

使用webdriverjs同步拍摄屏幕截图的正确方法是什么?

我通常在After挂钩中进行屏幕截图。以下是cucumberjs中after Hook的示例代码。如果你用的是摩卡,它也有钩子。

 this.After(function (scenario, callback) {
        if(scenario.isFailed()){
            driver.takeScreenshot().then(function (buffer) {
                scenario.attach(new Buffer(buffer, 'base64').toString('binary'), 'image/png');
            });
        }
        driver.quit().then(function () {
                callback();
        });
 });

以下是WebDriverJS文档的一些摘录。因此,在截屏之前,您可以在特定条件下向WebDriver发送等待命令,然后也进行截屏。在钩子工作后的一般测试框架中最好的

WebDriverJS uses a promise "manager" to coordinate the scheduling and execution of all commands.
The promise manager maintains a queue of scheduled tasks, executing each once the one before it in the queue is finished.