Automated tests 通过testcafe浏览器工具将自定义参数传递给Chrome二进制文件时,运行testcafe headless

Automated tests 通过testcafe浏览器工具将自定义参数传递给Chrome二进制文件时,运行testcafe headless,automated-tests,vagrant,e2e-testing,google-chrome-headless,testcafe,Automated Tests,Vagrant,E2e Testing,Google Chrome Headless,Testcafe,在一个流浪的虚拟机中运行testcafe,它大部分都在工作 但是,Chrome无法在启用硬件加速的环境中正常启动,因此我必须使用命令行标志--disable gpu启动它 我正在利用“testcafe浏览器工具”包来实现这一点,通过testcafe API中的Runner类重写默认浏览器命令 在运行TestCafe并打开浏览器窗口的情况下,这一切都很好,但我还没有弄清楚如何使用相同的设置在headless模式下运行测试。在修改browser命令时,我尝试简单地添加--headless参数,但它只

在一个流浪的虚拟机中运行testcafe,它大部分都在工作

但是,Chrome无法在启用硬件加速的环境中正常启动,因此我必须使用命令行标志
--disable gpu
启动它

我正在利用“testcafe浏览器工具”包来实现这一点,通过testcafe API中的Runner类重写默认浏览器命令

在运行TestCafe并打开浏览器窗口的情况下,这一切都很好,但我还没有弄清楚如何使用相同的设置在headless模式下运行测试。在修改browser命令时,我尝试简单地添加
--headless
参数,但它只是挂起,测试从未开始

testcafe CLI命令有一个headless模式的开关,比如
testcafe“chrome:headless”test.js
,并深入研究了似乎设置了一些内部配置变量的代码,这些变量起到了神奇的作用,但我一直无法弄清楚如何在通过API定制浏览器命令时获得相同的行为

作为参考,以下是我编写的用于启动测试的脚本:

const format = require('util').format;
const programName = process.argv[1];

const usage = () => {
  console.log("Configures Chrome and runs all passed tests.\n\n");
  console.log(format('Usage: %s [--headless] <file_pattern_1> [file_pattern_N]', programName));
}

const args = process.argv.slice(2);
const testFilePatterns = [];
let headless = '';

for (let filePattern of args) {
  if (filePattern == '--headless') {
    console.log('Headless mode enabled');
    headless = '--headless';
  }
  else {
    console.log(format('Adding file pattern %s for testing', filePattern));
    testFilePatterns.push(filePattern);
  }
}

if (testFilePatterns.length < 1) {
  usage();
  process.exit(1);
}

const testcafeBrowserTools = require('testcafe-browser-tools');
const createTestCafe = require('testcafe');

(async () => {
  const info = await testcafeBrowserTools.getBrowserInfo('/usr/bin/chromium');
  info.cmd = `${info.cmd} ${headless} --no-sandbox --disable-gpl`;
  console.log(format('Running chrome with command: %s', info.cmd));
  const testcafe = await createTestCafe();
  const failedCount = await testcafe
    .createRunner()
    .src(testFilePatterns)
    .browsers(info)
    .run();
  testcafe.close();
})();
const format=require('util')。格式;
const programName=process.argv[1];
常量用法=()=>{
log(“配置Chrome并运行所有通过的测试。\n\n”);
log(格式(“用法:%s[--headless][file\u pattern\u N]”,程序名));
}
const args=process.argv.slice(2);
const testFilePatterns=[];
让无头='';
for(let参数的文件模式){
如果(filePattern='--headless'){
console.log(“无头模式启用”);
无头='--无头';
}
否则{
log(格式('Adding file pattern%s for testing',filePattern');
push(filePattern);
}
}
if(testFilePatterns.length<1){
用法();
过程。退出(1);
}
const testcafeBrowserTools=require('testcafe-browser-tools');
const createTestCafe=require('testcafe');
(异步()=>{
const info=wait testcafeBrowserTools.getBrowserInfo('/usr/bin/chromium');
info.cmd=`${info.cmd}${headless}--无沙盒--禁用gpl`;
log(格式('Running chrome with command:%s',info.cmd));
const testcafe=wait createTestCafe();
const failedCount=等待测试
.createRunner()
.src(testFilePatterns)
.浏览器(信息)
.run();
testcafe.close();
})();

是否对该脚本进行了一些修改以解决我的问题,或者需要另一种方法?

您可以使用以下代码在中运行测试:


这是我们在内部使用headless模式的方式,因此它将被正确解析。您能检查一下这种方法吗?

这种方法同样适用于CLI,只需引用整个浏览器字符串即可。此外,在运行headless:testcafe'chrome:headless--no sandbox'test.js时,不需要--disable gpu参数
await testcafe.createRunner()
    .src('test.js')
    .browsers('chrome:headless --no-sandbox --disable-gpu')
    .run();