我正在使用角度CLI。我用以下方法创建了它:
ng new MyFirstApp
然后,我尝试使用以下命令运行端到端测试:
ng e2e
我收到以下错误消息:
E/launcher - session not created: This version of ChromeDriver only supports Chrome version 79
Driver info: chromedriver=79.0.3945.16
at Object.checkLegacyResponse (C:TestProjAngularMyFirstAppnode_modulesselenium-webdriverliberror.js:546:15)
at parseHttpResponse (C:TestProjAngularMyFirstAppnode_modulesselenium-webdriverlibhttp.js:509:13)
at C:TestProjAngularMyFirstAppnode_modulesselenium-webdriverlibhttp.js:441:30
at processTicksAndRejections (internal/process/task_queues.js:93:5)
From: Task: WebDriver.createSession()
at Function.createSession (C:TestProjAngularMyFirstAppnode_modulesselenium-webdriverlibwebdriver.js:769:24)
at Function.createSession (C:TestProjAngularMyFirstAppnode_modulesselenium-webdriverchrome.js:761:15)
at Direct.getNewDriver (C:TestProjAngularMyFirstAppnode_modulesprotractorbuiltdriverProvidersdirect.js:77:33)
at Runner.createBrowser (C:TestProjAngularMyFirstAppnode_modulesprotractorbuiltrunner.js:195:43)
at C:TestProjAngularMyFirstAppnode_modulesprotractorbuiltrunner.js:339:29
at _fulfilled (C:TestProjAngularMyFirstAppnode_modulesqq.js:834:54)
at C:TestProjAngularMyFirstAppnode_modulesqq.js:863:30
at Promise.promise.promiseDispatch (C:TestProjAngularMyFirstAppnode_modulesqq.js:796:13)
at C:TestProjAngularMyFirstAppnode_modulesqq.js:556:49
at runSingle (C:TestProjAngularMyFirstAppnode_modulesqq.js:137:13)
问题似乎是我在一台限制 chrome 版本的计算机上,并且处于 chrome 78,而 angular 使用的是 chrome 79。我需要一些方法来告诉 angular 使用 chrome 78 的驱动程序。我尝试使用网络驱动程序管理器设置版本来执行此操作,但这不起作用。无论如何,这个模块甚至不在我的 packages.json 中。
看看我尝试过什么:
npm install webdriver-manager -g
webdriver-manager update --version.chrome=78.0.3904.108
ng e2e --webdriver-update=false
如何消除此错误?感谢您提供的任何帮助。
这是我的版本控制信息:
- 操作系统: 视窗 10
- 节点:12.13.1
- NPM:6.13.2
- 角度:8.2.14
- 角度 CLI:8.3.21
这是我的软件包.json:
{
"name": "my-first-app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "~8.2.14",
"@angular/common": "~8.2.14",
"@angular/compiler": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/forms": "~8.2.14",
"@angular/platform-browser": "~8.2.14",
"@angular/platform-browser-dynamic": "~8.2.14",
"@angular/router": "~8.2.14",
"rxjs": "~6.4.0",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.21",
"@angular/cli": "~8.3.21",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.5.3"
}
}
我最近遇到了这个问题。我最终使用了特定版本的Puppeteer,因为它的每个版本都对应于Chromium的特定主要版本。
以下是您的操作:
- 在Puppeteer的API文档中,找到与您要使用的Chromium版本兼容的版本。在您的情况下,我们正在寻找使用 Chrome 78 的版本,因此我们看到我们需要 Puppeteer v1.20.x。
- 将该版本的木偶作为
package.json
中的devDependency
安装,例如执行npm install --save-dev puppeteer@1.20.x
。这将安装Puppeteer v1.20和Chromium 78。 - 在项目的
protractor.conf.js
文件中,首先将此导入添加到顶部:
然后找到这些行const puppeteer = require('puppeteer');
并将它们替换为capabilities: { 'browserName': 'chrome' },
capabilities: { browserName: 'chrome', chromeOptions: { args: ['--headless', '--disable-gpu', '--window-size=1024,768'], binary: puppeteer.executablePath(), }, },
您的量角器端到端测试现在使用您想要的 Chromium 版本运行,并且仅在您将 Puppeteer 升级到较新版本时才会使用较新的 Chromium 版本。
或者,您可以在protractor.conf.js
中添加config.chromeDriver
并设置为特定 Chrome 版本的可执行路径。
我能够使用它:
node ./node_modules/protractor/bin/webdriver-manager update --gecko=false --versions.chrome '78.0.3904.108'
ng e2e --webdriver-update=false
但是,我把上面的第一个命令放在哪里,这样我就不需要手动执行?
对于第一个命令,您可以在package.json文件中添加脚本命令。
"script": {
"firstCommand": "node ./node_modules/protractor/bin/webdriver-manager update --gecko=false --versions.chrome '78.0.3904.108'"
"start-e2e": "firstCommand && ng e2e ---webdriver-update=false"
}
在终端运行时npm run start-e2e
它将首先执行firstCommand
,然后执行ng e2e ---webdriver-update=false
您可能需要根据 package.json 文件中的脚本配置更改ng e2e
。