UNPKG

tlc-core-automation-framework-v3-wdio-v9

Version:

Background: - We are following multi-layer automation framework architecture using webdriver.io + cucumber + typescript This core framework has been implemented with generic utility functions and cucumber steps, which can be easily consumed by another fra

122 lines (108 loc) 6.53 kB
import logger from "../reporting-helpers/logger"; import {ParseData} from "./parse-data"; import {ConfigHelper} from "./config-helper"; import getCurrentUrl from "../framework-helpers/action/getCurrentUrl"; import openUrl from "../framework-helpers/action/openUrl"; import {CustomExpect} from "./custom-expect"; import pause from "../framework-helpers/action/pause"; import scriptExecute from "../framework-helpers/action/scriptExecute"; import {browser, $, $$, expect} from '@wdio/globals' export class browserHelper { // This function is used to clear the browser instance(localStorage & sessionStorage) public static clearBrowserStorage() { function clearLocalAndSessionStorage() { window.sessionStorage.clear(); window.localStorage.clear(); } return browser.execute(clearLocalAndSessionStorage); } public static async currentPage(pageId: string, falseCase: boolean = false, maxCheckCounter: number = 10, checkInterval: number = 1000) { const pageUrlPath = ParseData.getEnvData('PAGE_URLS_PATH'); const pageConfig = ParseData.getJsonFromFile(pageUrlPath); CustomExpect.expectToBeTruthy(ConfigHelper.isPageMappedInTheFramework(pageId, pageConfig), `Page "${pageId}" is not mapped in "./config/pages.json"`); let isPageLoadSuccess: boolean = false; let counter: number = 0; let currentUrl: string; const expectedPageResources: string = pageConfig[pageId]; logger.info(`Expected page resource is ${falseCase ? 'not' : ''} "${expectedPageResources}"`); do { await pause(1000); currentUrl = await getCurrentUrl(); logger.info(`Verifying URLS now`); try { if (!falseCase) CustomExpect.expectToMatch(currentUrl, expectedPageResources, `Current URL "${currentUrl}" is not MATCHING with expected URL "${expectedPageResources}"`) else CustomExpect.expectNotToMatch(currentUrl, expectedPageResources, `Current URL "${currentUrl}" is MATCHING with expected URL "${expectedPageResources}"`) isPageLoadSuccess = true; } catch (e) { await pause(checkInterval); logger.info(`User is not on the expected page. Please wait...`) counter++; } } while (isPageLoadSuccess == false && counter <= maxCheckCounter) CustomExpect.expectToBeTruthy(isPageLoadSuccess, `User is ${falseCase ? '' : 'not'} on the "${pageId}" page`) logger.info(`Verified : User is ${falseCase ? 'not' : ''} on the "${pageId}" page now`); } public static async exactPage(pageId: string, falseCase: boolean = false, maxCheckCounter: number = 10, checkInterval: number = 1000) { //await this.waitUntilPageLoadedSuccessfully(5000); const pageUrlPath = ParseData.getEnvData('PAGE_URLS_PATH'); const pageConfig = ParseData.getJsonFromFile(pageUrlPath); CustomExpect.expectToBeTruthy(ConfigHelper.isPageMappedInTheFramework(pageId, pageConfig), `Page "${pageId}" is not mapped in "./config/pages.json"`); let isPageLoadSuccess: boolean = false; let counter: number = 0; let currentUrl: string; const expectedPageResources: string = ParseData.getEnvData("HOST_URL") + pageConfig[pageId]; logger.info(`Expected page resource is ${falseCase ? 'not' : ''} "${expectedPageResources}"`); do { await pause(checkInterval); currentUrl = await getCurrentUrl(); logger.info(`Verifying URLS now...`); try { if (!falseCase) CustomExpect.expectToEqual(currentUrl, expectedPageResources, `Current URL "${currentUrl}" is not equal with expected URL "${expectedPageResources}"`) else CustomExpect.expectNotToEqual(currentUrl, expectedPageResources, `Current URL "${currentUrl}" is equal with expected URL "${expectedPageResources}"`) isPageLoadSuccess = true; } catch (e) { await pause(checkInterval); logger.info(`User is not on the expected page. Please wait...`) counter++; } } while (isPageLoadSuccess == false && counter <= maxCheckCounter) CustomExpect.expectToBeTruthy(isPageLoadSuccess, `User is ${falseCase ? '' : 'not'} on the "${pageId}" page`) logger.info(`Verified : User is ${falseCase ? 'not' : ''} on the "${pageId}" page now`); } public static async navigateToPageFromHost(pageId: string, hostName: string = "HOST_URL", clearCacheAndStorage: boolean = true) { const pageUrlPath = ParseData.getEnvData('PAGE_URLS_PATH'); const pageConfig = ParseData.getJsonFromFile(pageUrlPath); // expect(ConfigHelper.isPageMappedInTheFramework(pageId, pageConfig)).toBeTruthy(); CustomExpect.expectToBeTruthy(ConfigHelper.isPageMappedInTheFramework(pageId, pageConfig), `Page "${pageId}" is not mapped in "./config/pages.json"`); const pageResourcesFromPageConfig = pageConfig[pageId]; logger.info(`Page Resource from Config >>> ${pageResourcesFromPageConfig}`); const hostUrl = ParseData.getEnvData(hostName.toUpperCase()); const targetUrl = `${hostUrl}${pageResourcesFromPageConfig}`; //revisit this line logger.info(`Clear cache : ${clearCacheAndStorage}`) clearCacheAndStorage ? await openUrl(targetUrl) : await scriptExecute('window.history.pushState("", "", "' + targetUrl + '")'); } public static async navigateUsingDeepLink(deepLink: string, hostName: string = "HOST_URL") { const hostUrl = ParseData.getEnvData(hostName.toUpperCase()); const targetUrl = `${hostUrl}${deepLink}`; logger.info(`Target URL : ${targetUrl}`); await openUrl(targetUrl); } public static async waitForAllAureliaComponentLoaded() { await browser.waitUntil(async () => { let componentsLoadedInfo = await browser.execute(() => { //@ts-ignore return (typeof document.__aureliaGlobal !== 'undefined' && document.aureliaAllComposed === true) }); return componentsLoadedInfo; }, { timeout: parseInt(ParseData.getEnvData('PAGE_LOAD_TIMEOUT_MS')), interval: parseInt(ParseData.getEnvData('MAX_TRY')), timeoutMsg: 'Not all components loaded' }); } }