【问题标题】:How do I take a screenshot and write to a file in intern javascript testing?如何在实习生 javascript 测试中截取屏幕截图并写入文件?
【发布时间】:2014-03-20 11:11:26
【问题描述】:

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

谢谢!

【问题讨论】:

标签: javascript node.js webdriver screenshot intern


【解决方案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()
                }
            }
        );
    }
);

【讨论】:

    【解决方案2】:

    远程接口是基于promises的,不是基于回调的,所以在调用takeScreenshot之后需要调用then才能得到错误。你还需要使用fs.writeFile的同步版本,除非你创建并返回一个promise;从fs.writeFile的回调中抛出错误只会陷入深渊:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多