运行 通过 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();
这是我们在内部使用无头模式的方式,所以它会被正确解析。你能检查一下这个方法吗?
运行 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();
这是我们在内部使用无头模式的方式,所以它会被正确解析。你能检查一下这个方法吗?