安全限制下,如何指定Protractor使用手动下载的ChromeDriver?
我来帮你搞定这个问题——之前我也碰到过类似的情况,手动放了ChromeDriver但Protractor还是自顾自下载新版本,折腾了好一会儿才捋清楚门道。下面是具体的解决步骤:
核心思路是在Protractor配置文件里明确指定ChromeDriver的路径,同时确保Angular CLI的e2e命令不会绕过你的配置。
1. 修改Protractor配置文件
你的项目里应该有个protractor.conf.js文件(通常在e2e目录下),打开它做针对性修改:
方案A:直接连接ChromeDriver(推荐,更轻量化)
如果不需要启动完整的Selenium Server,开启directConnect并指定ChromeDriver路径即可,这样Protractor会直接调用你本地的驱动,完全跳过自动更新流程:
exports.config = { // 保留你原有的其他配置(比如specs、baseUrl等) directConnect: true, // 注意:路径要匹配你实际存放的位置,Windows系统要加.exe后缀,Mac/Linux不用 chromeDriver: '../node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver.exe', };
方案B:搭配Selenium Server使用(适合需要兼容多浏览器的场景)
如果你必须启动Selenium Server,需要同时指定Selenium Server的jar包和ChromeDriver路径:
exports.config = { // 保留原有配置 seleniumServerJar: '../node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-xxx.jar', // 替换成你本地的jar包版本号 chromeDriver: '../node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver.exe', // 禁用自动启动和更新相关的默认行为 seleniumPort: null, seleniumArgs: [], };
2. 确保Angular CLI遵守你的配置
打开项目根目录的angular.json,找到projects -> 你的项目名 -> architect -> e2e节点,检查并设置webdriverUpdate为false,避免CLI强制触发更新:
"e2e": { "builder": "@angular-devkit/build-angular:protractor", "options": { "protractorConfig": "e2e/protractor.conf.js", "webdriverUpdate": false, // 这一步很关键,一定要设为false "devServerTarget": "你的项目名:serve" } }
3. 验证配置生效
运行命令时加上--no-webdriver-update参数,确保CLI彻底跳过更新流程:
ng e2e --no-webdriver-update
这时候Protractor就会乖乖使用你手动放置的ChromeDriver v2.27,不会再去chromedriver.storage.googleapis.com下载新版本了。
注意:路径一定要写对!如果你的ChromeDriver不在示例中的位置,要改成你实际存放的相对/绝对路径,相对路径是基于protractor.conf.js所在位置计算的。
内容的提问来源于stack exchange,提问作者HalVB

