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

hun*_*onk 4 automated-tests vagrant e2e-testing testcafe google-chrome-headless

在 Vagrant VM 中运行 testcafe,该 VM大部分工作正常。

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

我利用“testcafe-browser-tools”包来完成此操作,通过 TestCafe API 中的 Runner 类覆盖默认浏览器命令。

对于打开浏览器窗口运行 TestCafe 的情况来说,这一切都很好,但我无法弄清楚如何使用相同的设置在无头模式下运行测试。我尝试--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();
})();
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*aev 5

您可以使用以下代码在无头模式下运行测试:

\n
await testcafe.createRunner()\n    .src(\'test.js\')\n    .browsers(\'chrome:headless --no-sandbox --disable-gpu\')\n    .run();\n
Run Code Online (Sandbox Code Playgroud)\n

\xc2\xa0 \xc2\xa0\xc2\xa0\n这是我们内部使用无头模式的方式,因此它将被正确解析。您能检查一下这个方法吗?

\n