Javascript 在PhantomJS2中运行测试时拍摄Karma的屏幕截图?
我需要一种方法,在使用QUnit和Karma在PhantomJS 2.0.1中运行的测试期间拍摄屏幕截图 我发现这个命令:Javascript 在PhantomJS2中运行测试时拍摄Karma的屏幕截图?,javascript,phantomjs,screenshot,karma-runner,qunit,Javascript,Phantomjs,Screenshot,Karma Runner,Qunit,我需要一种方法,在使用QUnit和Karma在PhantomJS 2.0.1中运行的测试期间拍摄屏幕截图 我发现这个命令: window.top.callPhantom('render'); 这不会引发任何错误,但似乎不起作用,或者至少,我不知道在哪里可以找到拍摄的截图 window.top.callPhantom({type: 'render', fname: '/tmp/myscreen.png'}); 有线索吗?找到了办法 解决方案 我必须编辑我的自定义PhantomJS自定义启动器,
window.top.callPhantom('render');
这不会引发任何错误,但似乎不起作用,或者至少,我不知道在哪里可以找到拍摄的截图
window.top.callPhantom({type: 'render', fname: '/tmp/myscreen.png'});
有线索吗?找到了办法
解决方案
我必须编辑我的自定义PhantomJS自定义启动器,添加一个选项:
PhantomJSCustom: {
base: 'PhantomJS',
options: {
onCallback: function(data){
if (data.type === "render") {
// this function will not have the scope of karma.conf.js so we must define any global variable inside it
if (window.renderId === undefined) { window.renderId = 0; }
page.render(data.fname || ("screenshot_" + (window.renderId++) + ".png"));
}
}
}
}
如您所见,我们正在定义该选项,它将被注入由phantomjs
启动的脚本中。
那么,脚本将包含:
page.onCallback = <our function>
拍摄将保存在应用程序根目录中的屏幕截图
此外,如果定义fname
,则可以为屏幕截图定义自定义路径和文件名
window.top.callPhantom({type: 'render', fname: '/tmp/myscreen.png'});
全部打包以便于使用 我已经创建了一个方便的函数,可以在测试中使用。onCallback函数被减少到所需的最小值,通过这种方式,所有逻辑都在我的测试环境中进行管理: karma.conf.js 帮手
信用
我从中获得了这个脚本,对其进行了改编,并自己找到了将其放置在何处,以使其与karma一起工作。我为一个定制的phantomjs创建的karma条目,用于拍摄快照,如下所示:
module.exports=函数(配置){
config.set({
..
浏览器:['PhantomJSCustom'],
自定义启动器:{
“幻影自定义”:{
base:'PhantomJS',
选项:{
onCallback:函数(数据){
如果(data.type==“渲染”){
//这个函数不属于karma.conf.js的范围,因此我们必须在其中定义任何全局变量
如果(window.renderId==未定义){window.renderId=0;}
render(data.fname | |(“屏幕截图”+(window.renderId++)+.png”);
}
}
}
}
},
幻影发射器:{
//如果遇到资源错误,让phantomjs退出(如果因果报应退出而不杀死//phantomjs很有用)
exitOnResourceError:true
},
..
})
很棒的东西!我很好奇,你在哪里找到一个好地方来添加常见的助手函数?使用karma和qunit,我们在加载所有此类助手的测试之前加载了一些文件。
PhantomJSCustom: {
base: 'PhantomJS',
options: {
onCallback: function(data){
if (data.type === 'render' && data.fname !== undefined) {
page.render(data.fname);
}
}
}
}
// With this function you can take screenshots in PhantomJS!
// by default, screenshots will be saved in .tmp/screenshots/ folder with a progressive name (n.png)
var renderId = 0;
function takeScreenshot(file) {
// check if we are in PhantomJS
if (window.top.callPhantom === undefined) return;
var options = {type: 'render'};
// if the file argument is defined, we'll save the file in the path defined eg: `fname: '/tmp/myscreen.png'
// otherwise we'll save it in the default directory with a progressive name
options.fname = file || '.tmp/screenshots/' + (renderId++) + '.png';
// this calls the onCallback function of PhantomJS, the type: 'render' will trigger the screenshot script
window.top.callPhantom(options);
}