如何在实习生javascript测试中截取屏幕截图并写入文件?

时间:2014-03-20 11:11:26

标签: javascript node.js webdriver screenshot intern

我正在使用http://theintern.io/进行浏览器功能测试。如何截取屏幕截图并将其保存到文件中?

这就是我所拥有的

var fs = require('fs'); /* returns exception */
...
return this.remote
  .get(require.toUrl(url))
  .takeScreenshot(function(data) {
    fs.writeFile(filename, data.replace(/^data:image\/png;base64,/,''), 'base64', function(err) {if(err) throw err; });
})

谢谢!

2 个答案:

答案 0 :(得分:1)

一个工作示例,包括使用dojo节点帮助程序获取fs:

define(
    [
        'intern!object',
        'intern/chai!assert',
        'intern/dojo/node!fs'
    ],
    function (registerSuite, assert, fs) {
        registerSuite(
            {
                name: 'basict',

                'screencap': function () {

                    var remote = this.remote;
                    var workflowUrl = "https://foo.com";

                    return remote
                        .setImplicitWaitTimeout(40000)
                        .get(workflowUrl)
                        .takeScreenshot()
                        .then(function(data) {
                                fs.writeFileSync("/Users/whatever/myfile.png", data.replace(/^data:image\/png;base64,/,''), 'base64');
                        })
                        .end()
                }
            }
        );
    }
);

答案 1 :(得分:0)

远程接口是基于承诺的,而不是基于回调的,因此您需要在调用then后调用takeScreenshot以获取错误。您还需要使用fs.writeFile的同步版本,除非您创建并返回一个承诺;从fs.writeFile的回调中抛出错误只会进入深渊:

return this.remote
  .get(url)
  .takeScreenshot()
  .then(function(data) {
    fs.writeFileSync(filename, data.replace(/^data:image\/png;base64,/,''), 'base64');
});