export default class PageObject { private selectItemSelectedIcon = ".pf-c-select__menu-item-icon"; private drpDwnMenuList = ".pf-c-dropdown__menu"; private drpDwnMenuItem = ".pf-c-dropdown__menu-item"; private drpDwnMenuToggleBtn = ".pf-c-dropdown__toggle"; private selectMenuList = ".pf-c-select__menu"; private selectMenuItem = ".pf-c-select__menu-item"; private selectMenuToggleBtn = ".pf-c-select__toggle"; private switchInput = ".pf-c-switch__input"; private formLabel = ".pf-c-form__label"; private chipGroup = ".pf-c-chip-group"; private chipGroupCloseBtn = ".pf-c-chip-group__close"; private chipItem = ".pf-c-chip-group__list-item"; protected assertExist(element: Cypress.Chainable, exist: boolean) { element.should((!exist ? "not." : "") + "exist"); return this; } protected assertIsVisible( element: Cypress.Chainable, isVisible: boolean ) { element.should((!isVisible ? "not." : "") + "be.visible"); return this; } protected assertIsEnabled( element: Cypress.Chainable, isEnabled = true ) { element.then(($btn) => { if ($btn.hasClass("pf-m-disabled")) { element.should( (isEnabled ? "not." : "") + "have.class", "pf-m-disabled" ); } else { element.should((isEnabled ? "not." : "") + "have.attr", "disabled"); } }); return this; } protected assertIsDisabled(element: Cypress.Chainable) { return this.assertIsEnabled(element, false); } protected assertHaveText(element: Cypress.Chainable, text: string) { element.should("have.text", text); return this; } protected assertHaveValue(element: Cypress.Chainable, value: string) { element.should("have.value", value); return this; } protected assertSwitchStateOn( element?: Cypress.Chainable, isOn = true ) { (element ?? cy.get(this.switchInput)) .parent() .contains(isOn ? "On" : "Off") .should("be.visible"); return this; } protected assertSwitchStateOff(element?: Cypress.Chainable) { return this.assertSwitchStateOn(element, false); } protected assertDropdownMenuIsOpen( isOpen = true, element?: Cypress.Chainable ) { this.assertExist(element ?? cy.get(this.drpDwnMenuList), isOpen); return this; } protected assertDropdownMenuIsClosed(element?: Cypress.Chainable) { return this.assertDropdownMenuIsOpen( false, element ?? cy.get(this.drpDwnMenuList) ); } protected clickDropdownMenuItem( itemName: string, element?: Cypress.Chainable ) { (element ?? cy.get(this.drpDwnMenuItem)).contains(itemName).click(); return this; } protected clickDropdownMenuToggleButton( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent(); element.click(); return this; } protected openDropdownMenu( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent(); this.clickDropdownMenuToggleButton(itemName, element); this.assertDropdownMenuIsOpen(true); return this; } protected closeDropdownMenu( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent(); this.clickDropdownMenuToggleButton(itemName, element); this.assertDropdownMenuIsOpen(false); return this; } protected assertDropdownMenuItemIsSelected( itemName: string, isSelected: boolean, element?: Cypress.Chainable ) { element = element ?? cy.get(this.drpDwnMenuItem); this.assertExist( element.contains(itemName).find(this.selectItemSelectedIcon), isSelected ); return this; } protected assertDropdownMenuHasItems( items: string[], element?: Cypress.Chainable ) { const initialElement = element; for (const item of items) { element = initialElement ?? cy.get(this.drpDwnMenuList); this.assertExist(element.find(this.drpDwnMenuItem).contains(item), true); } return this; } protected assertDropdownMenuHasLabels( items: string[], element?: Cypress.Chainable ) { const initialElement = element; for (const item of items) { element = initialElement ?? cy.get(this.drpDwnMenuList); this.assertExist(element.find(this.formLabel).contains(item), true); } return this; } protected assertDropdownMenuItemsEqualTo( number: number, element?: Cypress.Chainable ) { element = element ?? cy.get(this.drpDwnMenuList); element.find(this.drpDwnMenuItem).should(($item) => { expect($item).to.have.length(number); }); return this; } protected assertSelectMenuIsOpen( isOpen = true, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuList); return this.assertDropdownMenuIsOpen(isOpen, element); } protected assertSelectMenuIsClosed(element?: Cypress.Chainable) { element = element ?? cy.get(this.selectMenuList); return this.assertDropdownMenuIsClosed(element); } protected clickSelectMenuItem( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuItem); return this.clickDropdownMenuItem(itemName, element); } protected clickSelectMenuToggleButton( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent(); return this.clickDropdownMenuToggleButton(itemName, element); } protected openSelectMenu(itemName: string, element?: Cypress.Chainable) { element = element ?? cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent(); this.clickDropdownMenuToggleButton(itemName, element); this.assertSelectMenuIsOpen(true); return this; } protected closeSelectMenu( itemName: string, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent(); this.clickDropdownMenuToggleButton(itemName, element); this.assertSelectMenuIsOpen(false); return this; } protected assertSelectMenuItemIsSelected( itemName: string, isSelected: boolean, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuItem); return this.assertDropdownMenuItemIsSelected(itemName, isSelected, element); } protected assertSelectMenuHasItems( items: string[], element?: Cypress.Chainable ) { const initialElement = element; for (const item of items) { element = initialElement ?? cy.get(this.selectMenuList); this.assertExist(element.find(this.selectMenuItem).contains(item), true); } return this; } protected assertSelectMenuItemsEqualTo( number: number, element?: Cypress.Chainable ) { element = element ?? cy.get(this.selectMenuList); element.find(this.selectMenuItem).should(($item) => { expect($item).to.have.length(number); }); return this; } private getChipGroup(groupName: string) { return cy.get(this.chipGroup).contains(groupName).parent().parent(); } private getChipItem(itemName: string) { return cy.get(this.chipItem).contains(itemName).parent(); } private getChipGroupItem(groupName: string, itemName: string) { return this.getChipGroup(groupName) .find(this.chipItem) .contains(itemName) .parent(); } protected removeChipGroup(groupName: string) { this.getChipGroup(groupName) .find(this.chipGroupCloseBtn) .find("button") .click(); return this; } protected removeChipItem(itemName: string) { this.getChipItem(itemName).find("button").click(); return this; } protected removeChipGroupItem(groupName: string, itemName: string) { this.getChipGroupItem(groupName, itemName).find("button").click(); return this; } protected assertChipGroupExist(groupName: string, exist: boolean) { this.assertExist(cy.contains(this.chipGroup, groupName), exist); return this; } protected assertChipItemExist(itemName: string, exist: boolean) { cy.get(this.chipItem).within(() => { cy.contains(itemName).should((exist ? "" : "not.") + "exist"); }); return this; } protected assertChipGroupItemExist( groupName: string, itemName: string, exist: boolean ) { this.assertExist( this.getChipGroup(groupName).contains(this.chipItem, itemName), exist ); return this; } }