【问题标题】:Need to downgrade chromedriver for Protractor to match earlier Chrome version需要为 Protractor 降级 chromedriver 以匹配早期的 Chrome 版本
【发布时间】:2023-03-09 02:15:01
【问题描述】:

我目前正在尝试让一些现有的 Protractor 测试为我将为其进行 QA 工作的应用程序正常运行。但是,看起来我需要使用早期版本的 chromedriver 与我正在使用的 Chrome 版本(71.x)同步,但我不确定如何让 Protractor 使用不同的版本,因为它总是下载 v76 .为什么我需要这样做?上下文如下。

从存储库中提取代码后,我根据之前开发人员留下的说明在“/e2e”目录中进行了“npm install”,并使用“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。

现在,我的核心问题。每次我尝试通过 webdriver-manager 更新内容时,它总是下载最新版本的 chromedriver (v76),我不知道如何让 Protractor 使用早期版本。我已经手动下载了 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

【问题讨论】:

    标签: selenium selenium-webdriver protractor selenium-chromedriver


    【解决方案1】:

    您的 npm 模块将具有 webdriver-manager 文件夹。这里将显示所有二进制 ex chromedriver。

    地点:

    /node_modules/protractor/bin/webdriver-manager

    现在执行以下步骤

    • 执行 webdriver-manager 更新

    • 现在转到该文件夹​​并根据您的操作系统删除 chromedriver 二进制文件,即 chromedriver.exe(Windows) 并替换为 它会降级您将从此处下载的相同版本,确保 exe 的名称应与之前相同 Click Here

    立即运行测试

    要下载特定版本的(例如)chromedriver:

    webdriver-manager update --versions.chrome 2.46
    
    webdriver-manager start --versions.chrome 2.46
    

    【讨论】:

    • 所以这个答案似乎是为问题提供手动解决方案,而不是如何在量角器 conf 或其他地方指定特定版本的驱动程序。如何在构建过程中运行 webdriver-manager 更新命令?
    • 如果您有管道或执行外壳,您可以在运行构建之前专门使用它们。它会在构建实际项目之前作为先决条件每次运行
    【解决方案2】:

    这是很常见的问题,我通过检查本地 chrome 的版本来解决这个问题,然后我只需在 package.json 中更新到该版本,然后执行 npm i。更新 webdriver-manager 并不能解决我的问题,它会下载正确的 chrome 二进制文件但不使用它。所以“npm i”为我解决了这个问题。

    【讨论】:

      【解决方案3】:

      所以我需要在构建过程中以编程方式执行此操作。我们将 Jenkins 用于我们的 CI 流程。

      这就是我们的 Jenkinsfile 的相关部分的样子。在 npm install 之后使用 webdriver-manager 更新安装匹配的驱动程序版本。 grep 语句正在捕获浏览器版本的前三个字段。这需要附加到 chromedriver url 以返回匹配驱动程序的四字段版本。

      ...
        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}")
            }
          }
      ...
      

      另一个关键部分是更新测试运行以指示 Protractor 在安装驱动程序后不更新驱动程序。这是我们 package.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'
            }
          }
      ...
      

      【讨论】:

        猜你喜欢
        • 2018-03-18
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 2021-11-15
        • 2021-07-08
        相关资源
        最近更新 更多