import { CommonKeyword } from "./commonKeyword"; import { logger } from '../Logger/logger'; import { TextField } from './textfield'; import { Wait } from "./dewWait"; import { ReadLocators } from "../readLocators"; const locators:any = ReadLocators.readJson(); /** * Pick values in */ export class DewAutocomplete { /** * To select first element in the autocomplete * * ```js * * DewAutocomplete.selectFirst(locators.dewAutoCompleteFirstElementXpath) * ``` * * @param {any} locatorParam located by CSS|XPath|strict locator. * */ static async selectFirst(locatorParam: any) { let locator:string; if (Array.isArray(locatorParam)) { locator = locatorParam[0]; } else { locator = locatorParam; } try { await activate(locator); await CommonKeyword.clickElement(locators.autoCompleteSelectFirstElementXpath); await deactivate(); } catch (error) { logger.log(`Issue while performing operation in DDCC: Error while selecting first value from auto complete`); throw error; } } /** * To select multiple values in a autocomplete * * ```js * * DewAutocomplete.selectMultipleByText(locators.autoCompleteselectMultiple,"Sales","Procurement") * ``` * * @param {any} locatorParam located by CSS|XPath|strict locator. * @param {Array} values 1 or more values to be selected */ static async selectMultipleByText(locatorParam: any, ...values: any) { let locator:string; if (Array.isArray(locatorParam)) { locator = locatorParam[0]; } else { locator = locatorParam; } try { // await activate(locator); for (const value of values) { await TextField.enterTextUsingLocator(locator, value); await CommonKeyword.clickElement(`.//div[@dew-autocomplete-body='']//*[text()[normalize-space()='${value}']]`); } await deactivate(); } catch (error) { logger.log(`Issue while performing operation in DDCC: Error while selecting text from auto complete`); throw error; } } /** * To select element by text provided * * ```js * * DewAutocomplete.selectByText(locators.autoCompleteselectMultiple,"Sales") * ``` * * @param {any} locatorParam located by CSS|XPath|strict locator. * @param {string} value to be selected */ static async selectByText(locatorParam: any, value: string) { let locator:string; if (Array.isArray(locatorParam)) { locator = locatorParam[0]; } else { locator = locatorParam; } await this.selectMultipleByText(locator, value); } } /** * This function is used to click in autocomplete field to display suggested values * @param {*} field */ async function activate(field: string) { await TextField.enterTextUsingLocator(field, ` `); await Wait.waitUntilVisibilityOfElement(locators.autoCompleteActivateXpath); } /** * This function is used to disappear the suggested values of autocomplete */ async function deactivate() { await CommonKeyword.click(locators.autoCompleteDeactivate); }