无头铬与Chrome 83与业力断开连接

时间:2020-06-22 08:40:18

标签: karma-runner google-chrome-headless headless-browser

我使用KarmaSinonMocha进行了一些单元测试。运行良好,有一个月的时间,我在运行这些单元测试时遇到了一些问题。我的HeadlessChrome错误。确实,它显示了此错误:

HeadlessChrome 83.0.4103 (Windows 10.0.0) ERROR
Disconnected, because no message in 30000 ms.

我有以下业力配置:

module.exports = function (config) {
  config.set({
    // Others configs
    ...
    port: 9876,
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox', // required to run without privileges in docker
          '--user-data-dir=/tmp/chrome-test-profile',
          '--disable-web-security'
        ]
      }
    },
    captureTimeout: 10000,
    plugins: [
      'karma-mocha', 'karma-mocha-reporter', 'karma-junit-reporter', 'karma-chrome-launcher',
      'karma-typescript', 'karma-html-reporter'
    ]
  });
};

我发现了两种修复方法:

  • 降级到版本81。
  • 在浏览器中的localhost:9876中打开一个页面。
  • 更改业力配置(浏览器和标志属性):
module.exports = function (config) {
  config.set({
    // Others configs
    ...
    port: 9876,
    browsers: ['Chrome'],
    flags: [
      '--no-sandbox', // required to run without privileges in docker
      '--user-data-dir=/tmp/chrome-test-profile',
      '--disable-web-security'
    ],
    captureTimeout: 10000,
    plugins: [
      'karma-mocha', 'karma-mocha-reporter', 'karma-junit-reporter', 'karma-chrome-launcher',
      'karma-typescript', 'karma-html-reporter'
    ]
  });
};

如何再次使用ChromeHeadless?确实,这很不错,因为所有单元测试都在后台运行,而现在它打开浏览器,执行测试并关闭它。

2 个答案:

答案 0 :(得分:2)

我们对我的工作也感到惊讶。我们的测试从6月底开始失败,该测试是Chrome 83的新稳定版本。

他们肯定破坏了某些东西,您可以在这里继续:https://bugs.chromium.org/p/chromium/issues/detail?id=1090988

编辑:

因此,为了正确回答,如果您可以返回到Chrome 83之前的版本,那么现在可以修复它。但是,我不知道这件事,我需要找到一个新的docker镜像,这不好。

答案 1 :(得分:0)

我已经检查了问题,我们可以改用puppeteer的Chrome容器来解决此问题!

查看https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer的方法!

那样,我们依靠Chrome的开发团队提供的更稳定的功能。

请注意,这样做npm install会在每个人的计算机上安装一个新的Chrome二进制文件,但同时还要确保每个测试都针对同一版本。