/*! * @license * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { AppListCloudPage, BrowserActions, BrowserVisibility, Logger } from '@alfresco/adf-testing'; import { $, browser, ElementFinder } from 'protractor'; import { ProcessServicesPage } from '../../process-services/pages/process-services.page'; export class NavigationBarPage { linkMenuChildrenContainer = $('.nestedMenu'); dataTableNestedButton = this.linkMenuChildrenContainer.$('.app-sidenav-link[data-automation-id="Datatable"]'); dataTableDragAndDropButton = this.linkMenuChildrenContainer.$('.app-sidenav-link[data-automation-id="Drag and Drop"]'); processServicesNestedButton = this.linkMenuChildrenContainer.$('.app-sidenav-link[data-automation-id="App"]'); processServicesCloudHomeButton = this.linkMenuChildrenContainer.$('.app-sidenav-link[data-automation-id="Home"]'); formButton = this.linkMenuChildrenContainer.$('.app-sidenav-link[data-automation-id="Form"]'); logoutSection = $('div[data-automation-id="adf-logout-section"]'); personalFiles = $('div [title="Personal Files"]'); getMenuItemLocator = (title: string) => $(`.app-sidenav-link[data-automation-id="${title}"]`); async clickNavigationBarItem(title: string, untilElementIsVisible?: ElementFinder): Promise { Logger.log(`clickNavigationBarItem ${title}`); const menu = $(`.app-sidenav-link[data-automation-id="${title}"]`); await BrowserActions.closeMenuAndDialogs(); if (untilElementIsVisible) { await BrowserActions.clickUntilIsNotVisible(menu, untilElementIsVisible); } else { await BrowserActions.click(menu); } } async clickHomeButton(): Promise { await this.clickNavigationBarItem('Home'); } async navigateToContentServices(): Promise { await this.clickNavigationBarItem('Content Services', this.personalFiles); } async clickTaskListButton(): Promise { await this.clickNavigationBarItem('Task List'); } async clickProcessCloudButton() { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.clickUntilIsNotVisible(this.getMenuItemLocator('Process Cloud'), this.linkMenuChildrenContainer); } async navigateToProcessServicesCloudPage(): Promise { await this.clickProcessCloudButton(); await BrowserActions.click(this.processServicesCloudHomeButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new AppListCloudPage(); } async navigateToFormCloudPage(): Promise { await this.clickProcessCloudButton(); await BrowserActions.click(this.formButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } private async clickProcessServicesButton() { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.clickUntilIsNotVisible(this.getMenuItemLocator('Process Services'), this.linkMenuChildrenContainer); } async navigateToProcessServicesPage(): Promise { await this.clickProcessServicesButton(); await BrowserActions.click(this.processServicesNestedButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); return new ProcessServicesPage(); } async navigateToProcessServicesFormPage(): Promise { await this.clickProcessServicesButton(); await BrowserActions.click(this.formButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } async clickTrashcanButton(): Promise { await this.clickNavigationBarItem('Trashcan'); } async clickCustomSources(): Promise { await this.clickNavigationBarItem('Custom Sources'); } async clickDataTable(): Promise { await this.clickNavigationBarItem('Datatable'); await BrowserVisibility.waitUntilElementIsVisible(this.linkMenuChildrenContainer); } async navigateToDatatable(): Promise { await this.clickDataTable(); await BrowserActions.click(this.dataTableNestedButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } async navigateToDragAndDropDatatable(): Promise { await this.clickDataTable(); await BrowserActions.click(this.dataTableDragAndDropButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } async clickTagButton(): Promise { await this.clickNavigationBarItem('Tag'); } async clickSocialButton(): Promise { await this.clickNavigationBarItem('Social'); } async clickOverlayViewerButton(): Promise { await this.clickNavigationBarItem('Overlay Viewer'); } async clickTreeViewButton(): Promise { await this.clickNavigationBarItem('Tree View'); } async clickLogoutButton(): Promise { Logger.log('Logout'); try { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.clickExecuteScript('.app-sidenav-link[adf-logout]'); await BrowserVisibility.waitUntilElementIsPresent(this.logoutSection); } catch (error) { Logger.log('Logout section NOT found'); } } async openContentServicesFolder(folderId): Promise { await BrowserActions.getUrl(`${browser.baseUrl}/files/${folderId}`); } async goToSite(site): Promise { await BrowserActions.getUrl(browser.baseUrl + `/files/${site.entry.guid}/display/list`); } }