diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 1e897c7b8c..ce4bff0442 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -451,8 +451,6 @@ jobs: enable-cache: "true" enable-node-modules-cache: "true" - uses: ./.github/actions/download-node-modules-and-artifacts - - name: setup chrome - uses: ./.github/actions/setup-chrome - name: e2e uses: ./.github/actions/e2e with: diff --git a/e2e/content-services/directives/sso-download-directive-component.e2e.ts b/e2e/content-services/directives/sso-download-directive-component.e2e.ts index 8feea52767..3fcc899272 100644 --- a/e2e/content-services/directives/sso-download-directive-component.e2e.ts +++ b/e2e/content-services/directives/sso-download-directive-component.e2e.ts @@ -81,6 +81,8 @@ describe('SSO in ADF using ACS and AIS, Download Directive, Viewer, DocumentList browser.params.testConfig.appConfig.oauth2.clientId ); + await browser.refresh(); + await loginSsoPage.loginSSOIdentityService(acsUser.username, acsUser.password); await navigationBarPage.navigateToContentServices(); diff --git a/e2e/core/login/login-sso/login-sso.e2e.ts b/e2e/core/login/login-sso/login-sso.e2e.ts index f659e04110..a0b7fad1ab 100644 --- a/e2e/core/login/login-sso/login-sso.e2e.ts +++ b/e2e/core/login/login-sso/login-sso.e2e.ts @@ -21,7 +21,6 @@ import { NavigationBarPage } from '../../../core/pages/navigation-bar.page'; import { LoginShellPage } from '../../../core/pages/login-shell.page'; describe('Login component - SSO', () => { - const settingsPage = new SettingsPage(); const loginSSOPage = new LoginPage(); const loginPage = new LoginShellPage(); @@ -36,15 +35,22 @@ describe('Login component - SSO', () => { }); it('[C261050] Should be possible login with SSO', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + await settingsPage.setProviderEcmSso( + browser.params.testConfig.appConfig.ecmHost, browser.params.testConfig.appConfig.oauth2.host, browser.params.testConfig.appConfig.identityHost, false, true, browser.params.testConfig.appConfig.oauth2.clientId, - browser.params.testConfig.appConfig.oauth2.redirectUriLogout); + browser.params.testConfig.appConfig.oauth2.redirectUriLogout + ); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password); + await browser.refresh(); + + await loginSSOPage.loginSSOIdentityService( + browser.params.testConfig.users.admin.username, + browser.params.testConfig.users.admin.password + ); }); it('[C280667] Should be redirect directly to keycloak without show the login page with silent login', async () => { @@ -55,22 +61,31 @@ describe('Login component - SSO', () => { true, true, browser.params.testConfig.appConfig.oauth2.clientId, - browser.params.testConfig.appConfig.oauth2.redirectUriLogout); + browser.params.testConfig.appConfig.oauth2.redirectUriLogout + ); - await loginSSOPage.loginSSOIdentityService(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password); + await browser.refresh(); + + await loginSSOPage.loginSSOIdentityService( + browser.params.testConfig.users.admin.username, + browser.params.testConfig.users.admin.password + ); }); }); describe('Login component - SSO Grant type password (implicit flow false)', () => { it('[C299158] Should be possible to login with SSO, with grant type password (Implicit Flow false)', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.appConfig.ecmHost, + await settingsPage.setProviderEcmSsoWithoutCodeFlow( + browser.params.testConfig.appConfig.ecmHost, browser.params.testConfig.appConfig.oauth2.host, browser.params.testConfig.appConfig.identityHost, false, false, browser.params.testConfig.appConfig.oauth2.clientId, - browser.params.testConfig.appConfig.oauth2.redirectUriLogout); + browser.params.testConfig.appConfig.oauth2.redirectUriLogout + ); + await browser.refresh(); await loginPage.waitForElements(); await loginPage.enterUsername(browser.params.testConfig.users.admin.username); diff --git a/lib/testing/src/lib/protractor/core/pages/settings.page.ts b/lib/testing/src/lib/protractor/core/pages/settings.page.ts index 479a11acef..8a0a83e934 100644 --- a/lib/testing/src/lib/protractor/core/pages/settings.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/settings.page.ts @@ -33,6 +33,7 @@ export class SettingsPage { silentLoginToggleElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="silentLogin"]`); implicitFlowLabel = $(`${materialLocators.Slide.toggle.root}[formcontrolname="implicitFlow"] label`); implicitFlowElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="implicitFlow"]`); + codeFlowElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="codeFlow"]`); applyButton = $('button[data-automation-id="settings-apply-button"]'); providerDropdown = new DropdownPage($(`${materialLocators.Select.root}[id="adf-provider-selector"]`)); @@ -41,8 +42,7 @@ export class SettingsPage { try { currentUrl = await browser.getCurrentUrl(); - } catch (e) { - } + } catch (e) {} if (!currentUrl || currentUrl.indexOf(this.settingsURL) === -1) { await browser.get(this.settingsURL); @@ -59,7 +59,15 @@ export class SettingsPage { await BrowserActions.click(this.ssoRadioButton); } - async setProviderEcmSso(contentServiceURL, authHost, identityHost, silentLogin = true, implicitFlow = true, clientId?: string, logoutUrl: string = '/logout') { + async setProviderEcmSso( + contentServiceURL, + authHost, + identityHost, + silentLogin = true, + implicitFlow = true, + clientId?: string, + logoutUrl: string = '/logout' + ) { await this.goToSettingsPage(); await this.setProvider('ECM'); await this.clickSsoRadioButton(); @@ -74,6 +82,30 @@ export class SettingsPage { await browser.sleep(1000); } + async setProviderEcmSsoWithoutCodeFlow( + contentServiceURL, + authHost, + identityHost, + silentLogin = true, + implicitFlow = true, + clientId?: string, + logoutUrl: string = '/logout' + ) { + await this.goToSettingsPage(); + await this.setProvider('ECM'); + await this.clickSsoRadioButton(); + await this.setContentServicesURL(contentServiceURL); + await this.setAuthHost(authHost); + await this.setIdentityHost(identityHost); + await this.setSilentLogin(silentLogin); + await this.setCodeFlow(false); + await this.setImplicitFlow(implicitFlow); + await this.setClientId(clientId); + await this.setLogoutUrl(logoutUrl); + await this.clickApply(); + await browser.sleep(1000); + } + async setLogoutUrl(logoutUrl) { await BrowserVisibility.waitUntilElementIsPresent(this.logoutUrlText); await BrowserActions.clearSendKeys(this.logoutUrlText, logoutUrl); @@ -104,7 +136,7 @@ export class SettingsPage { const isChecked = (await BrowserActions.getAttribute(this.silentLoginToggleElement, 'class')).includes(materialLocators.Checked.root); - if (isChecked && !enableToggle || !isChecked && enableToggle) { + if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) { await BrowserActions.click(this.silentLoginToggleLabel); } } @@ -114,8 +146,18 @@ export class SettingsPage { const isChecked = (await BrowserActions.getAttribute(this.implicitFlowElement, 'class')).includes(materialLocators.Checked.root); - if (isChecked && !enableToggle || !isChecked && enableToggle) { + if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) { await BrowserActions.click(this.implicitFlowLabel); } } + + async setCodeFlow(enableToggle) { + await BrowserVisibility.waitUntilElementIsVisible(this.codeFlowElement); + + const isChecked = (await BrowserActions.getAttribute(this.codeFlowElement, 'class')).includes(materialLocators.Checked.root); + + if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) { + await BrowserActions.click(this.codeFlowElement); + } + } } diff --git a/package-lock.json b/package-lock.json index b7e5d0cc8f..c1487c2eb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "alfresco-ng2-components", "version": "6.9.0", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@angular/animations": "14.1.3", @@ -84,7 +85,7 @@ "@types/mocha": "^10.0.4", "@types/node": "18.0.0", "@types/pdfjs-dist": "^2.10.378", - "@types/selenium-webdriver": "^4.0.11", + "@types/selenium-webdriver": "^4.1.17", "@types/shelljs": "^0.8.15", "@types/superagent": "^4.1.22", "@typescript-eslint/eslint-plugin": "5.59.8", @@ -142,7 +143,7 @@ "protractor-smartrunner": "^2.0.0-beta6", "rimraf": "^5.0.5", "sass-loader": "13.3.2", - "selenium-webdriver": "4.1.0", + "selenium-webdriver": "^4.14.0", "shelljs": "^0.8.5", "shx": "^0.3.4", "spdx-license-list": "^6.9.0", @@ -23619,9 +23620,10 @@ "license": "MIT" }, "node_modules/@types/selenium-webdriver": { - "version": "4.1.14", + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.17.tgz", + "integrity": "sha512-vtoMYktN2XcSlXwSmZq6H+25CiQMPCuGP7RUulfSmRmyI6wCerZPmNyMMrvcCcyDE/ofeWD1COLfux5plsVizw==", "dev": true, - "license": "MIT", "dependencies": { "@types/ws": "*" } @@ -48498,16 +48500,17 @@ "license": "MIT" }, "node_modules/selenium-webdriver": { - "version": "4.1.0", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.14.0.tgz", + "integrity": "sha512-637rs8anqMKHbWxcBZpyG3Gcs+rBUtAUiqk0O/knUqH4Paj3MFUZrz88/pVGOLNryEVy2z92fZomT8p1ENl1gA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "jszip": "^3.6.0", + "jszip": "^3.10.1", "tmp": "^0.2.1", - "ws": ">=7.4.6" + "ws": ">=8.14.2" }, "engines": { - "node": ">= 10.15.0" + "node": ">= 14.20.0" } }, "node_modules/selfsigned": { diff --git a/package.json b/package.json index e6b4aa0c61..15efd3b537 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,10 @@ "js_api_build_esm5": "shx rm -rf ./dist/libs/js-api/esm5 && tsc -p ./lib/js-api/tsconfig/tsconfig.esm5.json", "js_api_build_esm2015": "shx rm -rf ./dist/libs/js-api/esm2015 && tsc -p ./lib/js-api/tsconfig/tsconfig.esm2015.json", "js_api_build_types": "shx rm -rf ./dist/libs/js-api/typings && tsc -p ./lib/js-api/tsconfig/tsconfig.types.json", - "js_api_assets": "shx cp ./lib/js-api/package.json ./dist/libs/js-api/ && shx cp ./lib/js-api/README.md ./dist/libs/js-api/ && shx cp ./lib/js-api/LICENSE.txt ./dist/libs/js-api/" + "js_api_assets": "shx cp ./lib/js-api/package.json ./dist/libs/js-api/ && shx cp ./lib/js-api/README.md ./dist/libs/js-api/ && shx cp ./lib/js-api/LICENSE.txt ./dist/libs/js-api/", + "postinstall": "npm run update-webdriver", + "update-webdriver": "./scripts/webdriver-update-newest/update-to-newest-webdriver.sh", + "update-webdriver:windows": "powershell -executionPolicy bypass ./scripts/update-webdriver.ps1" }, "repository": { "type": "git", @@ -129,7 +132,7 @@ "@types/mocha": "^10.0.4", "@types/node": "18.0.0", "@types/pdfjs-dist": "^2.10.378", - "@types/selenium-webdriver": "^4.0.11", + "@types/selenium-webdriver": "^4.1.17", "@types/shelljs": "^0.8.15", "@types/superagent": "^4.1.22", "@typescript-eslint/eslint-plugin": "5.59.8", @@ -187,7 +190,7 @@ "protractor-smartrunner": "^2.0.0-beta6", "rimraf": "^5.0.5", "sass-loader": "13.3.2", - "selenium-webdriver": "4.1.0", + "selenium-webdriver": "^4.14.0", "shelljs": "^0.8.5", "shx": "^0.3.4", "spdx-license-list": "^6.9.0", diff --git a/scripts/test-e2e-lib.sh b/scripts/test-e2e-lib.sh index 1dd2ca64bb..4fbdcdaf9d 100755 --- a/scripts/test-e2e-lib.sh +++ b/scripts/test-e2e-lib.sh @@ -141,15 +141,6 @@ done rm -rf ./e2e/downloads/ rm -rf ./e2e-output/ echo "====== BROWSER_RUN: $BROWSER_RUN ======" -echo "====== Update webdriver-manager =====" -if [ "$CI" = "true" ]; then - export chrome=$(google-chrome --product-version) - echo "Updating wedriver-manager with chromedriver: $chrome." - ./node_modules/protractor/bin/webdriver-manager update --gecko=false --versions.chrome=$chrome -else - echo "Updating wedriver-manager with latest chromedriver, be sure to use evergreen Chrome." - ./node_modules/protractor/bin/webdriver-manager update --gecko=false -fi export DEBUG_OPTION='' if [[ $DEBUG == "true" ]]; then diff --git a/scripts/update-webdriver.ps1 b/scripts/update-webdriver.ps1 new file mode 100644 index 0000000000..a1ce040044 --- /dev/null +++ b/scripts/update-webdriver.ps1 @@ -0,0 +1,18 @@ +$dir = Split-Path -Parent $MyInvocation.MyCommand.Path + +if ($env:CI -eq "true") { + Write-Host "Updating webdriver-manager with chromedriver: $env:npm_package_config_chromeDriver." + ./node_modules/protractor/bin/webdriver-manager update --gecko=false --versions.chrome=$(google-chrome --product-version) +} else { + Write-Host "Updating webdriver-manager with latest chromedriver, be sure to use evergreen Chrome." + npx webdriver-manager update --gecko=false + if ($LASTEXITCODE -ne 0) { + Write-Host "`n===============================================================" + Write-Host "FAILED TO UPDATE WEBDRIVER-MANAGER, PLEASE DO IT MANUALLY!" + Write-Host "Run the following command (sometimes needs more than one kick):" + Write-Host "" + Write-Host "npx webdriver-manager update --gecko=false" + Write-Host "" + Write-Host "===============================================================" + } +} diff --git a/scripts/webdriver-update-newest/chrome_xml_schema.js b/scripts/webdriver-update-newest/chrome_xml_schema.js index 266eda614b..5f33d056b3 100644 --- a/scripts/webdriver-update-newest/chrome_xml_schema.js +++ b/scripts/webdriver-update-newest/chrome_xml_schema.js @@ -1,9 +1,9 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const semver = require("semver"); -const config_1 = require("../config"); -const http_utils_1 = require("../http_utils"); -const config_source_1 = require("./config_source"); +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +const semver = require('semver'); +const config_1 = require('../config'); +const http_utils_1 = require('../http_utils'); +const config_source_1 = require('./config_source'); class ChromeXml extends config_source_1.XmlConfigSource { constructor() { super('chrome', config_1.Config.cdnUrls()['chrome']); @@ -12,8 +12,7 @@ class ChromeXml extends config_source_1.XmlConfigSource { getUrl(version) { if (version === 'latest') { return this.getLatestChromeDriverVersion(); - } - else { + } else { return this.getSpecificChromeDriverVersion(version); } } @@ -21,16 +20,17 @@ class ChromeXml extends config_source_1.XmlConfigSource { * Get a list of chrome drivers paths available for the configuration OS type and architecture. */ getVersionList() { - return this.getXml().then(xml => { + return this.getXml().then((xml) => { let versionPaths = []; let osType = this.getOsTypeName(); for (let content of xml.ListBucketResult.Contents) { let contentKey = content.Key[0]; if ( - // Filter for 32-bit devices, make sure x64 is not an option - (this.osarch.includes('64') || !contentKey.includes('64')) && + // Filter for 32-bit devices, make sure x64 is not an option + (this.osarch.includes('64') || !contentKey.includes('64')) && // Filter for x86 macs, make sure m1 is not an option - ((this.ostype === 'Darwin' && this.osarch === 'arm64') || !contentKey.includes('m1'))) { + ((this.ostype === 'Darwin' && this.osarch === 'arm64') || !contentKey.includes('m1')) + ) { // Filter for only the osType if (contentKey.includes(osType)) { versionPaths.push(contentKey); @@ -46,97 +46,96 @@ class ChromeXml extends config_source_1.XmlConfigSource { getOsTypeName() { // Get the os type name. if (this.ostype === 'Darwin') { - return 'mac'; - } - else if (this.ostype === 'Windows_NT') { - return 'win'; - } - else { - return 'linux'; + return 'mac-x64'; + } else if (this.ostype === 'Windows_NT') { + return 'win64'; + } else { + return 'linux64'; } } /** * Gets the latest item from the XML. */ getLatestChromeDriverVersion() { - const path = require('path') - const fs = require('fs') + 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 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'] == 'mac-x64')['url'] + const latestVersion = latestVersion_Body['version']; + const latestVersion_Url = latestVersion_Body['downloads']['chromedriver'].find((obj) => obj['platform'] == 'mac-x64')['url']; - const latestMajorVersion = latestVersion.split('.')[0] + const latestMajorVersion = latestVersion.split('.')[0]; - const localVersion_FileName = fs.readdirSync(path.resolve(__dirname, '..', '..', '..', 'selenium')) - .find(f => f.startsWith(`chromedriver_${latestMajorVersion}`)) || '' + 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 localVersion = localVersion_FileName.slice(13, -4); + const localVersion_Url = latestVersion_Url.replace(latestVersion, localVersion); - const localMajorVersion = localVersion.split('.')[0] + const localMajorVersion = localVersion.split('.')[0]; if (latestMajorVersion == localMajorVersion) { return Promise.resolve({ url: localVersion_Url, - version: localVersion, - }) + version: localVersion + }); } else { return Promise.resolve({ url: latestVersion_Url, - version: latestVersion, - }) + version: latestVersion + }); } }); } /** * Gets a specific item from the XML. */ - getSpecificChromeDriverVersion(inputVersion) { - return this.getVersionList().then(list => { - const specificVersion = getValidSemver(inputVersion); - if (specificVersion === '') { - throw new Error(`version ${inputVersion} ChromeDriver does not exist`); - } - let itemFound = ''; - for (let item of list) { - // Get a semantic version. - let version = item.split('/')[0]; - if (semver.valid(version) == null) { - const lookUpVersion = getValidSemver(version); - if (semver.valid(lookUpVersion)) { - // Check to see if the specified version matches. - if (lookUpVersion === specificVersion) { - // When item found is null, check the os arch - // 64-bit version works OR not 64-bit version and the path does not have '64' - if (itemFound == '') { - if (this.osarch === 'x64' || - (this.osarch !== 'x64' && !item.includes(this.getOsTypeName() + '64'))) { - itemFound = item; - } - if (this.osarch === 'arm64' && this.ostype === 'Darwin' && item.includes('m1')) { - itemFound = item; - } - } - else if (this.osarch === 'x64') { - // No win64 version exists, so even on x64 we need to look for win32 - const osTypeNameAndArch = this.getOsTypeName() + (this.getOsTypeName() === 'win' ? '32' : '64'); - if (item.includes(osTypeNameAndArch)) { - itemFound = item; - } - } - } - } - } - } - if (itemFound == '') { - return { url: '', version: inputVersion }; - } - else { - return { url: config_1.Config.cdnUrls().chrome + itemFound, version: inputVersion }; + getSpecificChromeDriverVersion(versionRequired) { + const path = require('path'); + const fs = require('fs'); + + let baseTagVersion = versionRequired.split('.'); + baseTagVersion.splice(-1); + baseTagVersion = baseTagVersion.join('.'); + + const lastKnownGoodVersionsWithDownloads_Url = + 'https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build-with-downloads.json'; + return http_utils_1.requestBody(lastKnownGoodVersionsWithDownloads_Url).then((body) => { + const version_Body = JSON.parse(body)['builds'][baseTagVersion]; + + const opSys = this.getOsTypeName(); + + const currentVersion = version_Body['version']; + const currentVersion_Url = version_Body['downloads']['chromedriver'].find((obj) => obj['platform'] == opSys)['url']; + + const latestMajorVersion = currentVersion.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 = currentVersion_Url.replace(currentVersion, localVersion); + + const localMajorVersion = localVersion.split('.')[0]; + + if (latestMajorVersion == localMajorVersion) { + return Promise.resolve({ + url: localVersion_Url, + version: localVersion + }); + } else { + return Promise.resolve({ + url: currentVersion_Url, + version: currentVersion + }); } }); } @@ -163,8 +162,7 @@ function getValidSemver(version) { if (exec) { lookUpVersion = exec[1] + '.0'; } - } - catch (_) { + } catch (_) { // no-op: is this is not valid, do not throw here. } // This supports downloading 74.0.3729.6 @@ -174,8 +172,7 @@ function getValidSemver(version) { if (exec) { lookUpVersion = exec[1]; } - } - catch (_) { + } catch (_) { // no-op: if this does not work, use the other regex pattern. } return lookUpVersion; diff --git a/scripts/webdriver-update-newest/update-to-newest-webdriver.sh b/scripts/webdriver-update-newest/update-to-newest-webdriver.sh index 46990be957..3c398148b7 100755 --- a/scripts/webdriver-update-newest/update-to-newest-webdriver.sh +++ b/scripts/webdriver-update-newest/update-to-newest-webdriver.sh @@ -1,12 +1,50 @@ -#!/bin/bash -#set -x -BROWSER_TYPE=mac-x64 +#!/usr/bin/env bash +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -if [ ! -z "$1" ]; then BROWSER_TYPE=$1 ; fi +echo "Getting currently installed Chrome Version" -PATH_TO_COMMANDS=../../node_modules/webdriver-manager/built/lib/cmds -PATH_TO_BINARIES=../../node_modules/webdriver-manager/built/lib/binaries -PATH_TO_SELENIUM=../../node_modules/webdriver-manager/selenium +if [ "$CI" = "true" ]; then + chromeVersion=$(google-chrome --version ) +else + chromeVersion=$(/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version ) +fi + +chromeVersion=${chromeVersion:14:20} + +echo "Intalling webdriver for version: $chromeVersion" + +function show_error() { + echo -e "\e[31m===============================================================\e[0m" + echo -e "\e[31mFAILED TO UPDATE WEBDRIVER-MANAGER, PLEASE DO IT MANUALLY!\e[0m" + echo -e "\e[31mRun the following command (sometimes needs more than one kick):\e[0m" + echo -e "" + echo -e "\e[31mnpx webdriver-manager update --gecko=false\e[0m" + echo -e "" + echo -e "====== WINDOWS USERS : PLEASE RUN THIS COMMAND: " + echo -e "npm run update-webdriver:windows" + echo -e "====== WINDOWS USERS ADVISORY END ==================" + echo -e "" + echo -e "\e[31m===============================================================\e[0m" +} + +ROOTDIR="$DIR/.." + +if [ "$(uname)" == "Darwin" ]; then + BROWSER_TYPE="mac-x64" +elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + BROWSER_TYPE="linux64" +elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then + BROWSER_TYPE="win32" +elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then + BROWSER_TYPE="win64" +fi + +echo "BROWSER => $BROWSER_TYPE" + + +PATH_TO_COMMANDS=./node_modules/webdriver-manager/built/lib/cmds +PATH_TO_BINARIES=./node_modules/webdriver-manager/built/lib/binaries +PATH_TO_SELENIUM=./node_modules/webdriver-manager/selenium # Remove existing drivers rm -rf $PATH_TO_SELENIUM/selenium-server-* @@ -14,16 +52,25 @@ rm -rf $PATH_TO_SELENIUM/chromedriver-* rm -f $PATH_TO_SELENIUM/chromedriver_* # Replace browser type in file and create new file -sed "s/mac-x64/$BROWSER_TYPE/" chrome_xml_schema.js > chrome_xml.js -sed "s/mac-x64/$BROWSER_TYPE/" update_schema.js > update.js +echo 'Replacing new webdriver files' +sed "s/mac-x64/$BROWSER_TYPE/" $DIR/chrome_xml_schema.js > $DIR/chrome_xml.js && sed "s/mac-x64/$BROWSER_TYPE/" $DIR/update_schema.js > $DIR/update.js; + +if [ "$?" -ne 0 ]; then + show_error + exit 0 +fi + +echo "============== Trying to update the files ==============" sleep 2 # Replace webdriver files -cp -f update.js $PATH_TO_COMMANDS/update.js -cp -f chrome_xml.js $PATH_TO_BINARIES/chrome_xml.js +echo "cp -f $DIR/update.js $PATH_TO_COMMANDS/update.js" +cp -f $DIR/update.js $PATH_TO_COMMANDS/update.js +cp -f $DIR/chrome_xml.js $PATH_TO_BINARIES/chrome_xml.js + +rm -f $DIR/update.js +rm -f $DIR/chrome_xml.js + +node ./node_modules/webdriver-manager/bin/webdriver-manager update --gecko=false --versions.chrome=$chromeVersion -rm -f update.js -rm -f chrome_xml.js -#$(npm bin)/webdriver-manager update --gecko=false -node ../../node_modules/webdriver-manager/bin/webdriver-manager update --gecko=false \ No newline at end of file