【问题标题】: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');
});