/*! * @license * Copyright 2019 Alfresco Software, Ltd. * * 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, by, element, ElementFinder } from 'protractor'; import { ProcessServicesPage } from '../../process-services/pages/process-services.page'; export class NavigationBarPage { linkListContainer = element(by.css('.app-sidenav-linklist')); linkMenuChildrenContainer = element(by.css('.nestedMenu')); dataTableNestedButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="Datatable"]')); dataTableCopyContentButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="Copy Content"]')); dataTableDragAndDropButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="Drag and Drop"]')); processServicesNestedButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="App"]')); processServicesCloudHomeButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="Home"]')); themeButton = element(by.css('button[data-automation-id="theme menu"]')); themeMenuContent = element(by.css('div[class*="mat-menu-panel"]')); appTitle = element(by.css('.adf-app-title')); menuButton = element(by.css('button[data-automation-id="adf-menu-icon"]')); formButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="Form"]')); peopleGroupCloudButton = this.linkMenuChildrenContainer.element(by.css('.app-sidenav-link[data-automation-id="People/Group Cloud"]')); logoutSection: ElementFinder = element(by.css('div[data-automation-id="adf-logout-section"]')); personalFiles: ElementFinder = element(by.css('div [title="Personal Files"]')); async clickNavigationBarItem(title: string, untilElementIsVisible?: ElementFinder): Promise { Logger.log(`clickNavigationBarItem ${title}`); const menu = element(by.css(`.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 clickHeaderDataButton(): Promise { await this.clickNavigationBarItem('Header Data'); } async clickTaskListButton(): Promise { await this.clickNavigationBarItem('Task List'); } async clickProcessCloudButton() { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.clickUntilIsNotVisible(this.getMenuItem('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); } async navigateToPeopleGroupCloudPage(): Promise { await this.clickProcessCloudButton(); await BrowserActions.click(this.peopleGroupCloudButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } private async clickProcessServicesButton() { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.clickUntilIsNotVisible(this.getMenuItem('Process Services'), this.linkMenuChildrenContainer); } private getMenuItem(title: string) { return element(by.css(`.app-sidenav-link[data-automation-id="${title}"]`)); } 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 clickLoginButton(): Promise { await this.clickNavigationBarItem('Login'); } 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 navigateToCopyContentDatatable(): Promise { await this.clickDataTable(); await BrowserActions.click(this.dataTableCopyContentButton); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } async clickTagButton(): Promise { await this.clickNavigationBarItem('Tag'); } async clickSocialButton(): Promise { await this.clickNavigationBarItem('Social'); } async clickSettingsButton(): Promise { await this.clickNavigationBarItem('Settings'); } async clickConfigEditorButton(): Promise { await this.clickNavigationBarItem('Configuration Editor'); } async clickOverlayViewerButton(): Promise { await this.clickNavigationBarItem('Overlay Viewer'); } async clickTreeViewButton(): Promise { await this.clickNavigationBarItem('Tree View'); } async clickIconsButton(): Promise { await this.clickNavigationBarItem('Icons'); } async clickAboutButton(): Promise { await this.clickNavigationBarItem('About'); } 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 clickThemeButton(): Promise { await BrowserActions.closeMenuAndDialogs(); await BrowserActions.click(this.themeButton); await BrowserVisibility.waitUntilElementIsVisible(this.themeMenuContent); } async clickOnSpecificThemeButton(themeName): Promise { const themeElement = element(by.css(`button[data-automation-id="${themeName}"]`)); await BrowserActions.click(themeElement); await BrowserVisibility.waitUntilElementIsNotPresent(this.linkMenuChildrenContainer); } async openContentServicesFolder(folderId): Promise { await BrowserActions.getUrl(`${browser.baseUrl}/files/${folderId}`); } async checkMenuButtonIsDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.menuButton); } async checkMenuButtonIsNotDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsNotVisible(this.menuButton); } async checkToolbarColor(color: string): Promise { const toolbarColor = element(by.css(`mat-toolbar[class*="mat-${color}"]`)); await BrowserVisibility.waitUntilElementIsVisible(toolbarColor); } async clickAppLogo(logoTitle: string): Promise { const appLogo = element(by.css('a[title="' + logoTitle + '"]')); await BrowserActions.click(appLogo); } async clickAppLogoText(): Promise { await BrowserActions.click(this.appTitle); } async checkLogoTooltip(logoTooltipTitle: string): Promise { const logoTooltip = element(by.css('a[title="' + logoTooltipTitle + '"]')); await BrowserVisibility.waitUntilElementIsVisible(logoTooltip); } async openViewer(nodeId: string): Promise { await BrowserActions.getUrl(browser.baseUrl + `/files(overlay:files/${nodeId}/view`); } async goToSite(site): Promise { await BrowserActions.getUrl(browser.baseUrl + `/files/${site.entry.guid}/display/list`); } async scrollTo(el: ElementFinder): Promise { await browser.executeScript(`return arguments[0].scrollTop = arguments[1].offsetTop`, this.linkListContainer.getWebElement(), el.getWebElement()); } }