无法使用WSL在角度项目中启动ChromeHeadless,适用于Mac [英] Cannot start ChromeHeadless in Angular project using WSL, works on Mac
问题描述
我使用的是Windows Subsystem for Linux(Windows10,Ubuntu18.04LTS)。我将在下面列出所有其他相关版本。
此设置在我的Mac计算机上运行,没有将flags
数组添加到karma.conf.ts
,如下所示。
到目前为止我已经看过:
Headless Chrome slows tests by 10x
Ubuntu: Cannot start ChromeHeadless
Google Chrome 75.0.3770.80 HEADLESS no longer works inside Docker container
"rebuilding" yarn using npm rebuild --update-binary
预期行为 启动ChromeHeadless并运行测试
当前行为
以正常方式运行yarn test
会导致此错误:
02 10 2019 09:13:03.598:ERROR [launcher]: ChromeHeadless stdout:
02 10 2019 09:13:03.608:ERROR [launcher]: ChromeHeadless stderr: Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Permission denied
Failed to generate minidump.
02 10 2019 09:13:03.623:DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-5419534
21% building 99/100 modules 1 active ...ngenio/packages/web-app/src/styles.scss02 10 2019 09:13:03.699:INFO [launcher]: Trying to start ChromeHeadless again (2/2).
02 10 2019 09:13:03.702:DEBUG [launcher]: BEING_CAPTURED -> RESTARTING
02 10 2019 09:13:03.715:DEBUG [launcher]: RESTARTING -> FINISHED
22% building 100/101 modules 1 active ...project/packages/web-app/src/styles.scss02 10 2019 09:13:03.801:DEBUG [launcher]: Restarting ChromeHeadless
02 10 2019 09:13:03.803:DEBUG [launcher]: FINISHED -> BEING_CAPTURED
02 10 2019 09:13:03.804:DEBUG [temp-dir]: Creating temp dir at /tmp/karma-5419534
02 10 2019 09:13:03.814:DEBUG [launcher]: google-chrome --user-data-dir=/tmp/karma-5419534 --no-default-browser-check --no-first-run --disable-default-apps --disable-popup-blocking --disable-translate --disable-background-timer-throttling --disable-renderer-backgrounding --disable-device-discovery-notifications http://localhost:9876/?id=5419534 --headless --disable-gpu --remote-debugging-port=9222
27% building 144/145 modules 1 active ...project/packages/web-app/src/styles.scss02 10 2019 09:13:05.142:DEBUG [launcher]: Process ChromeHeadless exited with code null and signal SIGILL
02 10 2019 09:13:05.147:ERROR [launcher]: Cannot start ChromeHeadless
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Permission denied
Failed to generate minidump.
02 10 2019 09:13:05.159:ERROR [launcher]: ChromeHeadless stdout:
02 10 2019 09:13:05.171:ERROR [launcher]: ChromeHeadless stderr: Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Permission denied
Failed to generate minidump.
02 10 2019 09:13:05.187:DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-5419534
34% building 205/206 modules 1 active ...project/packages/web-app/src/styles.scss02 10 2019 09:13:05.679:ERROR [launcher]: ChromeHeadless failed 2 times (cannot start). Giving up.
02 10 2019 09:13:05.680:DEBUG [launcher]: BEING_CAPTURED -> FINISHED
02 10 2019 09:13:13.587:DEBUG [karma-server]: List of files has changed, trying to execute
02 10 2019 09:13:13.588:WARN [karma]: No captured browser, open http://localhost:9876/
和ctrl+c
之后.
An unhandled exception occurred: Cannot destructure property `error` of 'undefined' or 'null'.
See "/tmp/ng-GhKvib/angular-errors.log" for further details.
文件/tmp/ng-GhKvib/angular-errors.log
包含An unhandled exception occurred: Cannot destructure property
错误of 'undefined' or 'null'.
。
业力配置
// karma.conf.ts
module.exports = (config) => {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false,
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/ng2angle'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_DEBUG,
autoWatch: true,
browsers: ['ChromeHeadless'],
browserDisconnectTimeout: 10000,
browserDisconnectTolerance: 3,
browserNoActivityTimeout: 60000,
flags: [
'--disable-web-security',
'--disable-gpu',
'--no-sandbox',
'--disable-features=NetworkService',
'--proxy-server="direct://"',
'--proxy-bypass-list=*',
'--disable-dev-shm-usage',
],
singleRun: false,
restartOnFileChange: true,
});
};
yarn test
运行的命令是ng test --karmaConfig=karma.conf.ts
。
版本
yarn=1.19.0
angular-cli=8.3.2
karma=4.1.0
karma-chrome-launcher=2.2.0
tsc=2.7.2
编辑
最终,我放弃了使用Linux来实现这一点,转而使用Mac。请关注我的issue in the karma-chrome-launcher
repo以了解将来可能的修复。
推荐答案
若要使此操作成功运行,请按照步骤操作
方法1:大多数问题都会得到解决,如果我们在WSL中下载Chrome版本(Debian)并安装
,就可以运行ChromeHeadless第一步:安装必要的软件包
sudo apt-get update
sudo apt-get install -y curl unzip xvfb libxi6 libgconf-2-4
第2步:安装铬
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb
如果问题仍然存在,请按照方法2
方法2:要在任何环境中运行基本Selenium UI测试,我们需要一个浏览器和一个驱动程序来控制浏览器。因此,我们必须使Windows的Chrome浏览器和chromedriver可以从WSL访问。第1步:在Windows上链接Chrome浏览器
sudo ln -sf '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe' /usr/bin/google-chrome
第2步:Windows上的链接chromedriver
sudo ln -s /mnt/c/Users/username/node_modules/chromedriver/lib/chromedriver/chromedriver.exe /usr/bin/chromedriver
第三步:更改CROME_BIN(环境变量的默认值)
export CHROME_BIN='/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'
如果问题仍然存在,请按照方法3
方法3:这将有助于在Ubuntu上运行puppetteer,所以让我们安装必要的软件包:
sudo apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
这篇关于无法使用WSL在角度项目中启动ChromeHeadless,适用于Mac的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!