WebDriver Manager Update Issue In Protractor | Devstringx

Back to Blog
Feature image for webdriver update blog

WebDriver Manager Update Issue In Protractor | Devstringx

Problem Statement-

In Protractor, For updating the driver’s latest version, we use the web driver-manager update command. But now as we know Protractor is going to EOL Soon and along with Protractor, WebDriver-Manager is also going to EOL So Now if you try to update the webdriver-Manager it will only update it to Chrome version 114 but the latest version of Chrome is 120.0.6099.217. So You will not be able to run your protractor tests as webdriver-Manager is not updated, and you will get an error in the console.

To resolve the above-mentioned issue you can follow the steps-

Step 1

Open the Chrome.xml file and replace the getLatestChromeDriverVersion() function.

You can find the chrome_xml.js file in this path-

APPDATA%\npm\node_modules\protractor\node_modules\webdriver-manager\built\lib\binaries\chrome_xml.js
getLatestChromeDriverVersion() {
        const path = require('path')
        const fs = require('fs')

        const lastKnownGoodVersionsWithDownloads_Url = 'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json';
        return http_utils_1.requestBody(lastKnownGoodVersionsWithDownloads_Url).then(body => {
            const latestVersion_Body = JSON.parse(body)['channels']['Stable']

            const latestVersion = latestVersion_Body['version']
            const latestVersion_Url = latestVersion_Body['downloads']['chromedriver'].find(obj => obj['platform'] == 'win32')['url']

            const latestMajorVersion = latestVersion.split('.')[0]

            const localVersion_FileName = fs.readdirSync(path.resolve(__dirname, '..', '..', '..', 'selenium'))
                .find(f => f.startsWith(`chromedriver_${latestMajorVersion}`)) || ''
                
            const localVersion = localVersion_FileName.slice(13, -4)
            const localVersion_Url = latestVersion_Url.replace(latestVersion, localVersion)

            const localMajorVersion = localVersion.split('.')[0]

            if (latestMajorVersion == localMajorVersion) {
                return Promise.resolve({
                    url: localVersion_Url,
                    version: localVersion,
                })
            } else {
                return Promise.resolve({
                    url: latestVersion_Url,
                    version: latestVersion,
                })
            }
        });
    }

The above-mentioned method will fetch the latest version of Chrome from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json  response body and will update the driver accordingly.

Step 2

Go to

%APPDATA%\npm\node_modules\protractor\node_modules\webdriver-manager\built\lib\cmds\update.js

 Replace line 240

[fs.renameSync(path.resolve(outputDir, binary.zipContentName()), mv);]

with the below code-

if (fileName.indexOf('chromedriver_') != -1) {
        fs.renameSync(path.resolve(outputDir, 'chromedriver-win32', binary.zipContentName()), mv)
    } else {
        fs.renameSync(path.resolve(outputDir, binary.zipContentName()), mv);
    }

Step 3

Update Webdriver Manager using the below command-

webdriver-manager update

Now It will update Chrome Driver as per the latest version available.

 

Related Post:-

Share this post

Back to Blog