src/page_objects/web/general/nav.panel.js
import BasePage from "../../base.page.js";
/**
* NavPanel
* @extends BasePage
*/
class NavPanel extends BasePage {
/**
* @param {args} args Args from controller
*/
constructor(args) {
super(args);
}
// PAGE ELEMENTS
/* eslint-disable require-jsdoc */
navPanel() {
return this.element("nav#nav");
}
home() {
return this.element("nav#nav a[href='/']");
}
chat() {
return this.element("nav#nav a[href='/chat']");
}
contacts() {
return this.element("nav#nav a[href='/contacts']");
}
roomSystems() {
return this.element("nav#nav a[href='/room-systems']");
}
meetings() {
return this.element("nav#nav a[href='/meetings']");
}
sideNavHandle() {
return this.element("#sideNavHandle");
}
sideNavContainer() {
return this.element('[class^="components-SideNav-SideNav__container"]');
}
/* eslint-enable require-jsdoc */
// PAGE FUNCTIONS
/**
* Determines if side nav is expanded
* @returns {Boolean} True if side nave is expanded
*/
async isSideNavExpanded() {
const sideNavClass = await this.sideNavContainer().getAttribute("class");
return sideNavClass.includes("wide");
}
/**
* Expand the side nave
*/
async expandSideNav() {
if (!await this.isSideNavExpanded()) {
try {
await this.doubleClickSideNav();
await this.browser.waitUntil(
async () => await this.isSideNavExpanded(),
10000
);
} catch (e) {
throw new Error("Error expanding side nav:", e);
}
} else {
throw new Error("Side nav is already expanded.");
}
}
/**
* Double click the side nave to expand or collapse it
* @todo use POMLS double click
*/
async doubleClickSideNav() {
await this.sideNavHandle().waitForVisible();
await this.browser.doubleClick(this.sideNavHandle().selector);
await this.browser.pause(3000);
}
/**
* Collapse the side nav
*/
async collapseSideNav() {
if (await this.isSideNavExpanded()) {
try {
await this.doubleClickSideNav();
await this.browser.waitUntil(async () => {
const expanded = (await this.isSideNavExpanded()) ? false : true;
return expanded;
}, 10000);
} catch (e) {
throw new Error("Error collapsing side nav:", e);
}
} else {
throw new Error("Side nav is already collapsed.");
}
}
}
export default NavPanel;