javascript - 如何在 webdriverjs 中等待 takeScreenshot 截取屏幕截图

标签 javascript node.js selenium selenium-webdriver webdriver

我使用以下类型的代码来截取屏幕截图:

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 Hook 中截取屏幕截图。下面是 cucumberjs 中 after Hook 的示例代码。如果您使用摩卡咖啡,它也有钩子(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 发送等待命令,然后也进行截屏。一般测试框架中hooks之后效果最好

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.

关于javascript - 如何在 webdriverjs 中等待 takeScreenshot 截取屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569447/

相关文章:

javascript - EnyoJS 上下排列器

python-3.x - 像带有 Selenium python 的 Instagram 照片

java - 按值选择元素

当 bot 尝试单击协议(protocol)按钮时,python selenium 元素不可交互

node.js - 无法查询嵌套对象

angularjs - Protractor - 在 webstorm 中调试

javascript - 选择元素并替换 each() 中的文本

javascript - Backbone : How to bind arguments for listenTo-callback?

javascript - 回显页面上出现次数最多的 5 个单词

node.js - Node 、Express、案例研究 : "Error: Can' t set headers after they are sent"