import 'codeceptjs'; import { logger } from '../Logger/logger'; import { Assert } from './assertion'; import { CommonKeyword } from './commonKeyword'; import { DewButton } from './dewButton'; import { DewFileUpload } from './dewFileUpload'; import { Wait } from './dewWait'; import { DewElement } from './element'; import { GenerateRandom } from './generateRandom'; import { SoftAssert } from './SoftAssertion'; import { TextField } from './textfield'; let flexiField: any = []; const assert = require(`soft-assert`); /** * Flexiform Class */ export class Flexiform extends Helper { /** * The method is used to fill flexiform fields without using getInstance API call * * * ```js * await Flexiform.fillFlexiFields() * ``` */ static async fillFlexiFields() { try { flexiField = []; const tagArray = await getUniqueTagName(`//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col/*`); console.log(tagArray); const browser = await this.prototype.helpers[`WebDriver`].browser; await browser.saveScreenshot(`./output/FFScreenshot.png`); // To fill in field elements for await (const tagName of await tagArray) { const fieldDefinitionElements = await `//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col/${tagName}`; if (await DewElement.getNumberOfElementsPresentInDom(fieldDefinitionElements) > 0) { console.log(`Filling Flexiform field: ` + tagName); await flexifill(tagName, fieldDefinitionElements); } } } catch (err) { throw err; } } /** * The method is used to verify flexi fields * * * ```js * await Flexiform.verifyFlexiFields() * ``` */ static async verifyFlexiFields() { for (let i = 0; i < flexiField.length; i++) { const tagName = flexiField[i].tagName; await CommonKeyword.scrollIntoView(`//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col/` + tagName); const label = flexiField[i].label.replace(` *`, ``); const text = flexiField[i].text; switch (tagName) { case `flexiform-datetime`: try { await CommonKeyword.scrollIntoView(`//flexiform-datetime//label[text()[normalize-space()='${label}']]/following-sibling::div`); let value = await DewElement.grabTextFrom(`//flexiform-datetime//label[text()[normalize-space()='${label}']]/following-sibling::div`); if (value.includes(` - `)) { value = value.toString().split(` - `); value = value[0]; } console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `flexiform-datetime: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in date-time`); } break; case `dew-text`: try { await CommonKeyword.scrollIntoView(`//dew-text//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-text//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), ` dew-text: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in text field`); } break; case `dew-textarea`: try { await CommonKeyword.scrollIntoView(`//dew-textarea//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-textarea//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `dew-textarea: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in textarea`); } break; case `dew-numeric`: try { await CommonKeyword.scrollIntoView(`(//dew-numeric//label[text()[normalize-space()='${label}']]/following-sibling::div/span)[1]`); const value = await DewElement.grabTextFrom(`(//dew-numeric//label[text()[normalize-space()='${label}']]/following-sibling::div/span)[1]`); console.log(`Value-----`, value); SoftAssert.softTrue(value.includes(text), `dew-numeric: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in numeric field`); } break; case `dew-radiofield`: try { await CommonKeyword.scrollIntoView(`//dew-radiofield//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-radiofield//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `dew-radiofield: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in radio field`); } break; case `dew-ffcheckbox`: try { await CommonKeyword.scrollIntoView(`//dew-ffcheckbox//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-ffcheckbox//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `dew-ffcheckbox: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in checkbox`); } break; case `ffdew-dropdown`: try { await CommonKeyword.scrollIntoView(`//ffdew-dropdown//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//ffdew-dropdown//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `ffdew-dropdown: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in dropdown`); } break; case `dew-multi-select`: try { await CommonKeyword.scrollIntoView(`//dew-multi-select//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-multi-select//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `dew-multi-select: Not matched, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in multi-select`); } break; case `dew-autocomplete`: try { await CommonKeyword.scrollIntoView(`//dew-autocomplete//label[text()[normalize-space()='${label}']]/following-sibling::div`); const value = await DewElement.grabTextFrom(`//dew-autocomplete//label[text()[normalize-space()='${label}']]/following-sibling::div`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `dew-autocomplete: Not matched, Expected:${text} Actual:${value} `); } catch (err) { logger.info(`Error in auto complete`); } break; case `dew-fileupload`: try { const locator = await DewElement.getListOfElements(`//dew-fileupload//label[text()[normalize-space()='${label}']]/following-sibling::dew-row//div/p[@title='FFScreenshot.png']`); SoftAssert.softTrue(locator.length > 0, `Not matched : dew-fileupload`); } catch (err) { logger.info(`Error in file upload`); } break; default: throw new Error(`Error in DDCC`); } } assert.softAssertAll(); } /** * The method is used to verify flexi fields in edit mode * * * ```js * await Flexiform.verifyFlexiFieldsinEditMode() * ``` */ static async verifyFlexiFieldsinEditMode() { for (let i = 0; i < flexiField.length; i++) { const tagName = flexiField[i].tagName; await CommonKeyword.scrollIntoView(`//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col/` + tagName); const label = flexiField[i].label.replace(` *`, ``); const text = flexiField[i].text; switch (tagName) { case `flexiform-datetime`: try { const value = await DewElement.grabAttributeFrom(`//flexiform-datetime//label[text()[normalize-space()='${label}']]/following-sibling::div/dew-datepicker//input`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched flexiform-datetime, Expected:${text} Actual:${value} `); } catch (err) { logger.info(`Error in date-time`); } break; case `dew-text`: try { const value = await DewElement.grabAttributeFrom(`//dew-text//label[text()[normalize-space()='${label}']]/following-sibling::dew-input/input`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched: dew-text, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in text field`); } break; case `dew-textarea`: try { const value = await DewElement.grabAttributeFrom(`//dew-textarea//label[text()[normalize-space()='${label}']]/following-sibling::dew-input/textarea`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched: dew-textarea, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in textarea`); } break; case `dew-numeric`: try { const value = await DewElement.grabAttributeFrom(`//dew-numeric//label[text()[normalize-space()='${label}']]/following-sibling::div/input`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched: dew-numeric, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in numeric field`); } break; case `dew-radiofield`: try { let locator; const options = await DewElement.getListOfElements(`//dew-radiofield//label[text()[normalize-space()='${label}']]/following-sibling::dew-radio//input`); for (let i = 1; i <= options.length; i++) { const isCheckedValue = await DewElement.grabAttributeFrom(`(//dew-radiofield//label[text()[normalize-space()='${label}']]/following-sibling::dew-radio//input)[${i}]`, `checked`); console.log(`Radio btn`, isCheckedValue); if (isCheckedValue.includes(`true`)) { console.log(`In if of radio`); locator = `(//dew-radiofield//label[text()[normalize-space()='${label}']]/following-sibling::dew-radio//input)[${i}]`; console.log(locator); break; } } const value = await DewElement.grabTextFrom(locator + `/../label`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched : dew-radiofield, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in radio field`); } break; case `dew-ffcheckbox`: try { let locator; const options = await DewElement.getListOfElements(`//dew-ffcheckbox//label[text()[normalize-space()='${label}']]/following-sibling::dew-row//dew-checkbox/input`); for (let i = 1; i <= options.length; i++) { const isCheckedValue = await DewElement.grabAttributeFrom(`(//dew-ffcheckbox//label[text()[normalize-space()='${label}']]/following-sibling::dew-row//dew-checkbox/input)[${i}]`, `checked`); console.log(isCheckedValue); if (isCheckedValue.includes(`true`)) { locator = `(//dew-ffcheckbox//label[text()[normalize-space()='${label}']]/following-sibling::dew-row//dew-checkbox/input)[${i}]`; break; } } const value = await DewElement.grabTextFrom(locator + `/../label`); console.log(`Value-----` + value); SoftAssert.softTrue(text.includes(value), `Not matched : dew-ffcheckbox, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in checkbox`); } break; case `ffdew-dropdown`: try { const value = await DewElement.grabAttributeFrom(`//ffdew-dropdown//label[text()[normalize-space()='${label}']]/following-sibling::div/dew-flexiform-autocomplete//input`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched : ffdew-dropdown, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in dropdown`); } break; case `dew-multi-select`: try { let value = await DewElement.grabTextFrom(`//dew-multi-select//label[text()[normalize-space()='${label}']]/following-sibling::dew-flexiform-multi-select/dew-row/dew-badge-group/span`); console.log(`Value-----` + value.toString()); value = value.toString().replace(`×`, ``); Assert.assert(value.includes(text), `Not matched : dew-multi-select, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in multi-select`); } break; case `dew-autocomplete`: try { const value = await DewElement.grabAttributeFrom(`//dew-autocomplete//label[text()[normalize-space()='${label}']]/following-sibling::dew-flexiform-autocomplete//input`, `value`); console.log(`Value-----`, value); SoftAssert.softTrue(text.includes(value), `Not matched : dew-autocomplete, Expected:${text} Actual:${value}`); } catch (err) { logger.info(`Error in auto complete`); } break; case `dew-fileupload`: try { const locator = await DewElement.getListOfElements(`//dew-fileupload//dew-input-container[label[text()[normalize-space()='${label}']]]//following-sibling::dew-row//div/p[@title='FFScreenshot.png']`); SoftAssert.softTrue(locator.length > 0, `Not matched : dew-fileupload`); } catch (err) { logger.info(`Error in file upload`); } break; default: throw new Error(`Error in DDCC`); } } assert.softAssertAll(); } } module.exports = new Flexiform(); module.exports.Flexiform = Flexiform; // for inheritance /** * To get an array of elements * * await getElements(`//dew-file-upload//input[@type='file']`) * ``` * @param {String} locator */ async function getElements(locator: string) { const totalNumberOfElement = await DewElement.getNumberOfElementsPresentInDom(locator); let element: any; for (let index = 1; index <= totalNumberOfElement; index++) { const visibleElement: any = locate(locator); if (await DewElement.checkIfElementVisible(visibleElement)) { element = visibleElement.value; break; } } return element; } /** * The method return array of unique tagnames present in Flexiform * @param {String} locator */ async function getUniqueTagName(locator: string) { const fieldsList: Array = []; const flexiElements = await DewElement.getListOfElements(locator); console.log(flexiElements); for (const element of await flexiElements) { const grabTagName = await element.getTagName(); await fieldsList.push(`${grabTagName.toString()}`); } const uniqueTagArray = await [...new Set(fieldsList)]; return uniqueTagArray; } /** * * To fill flexifields * ```js * await Flexiform.flexifill("dew-flexi","//dew-flexiform//form[contains(@class,'dynamic-form')]//dew-flexiField//div[@class='float-left fixed-columns']//flexiField/tbody/tr/td[not(@hidden)]/dew-radiofield") * ``` * @param {string} tagName * @param {String} flexiLocator * */ async function flexifill(tagName: string, flexiLocator: string) { await CommonKeyword.scrollIntoView(flexiLocator); const flexiElement = await getElements(flexiLocator); try { switch (tagName) { case `flexiform-datetime`: try { const dateTimeLocator = flexiElement + `//dew-datepicker//input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(dateTimeLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { console.log(`(` + dateTimeLocator + `)` + `[${iterator}]`); await CommonKeyword.scrollIntoView(`(` + dateTimeLocator + `)` + `[${iterator}]`); await CommonKeyword.clickElement(`(` + dateTimeLocator + `)` + `[${iterator}]`); await CommonKeyword.clickElement(`.currentDate`); if (await DewElement.grabNumberOfVisibleElements(`//div[contains(@class,'month')][text()='Select Time']`) > 0) { await CommonKeyword.click(flexiElement + `/../..`); } const text = await DewElement.grabAttributeFrom(`(` + dateTimeLocator + `)` + `[${iterator}]`, `value`); await CommonKeyword.scrollIntoView(`(` + flexiElement + `//label)` + `[${iterator}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text.toString() }); } } catch (err) { logger.info(`Error in date-time`); } break; case `dew-text`: try { const textLocator = flexiElement + `//dew-input/input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(textLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { const text = await GenerateRandom.generateRandomString(8); await CommonKeyword.scrollIntoView(`(` + textLocator + `)` + `[${iterator}]`); await TextField.enterTextUsingLocator(`(` + textLocator + `)` + `[${iterator}]`, text); const value = await DewElement.grabAttributeFrom(`(` + textLocator + `)` + `[${iterator}]`, `value`); console.log(`Value-----`, value); if (value == ``) { await TextField.enterTextUsingLocator(`(` + textLocator + `)` + `[${iterator}]`, text); } const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in text field`); } break; case `dew-textarea`: try { const textLocator = flexiElement + `//dew-input/textarea`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(textLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { const text = await GenerateRandom.generateRandomString(5); await CommonKeyword.scrollIntoView(`(` + textLocator + `)` + `[${iterator}]`); await TextField.type(`(` + textLocator + `)` + `[${iterator}]`, text); const value = await DewElement.grabAttributeFrom(`(` + textLocator + `)` + `[${iterator}]`, `value`); console.log(`Value-----`, value); if (value == ``) { await TextField.type(`(` + textLocator + `)` + `[${iterator}]`, text); } const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}] | (` + flexiElement + `/ancestor::flexiField//th/div[@class='flex-container']/div)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in textarea`); } break; case `dew-numeric`: try { const numLocator = flexiElement + `//dew-input-container//input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(numLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { const num = await (await GenerateRandom.generateRandomNumber(100)).toString(); await CommonKeyword.scrollIntoView(`(` + numLocator + `)` + `[${iterator}]`); await CommonKeyword.clickElement(`(` + numLocator + `)` + `[${iterator}]`); await TextField.type(`(` + numLocator + `)` + `[${iterator}]`, num); const value = await DewElement.grabAttributeFrom(`(` + numLocator + `)` + `[${iterator}]`, `value`); console.log(`Value-----`, value); if (value == ``) { await TextField.type(`(` + numLocator + `)` + `[${iterator}]`, num); } /* z.executeScript(function getElementByXpath(path: any) { return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); }); */ const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: num }); } } catch (err) { logger.info(`Error in numeric field`); } break; case `dew-radiofield`: try { const noOfElements = await DewElement.getNumberOfElementsPresentInDom(flexiElement); for (let iterator = 1; iterator <= noOfElements; iterator++) { const radioLocator = await DewElement.getListOfElements(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-radio//input)`); const rnd = await GenerateRandom.generateRandomNumber(radioLocator.length); await CommonKeyword.scrollIntoView(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-radio//div//label)[${rnd + 1}]`); await CommonKeyword.clickElement(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-radio//div//label)[${rnd + 1}]`); const text = await DewElement.grabTextFrom(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-radio//div//label)[${rnd + 1}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//dew-input-container/label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in radio field`); } break; case `dew-ffcheckbox`: try { const noOfElements = await DewElement.getNumberOfElementsPresentInDom(flexiElement); for (let iterator = 1; iterator <= noOfElements; iterator++) { const checkboxLocator = await DewElement.getListOfElements(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-checkbox/label)[${iterator}]`); const rnd = await GenerateRandom.generateRandomNumber(checkboxLocator.length); await CommonKeyword.scrollIntoView(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-checkbox/label)[${rnd + 1}]`); await CommonKeyword.clickElement(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-checkbox/label)[${rnd + 1}]`); /* await CommonKeyword.click(`//div[@class='cdk-overlay-container']`) Wait.waitForDefaultTimeout(2) */ const text = await DewElement.grabTextFrom(`((//dew-flexiform//form[contains(@class,'dynamic-form')]//div/dew-row/dew-col//${tagName})[${iterator}]//dew-checkbox/label)[${rnd + 1}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//dew-input-container/label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in checkbox`); } break; case `ffdew-dropdown`: try { const dropdownLocator = flexiElement + `//dew-flexiform-autocomplete//input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(dropdownLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { await CommonKeyword.scrollIntoView(`(` + dropdownLocator + `)` + `[${iterator}]`); await TextField.enterTextUsingLocator(`(` + dropdownLocator + `)` + `[${iterator}]`, ` `); const locator = `//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div | //div[contains(@class,'ff-ac-suggestion-item')]`; await Wait.waitUntilVisibilityOfElement(locator); const dropdownElements = await DewElement.grabNumberOfVisibleElements(locator); const rnd = await GenerateRandom.generateRandomNumber(dropdownElements); const text = await DewElement.grabTextFrom(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')])[${rnd + 1}]`); await CommonKeyword.clickElement(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')])[${rnd + 1}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}] | (` + flexiElement + `/ancestor::flexiField//th/div[@class='flex-container']/div)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in dropdown`); } break; case `dew-multi-select`: try { const multiSelectLocator = flexiElement + `//dew-flexiform-multi-select//input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(multiSelectLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { await CommonKeyword.scrollIntoView(`(` + multiSelectLocator + `)` + `[${iterator}]`); await TextField.enterTextUsingLocator(`(` + multiSelectLocator + `)` + `[${iterator}]`, ` `); const locator = `//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div | //div[contains(@class,'ff-ac-suggestion-item')]`; await Wait.waitUntilVisibilityOfElement(locator); const multiSelectElements = await DewElement.grabNumberOfVisibleElements(locator); const rnd = await GenerateRandom.generateRandomNumber(multiSelectElements); const text = await DewElement.grabTextFrom(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div/p)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')]/p)[${rnd + 1}]`); await CommonKeyword.clickElement(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')])[${rnd + 1}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in multi-select`); } break; case `dew-autocomplete`: try { const autoCompleteLocator = flexiElement + `//dew-flexiform-autocomplete//input`; const noOfElements = await DewElement.getNumberOfElementsPresentInDom(autoCompleteLocator); for (let iterator = 1; iterator <= noOfElements; iterator++) { await CommonKeyword.scrollIntoView(`(` + autoCompleteLocator + `)` + `[${iterator}]`); // await CommonKeyword.clickElement(`(` + autoCompleteLocator + `)` + `[${iterator}]`); await TextField.enterTextUsingLocator(`(` + autoCompleteLocator + `)` + `[${iterator}]`, ` `); const locator = `//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div | //div[contains(@class,'ff-ac-suggestion-item')]`; await Wait.waitUntilVisibilityOfElement(locator); const autoCompleteElements = await DewElement.grabNumberOfVisibleElements(locator); const rnd = await GenerateRandom.generateRandomNumber(autoCompleteElements); const text = await DewElement.grabTextFrom(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')])[${rnd + 1}]`); await CommonKeyword.clickElement(`(//div[contains(@class,'autoCompleteListOutsideflexiField')]//div[contains(@class,'list')]/div)[${rnd + 1}] | (//div[contains(@class,'ff-ac-suggestion-item')])[${rnd + 1}]`); const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } catch (err) { logger.info(`Error in auto complete`); } break; case `dew-fileupload`: try { const fileUploadLocator1 = flexiElement + `//dew-file-upload//input[@type='file']`; if (await DewElement.getNumberOfElementsPresentInDom(fileUploadLocator1) > 0) { await Wait.waitForDefaultTimeout(2); const noOfElements = await DewElement.getNumberOfElementsPresentInDom(fileUploadLocator1); for (let iterator = 1; iterator <= noOfElements; iterator++) { await CommonKeyword.scrollIntoView(`(` + fileUploadLocator1 + `)` + `[${iterator}]`); await DewFileUpload.uploadFileUsingLocator(`(` + fileUploadLocator1 + `)` + `[${iterator}]`, `./output/FFScreenshot.png`); const text = `FFScreenshot.png`; const label = await DewElement.grabTextFrom(`(` + flexiElement + `//label)` + `[${iterator}]`); await flexiField.push({ tagName: tagName, label: label, text: text }); } } const fileUploadLocator2 = flexiElement + `//a/div`; if (await DewElement.getNumberOfElementsPresentInDom(flexiElement + `//a/div`) > 0) { const noOfElements = await DewElement.getNumberOfElementsPresentInDom(fileUploadLocator2); for (let iterator = 1; iterator <= noOfElements; iterator++) { await CommonKeyword.scrollIntoView(`(` + fileUploadLocator2 + `)` + `[${iterator}]`); await CommonKeyword.clickElement(`(` + fileUploadLocator2 + `)` + `[${iterator}]`); await Wait.waitUntilVisibilityOfElement(`//div[@class='cdk-overlay-container']//div[@class[normalize-space()='modal-content']]`); await DewFileUpload.uploadFileUsingLocator(`//div[@class='cdk-overlay-container']//div[@class[normalize-space()='modal-content']]//dew-file-upload//input[@type='file']`, `./output/FFScreenshot.png`); await DewButton.click(`Done`); } } } catch (err) { logger.info(`Error in file upload`); } break; default: throw new Error(`Error in DDCC`); } } catch (err) { throw err; } }