运行 通过 testcafe-browser-tools 将自定义参数传递给 Chrome 二进制文件时 testcafe 无头

Run testcafe headless when passing custom args to Chrome binary via testcafe-browser-tools

运行 Vagrant VM 中的 testcafe,大部分 工作。

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

来启动它

我正在利用 'testcafe-browser-tools' 包来完成此任务,方法是通过 TestCafe API.

中的 Runner class 覆盖默认浏览器命令

对于 运行ning TestCafe 打开浏览器 window 的情况,这一切都很好,但我一直无法弄清楚如何使用相同的设置来 运行 在无头模式下测试。我尝试在修改浏览器命令时简单地添加 --headless arg,但它只是挂起并且测试从未开始。

testcafe CLI 命令有一个用于无头模式的开关,例如 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();
})();

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

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

await testcafe.createRunner()
    .src('test.js')
    .browsers('chrome:headless --no-sandbox --disable-gpu')
    .run();

这是我们在内部使用无头模式的方式,所以它会被正确解析。你能检查一下这个方法吗?