Запуск testcafe без заголовка при передаче пользовательских аргументов в двоичный файл Chrome с помощью testcafe-browser-tools - PullRequest
0 голосов
/ 21 ноября 2018

Запуск testcafe внутри Vagrant VM, которая в основном работает.

Однако Chrome не запускается должным образом в этой среде с включенным аппаратным ускорением, поэтому я должен запустить его сфлаг командной строки --disable-gpu.

Для этого я использую пакет 'testcafe-browser-tools', переопределяя команду браузера по умолчанию через класс Runner в API-интерфейсе TestCafe.

Все это прекрасно работает в случае запуска TestCafe с открытием окна браузера, но я не смог выяснить, как использовать эту же настройку для запуска тестов в автономном режиме.Я попытался просто добавить --headless arg при изменении команды браузера, но он просто зависает и тесты не запускаются.

Команда CLI testcafe имеет переключатель для режима без головы, например 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();
})();

Есть ли какая-то модификация этого сценария, которая решит мою проблему, или нужен другой подход?

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать следующий код для запуска тестов в режиме без головы:

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

Это способ, которым мы используем внутренний режим без головы, поэтому он будет проанализирован правильно.Не могли бы вы проверить этот подход?

...