程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题?

开发过程中遇到在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题的问题如何解决?下面主要结合日常开发的经验,给出你关于在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题的解决方法建议,希望对你解决在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题有所启发或帮助;

我正在设置一个 docker 容器来运行我的 Angular E2E 测试。我在设置 Chromium 时似乎遗漏了一些东西。我正在使用带有量角器的 Angular 11。

我的 Dockerfile 是

FROM node:15.6.0

RUN apt-get update && \
    DEBIAN_FRONTEND="nointeractive" \
    apt-get install -y --no-install-recommends \
    chromium \
    libgconf-2-4 \
    openjdk-8-jre-headless \
    && rm -rf /var/lib/apt/Lists/*

workdir /opt/frontend/angular
copY . .

RUN rm -r node_modules
RUN npm install -g @angular/cli
RUN npm install

CMD ng e2e --baseUrl="http://something.com/"

我在 docker 中遇到的错误是

Connected.
Your global Angular Cli version (11.1.1) is greater than your local version (11.0.0). The local Angular Cli version is used.

To disable this warning use "ng config -g cli.warnings.versionMismatch false".
[20:43:25] I/file_manager - creaTing folder /opt/frontend/angular/node_modules/protractor/node_modules/webdriver-manager/@R_450_10288@nium
[20:43:25] I/config_source - curl -o/opt/frontend/angular/node_modules/protractor/node_modules/webdriver-manager/@R_450_10288@nium/Chrome-response.xml https://Chromedriver.storage.GoogleAPIs.com/
[20:43:27] I/downloader - curl -o/opt/frontend/angular/node_modules/protractor/node_modules/webdriver-manager/@R_450_10288@nium/Chromedriver_88.0.4324.96.zip https://Chromedriver.storage.GoogleAPIs.com/88.0.4324.96/Chromedriver_linux64.zip
[20:43:29] I/update - Chromedriver: unzipPing Chromedriver_88.0.4324.96.zip
[20:43:29] I/update - Chromedriver: setTing permissions to 0755 for /opt/frontend/angular/node_modules/protractor/node_modules/webdriver-manager/@R_450_10288@nium/Chromedriver_88.0.4324.96
[20:43:30] I/launcher - Running 1 instances of WebDriver
[20:43:30] I/direct - Using ChromeDriver directly...
[20:43:32] E/runner - Unable to start a WebDriver session.
[20:43:32] E/launcher - Error: WebDriverError: unkNown error: Chrome Failed to start: exited abnormally.
  (unkNown error: DevToolsActivePort file doesn't exist)
  (The process started from Chrome LOCATIOn /usr/bin/chromium is no longer running,so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: Chromedriver=88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784}),platform=linux 4.19.121-linuxkit x86_64)
    at Object.checkLegacyResponse (/opt/frontend/angular/node_modules/@R_450_10288@nium-webdriver/lib/error.Js:546:15)
    at parsehttpResponse (/opt/frontend/angular/node_modules/@R_450_10288@nium-webdriver/lib/http.Js:509:13)
    at /opt/frontend/angular/node_modules/@R_450_10288@nium-webdriver/lib/http.Js:441:30
    at processticksAndRejections (node:internal/process/task_queues:94:5)
[20:43:32] E/launcher - Process exited with error code 100
disconnected from container.

在 docker 中为 Angular e2e 测试设置 Chromium 时,我有什么遗漏吗?

解决方法

您可以使用解决此任务的预构建映像 https://hub.docker.com/r/trion/ng-cli-e2e 或从工作 Dockerfile 中获得启发: https://github.com/trion-development/docker-ng-cli-e2e/blob/master/Dockerfile

,

主要问题出在 Dockerfile 和量角器配置文件中。

量角器配置文件的第一个问题是您应该传递正确的 chromeOptions。这些参数是必须的。最终的量角器文件:

const { SpecReporter } = require('jasmine-spec-reporter');
const PrettyReporter = require('protractor-pretty-html-reporter').Reporter;
const path = require('path');
const fs = require('fs');
const now = new Date();
exports.report_name = 'Report-' + now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate() + "-" + now.getHours() + "-" + now.getminutes() + "-" + now.getSeconds();
exports.logfile_name = 'results-' + now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate() + "-" + now.getHours() + "-" + now.getminutes() + "-" + now.getSeconds();
const Reporter = path.resolve("./target/");
const report = `${Reporter}` + '/' + exports.report_name;

const mkdirSync = function (report) {
  try {
    fs.mkdirSync(report);
  }
  catch (err) {
    if (err.code !== 'EEXIST')
      throw err;
  }
};
// @ts-ignore
var prettyReporter = new PrettyReporter({
  path: report,screenshotOnPassed: true
});

/**
 * @type { import("protractor").Config }
 */
exports.config = {
  allScriptsTimeout: 11000,specs: [
    './src/**/*.e2e-spec.ts'
  ],capabilities: {
    browserName: 'chrome','directConnect': true,chromeOptions: {
      args: [
        'window-size=1280,710','no-sandbox','headless','disable-gpu','disable-dev-shm-usage'
      ]
    },sharedTestFiles: true,maxInstances: 1
  },directConnect: true,baseUrl: 'http://localhost:4200/',framework: 'jasmine',jasmineNodeOpts: {
    showColors: true,defaultTimeoutInterval: 30000,print: function() {}
  },beforeLaunch() {
    mkdirSync("target")
    prettyReporter.startReporter();
  },onPrepare() {
    require('ts-node').register({
      project: require('path').join(__dirname,'./tsconfig.json')
    });
    jasmine.getEnv().addReporter(prettyReporter);
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  }
};

另一个问题是无法找到特定版本的 Chrome,而且每次构建时很容易出现此问题,因为版本可能会发生变化。解决方案是确保您知道正在安装的 Chrome 版本。然后你需要使用 node-modules 中的 webdriver-manager 更新预期的 Chrome 版本(注意这一步应该在安装 node 包后完成)。这是成功运行的 Dockerfile 的编辑版本。最终的 Dockerfile:

FROM node:15.6.0
ENV chrome_version=88.0.4324.104
ENV testurl default_test_base_url

# Google Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
    && apt-get update -qqy \
    && apt-get -qqy install google-chrome-stable \
    && rm /etc/apt/sources.list.d/google-chrome.list \
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
    && sed -i 's/"$HERE\/chrome"/"$HERE\/chrome" --no-sandbox/g' /opt/google/chrome/google-chrome
    
WORKDIR /opt/frontend/angular
COPY ./frontend/angular .

RUN rm -rf node_modules || true
RUN npm install -g @angular/cli@11
RUN npm install
RUN ./node_modules/.bin/webdriver-manager update --versions.chrome ${Chrome_version}

CMD ng e2e --baseUrl=$testurl

大佬总结

以上是大佬教程为你收集整理的在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题全部内容,希望文章能够帮你解决在 docker 中运行 e2e Angular 测试并设置 Chromium 的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。