我目前正在尝试为我将要为其进行 QA 工作的应用程序正确运行一些现有的量角器测试。但是,看起来我需要使用早期版本的chromedriver才能与我正在使用的Chrome版本(71.x(同步,但我不确定如何让量角器使用不同的版本,因为它总是下载v76。为什么我需要这样做?上下文如下。
从存储库中提取代码后,我根据之前开发人员留下的说明在"/e2e"目录中进行了"npm 安装",并使用"webdriver-manager update"通过 webdriver-manager 更新内容。运行Selenium时,我收到"无效或损坏的jar文件"错误,这显然是4.0.0-alpha-1和alpha-2版本的问题,因此我将Selenium降级到独立版本3.141.59。
这一直有效,直到我意识到在运行测试时,该应用程序无法将浏览器识别为 Chrome 并且测试失败(它需要 Chrome 才能运行(,即使它肯定正在运行 Chrome。因此,我不得不降级本地机器的Chrome版本以匹配我的更新提取的chromedriver版本 - 我相信它正在运行chromedriver v75,并且我在本地计算机上运行v76。
一位QA同事告诉我,我应该运行Chrome v71.x,因为这是我们用于发布管道的内容。因此,我卸载了Chrome并获得了Chrome v71.x,确保自动更新已禁用。这意味着我需要获得与此匹配的chromedriver版本,从我在线挖掘中似乎是v2.46。
现在,谈谈我的核心问题。每次我尝试通过网络驱动程序管理器更新内容时,它总是下载最新版本的 chromedriver (v76(,我不知道如何让量角器使用早期版本。我已经手动下载了chromedriver 2.46 - 我猜我需要以某种方式将其指向此版本,但是弄乱配置json文件并没有给我带来任何运气,我在网上也没有找到一个好的答案。
感谢任何帮助,因为我对这一切的工作原理仍然很陌生。
作为参考,这是我尝试运行规范时弹出的错误类型:
[08:25:41] E/launcher - SessionNotCreatedError: session not created: This
version of ChromeDriver only supports Chrome version 76
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-
14T08:25:53'
System info: host: 'xxxxxxxx', ip: 'xxxxxxxx', os.name: 'Windows
8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_40'
Driver info: driver.version: unknown
你的 npm 模块将有文件夹作为 webdriver-manager。在这里,所有二进制前chromedriver都将出现。
位置:
/node_modules/量角器/bin/webdriver-manager
现在执行以下步骤
-
进行网络驱动程序管理器更新
-
现在转到该文件夹并根据您的操作系统删除chromedriver二进制文件,即chromedriver.exe(Windows(并替换为 它将降级您将从此处下载的相同版本,确保exe的名称应与之前相同 点击 这里
立即运行测试
或
要下载特定版本的(例如(chromedriver,请执行以下操作:
webdriver-manager update --versions.chrome 2.46
webdriver-manager start --versions.chrome 2.46
这通常是问题,我通过检查我的本地 chrome 的版本来解决这个问题,然后我只是在 package.json 中更新到该版本,然后执行 npm i。 更新网络驱动程序管理器并不能为我解决问题,它会下载正确的 chrome 二进制文件但不使用它。所以"npm i"为我解决了这个问题。
所以我需要以编程方式执行此操作,作为我们构建过程的一部分。我们使用 Jenkins 进行 CI 流程。
这就是我们的 Jenkinsfile 的相关部分的样子。匹配的驱动程序版本在使用 Web 驱动程序管理器更新进行 npm 安装后安装。grep 语句捕获浏览器版本的前三个字段。需要这样做才能附加到 chromedriver 网址以返回匹配驱动程序的四个字段版本。
...
stages {
stage('Install') {
steps {
sh 'google-chrome --version'
sh 'npm --version'
sh 'node --version'
sh 'yes | npm i'
script {
env.chromeVersion = sh (
script: "google-chrome --version | grep -Po 'Chrome \K[^\.](\d+\.){2}\d+'",
returnStdout: true
).trim()
}
echo "chromeVersion: ${env.chromeVersion}"
script {
env.chromeDriverVersion = sh (
script: "curl https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${env.chromeVersion}",
returnStdout: true
).trim()
}
echo "chromeDriverVersion: ${env.chromeDriverVersion}"
sh ("./node_modules/webdriver-manager/bin/webdriver-manager update --versions.chrome ${env.chromeDriverVersion}")
}
}
...
另一个关键部分是更新测试运行以指示量角器在安装驱动程序后不更新驱动程序。这是我们包的相关部分.json
{
"name": "ourProduct",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"e2e": "ng e2e --webdriverUpdate=false"
},
然后稍后在我们的 Jenkinsfile 中,我们将运行测试。
...
stage('Run Tests') {
steps {
sh 'npm run e2e'
}
}
...