diff --git a/e2e/content-services/directives/create-folder-directive.e2e.ts b/e2e/content-services/directives/create-folder-directive.e2e.ts index ee708e341f..4be620ad74 100644 --- a/e2e/content-services/directives/create-folder-directive.e2e.ts +++ b/e2e/content-services/directives/create-folder-directive.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; +import { LoginPage, NotificationHistoryPage, StringUtil } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { FolderDialogPage } from '../../pages/adf/dialog/folder-dialog.page'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; @@ -47,7 +47,7 @@ describe('Create folder directive', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); await contentServicesPage.goToDocumentList(); - }); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); @@ -55,11 +55,11 @@ describe('Create folder directive', () => { beforeEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - }); + }); afterEach(async () => { await browser.actions().sendKeys(Key.ESCAPE).perform(); - }); + }); it('[C260154] Should not create the folder if cancel button is clicked', async () => { const folderName = 'cancelFolder'; @@ -106,7 +106,7 @@ describe('Create folder directive', () => { }); it('[C260158] Should be possible add a folder description when create a new folder', async () => { - const folderName = 'folderDescription'; + const folderName = StringUtil.generateRandomString(); const description = 'this is the description'; await contentServicesPage.clickOnCreateNewFolder(); diff --git a/e2e/content-services/document-list/document-list-component.e2e.ts b/e2e/content-services/document-list/document-list-component.e2e.ts index 0afe8ea155..12bf3f3a27 100644 --- a/e2e/content-services/document-list/document-list-component.e2e.ts +++ b/e2e/content-services/document-list/document-list-component.e2e.ts @@ -245,7 +245,7 @@ describe('Document List Component', () => { await contentServicesPage.doubleClickRow(folderName); await contentServicesPage.checkEmptyFolderTextToBe('This folder is empty'); await contentServicesPage.checkEmptyFolderImageUrlToContain('/assets/images/empty_doc_lib.svg'); - }); + }); it('[C272775] Should be able to upload a file in new folder', async () => { const testFile = new FileModel({ @@ -265,7 +265,7 @@ describe('Document List Component', () => { await contentServicesPage.doubleClickRow(uploadedFolder.entry.name); await contentServicesPage.uploadFile(testFile.location); await contentServicesPage.checkContentIsDisplayed(testFile.name); - }); + }); it('[C261997] Should be able to clean Recent Files history', async () => { acsUser = new AcsUserModel(); @@ -279,7 +279,7 @@ describe('Document List Component', () => { await contentServicesPage.expandRecentFiles(); await contentServicesPage.checkEmptyRecentFileIsDisplayed(); await contentServicesPage.closeRecentFiles(); - }); + }); it('[C279970] Should display Islocked field for folders', async () => { acsUser = new AcsUserModel(); @@ -296,7 +296,7 @@ describe('Document List Component', () => { await contentServicesPage.checkContentIsDisplayed(folderNameB); await contentServicesPage.checkLockIsDisplayedForElement(folderNameA); await contentServicesPage.checkLockIsDisplayedForElement(folderNameB); - }); + }); it('[C269086] Should display Islocked field for files', async () => { const testFileA = new FileModel({ @@ -319,7 +319,7 @@ describe('Document List Component', () => { await contentServicesPage.checkContentIsDisplayed(testFileB.name); await contentServicesPage.checkLockIsDisplayedForElement(testFileA.name); await contentServicesPage.checkLockIsDisplayedForElement(testFileB.name); - }); + }); describe('Once uploaded 20 folders', () => { @@ -333,6 +333,7 @@ describe('Document List Component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); let folderName = ''; let folder = null; + for (let i = 0; i < 20; i++) { folderName = `MEESEEKS_000${i}`; folder = await uploadActions.createFolder(folderName, '-my-'); @@ -341,7 +342,7 @@ describe('Document List Component', () => { }); afterAll(async () => { - for (let i = 0; i <= folderCreated.length; i++) { + for (let i = 0; i < folderCreated.length; i++) { await uploadActions.deleteFileOrFolder(folderCreated[i].entry.id); } }); @@ -352,7 +353,7 @@ describe('Document List Component', () => { await contentServicesPage.checkListIsSortedByNameColumn('asc'); }); - }); + }); describe('Column Template', () => { diff --git a/e2e/content-services/document-list/document-list-permissions.e2e.ts b/e2e/content-services/document-list/document-list-permissions.e2e.ts index 80669f374d..16d7affc00 100644 --- a/e2e/content-services/document-list/document-list-permissions.e2e.ts +++ b/e2e/content-services/document-list/document-list-permissions.e2e.ts @@ -26,7 +26,6 @@ describe('Document List Component', () => { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); - const navBar = new NavigationBarPage(); const errorPage = new ErrorPage(); const navigationBarPage = new NavigationBarPage(); @@ -54,15 +53,11 @@ describe('Document List Component', () => { privateSite = await this.alfrescoJsApi.core.sitesApi.createSite(privateSiteBody); await loginPage.loginToContentServicesUsingUserModel(acsUser); - }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); await this.alfrescoJsApi.core.sitesApi.deleteSite(privateSite.entry.id); - await navBar.openLanguageMenu(); - await navBar.chooseLanguage('English'); - }); it('[C217334] Should display a message when accessing file without permissions', async () => { @@ -77,13 +72,5 @@ describe('Document List Component', () => { await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); await expect(await errorPage.getErrorCode()).toBe('403'); }); - - it('[C279925] Should display translated message when accessing a file without permissions if language is changed', async () => { - await navBar.openLanguageMenu(); - await navBar.chooseLanguage('Italiano'); - await browser.sleep(2000); - await BrowserActions.getUrl(browser.params.testConfig.adf.url + '/files/' + privateSite.entry.guid); - await expect(await errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); - }); }); }); diff --git a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts index 4bd2bf7cee..b9ea9c27fa 100644 --- a/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts +++ b/e2e/content-services/metadata/metadata-smoke-tests.e2e.ts @@ -15,7 +15,14 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, BrowserActions, UploadActions, ViewerPage } from '@alfresco/adf-testing'; +import { + LoginPage, + LocalStorageUtil, + BrowserActions, + UploadActions, + ViewerPage, + StringUtil +} from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/content-services.page'; import { MetadataViewPage } from '../../pages/adf/metadata-view.page'; import { AcsUserModel } from '../../models/ACS/acs-user.model'; @@ -48,7 +55,7 @@ describe('Metadata component', () => { const acsUser = new AcsUserModel(); - const folderName = 'Metadata Folder'; + const folderName = StringUtil.generateRandomString(); const pngFileModel = new FileModel({ name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name, diff --git a/e2e/pages/adf/content-services.page.ts b/e2e/pages/adf/content-services.page.ts index 5935959171..fe340352d4 100644 --- a/e2e/pages/adf/content-services.page.ts +++ b/e2e/pages/adf/content-services.page.ts @@ -58,10 +58,10 @@ export class ContentServicesPage { errorSnackBar: ElementFinder = element(by.css('simple-snack-bar[class*="mat-simple-snackbar"]')); emptyPagination: ElementFinder = element(by.css('adf-pagination[class*="adf-pagination__empty"]')); dragAndDrop: ElementFinder = element.all(by.css('adf-upload-drag-area div')).first(); - nameHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_name"] > span')); - sizeHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')); - createdByHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')); - createdHeader: ElementFinder = element(by.css('div[data-automation-id="auto_id_createdAt"] > span')); + nameHeader: ElementFinder = element.all(by.css('div[data-automation-id="auto_id_name"] > span')).first(); + sizeHeader: ElementFinder = element.all(by.css('div[data-automation-id="auto_id_content.sizeInBytes"] > span')).first(); + createdByHeader: ElementFinder = element.all(by.css('div[data-automation-id="auto_id_createdByUser.displayName"] > span')).first(); + createdHeader: ElementFinder = element.all(by.css('div[data-automation-id="auto_id_createdAt"] > span')).first(); recentFiles: ElementFinder = element(by.css('.app-container-recent')); recentFilesExpanded: ElementFinder = element(by.css('.app-container-recent mat-expansion-panel-header.mat-expanded')); recentFilesClosed: ElementFinder = element(by.css('.app-container-recent mat-expansion-panel-header')); @@ -87,7 +87,7 @@ export class ContentServicesPage { markedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star')); notMarkedFavorite: ElementFinder = element(by.cssContainingText('button[data-automation-id="favorite"] mat-icon', 'star_border')); multiSelectToggle: ElementFinder = element(by.cssContainingText('span.mat-slide-toggle-content', ' Multiselect (with checkboxes) ')); - selectAllCheckbox: ElementFinder = element(by.css('.adf-checkbox-sr-only')); + selectAllCheckbox: ElementFinder = element.all(by.css('.adf-checkbox-sr-only')).first(); selectionModeDropdown: ElementFinder = element(by.css('.mat-select[aria-label="Selection Mode"]')); selectedNodesList: ElementArrayFinder = element.all(by.css('.app-content-service-settings li')); diff --git a/e2e/process-services-cloud/process-filter-results.e2e.ts b/e2e/process-services-cloud/process-filter-results.e2e.ts index 12b4bc6020..3825a4137c 100644 --- a/e2e/process-services-cloud/process-filter-results.e2e.ts +++ b/e2e/process-services-cloud/process-filter-results.e2e.ts @@ -170,7 +170,6 @@ describe('Process filters cloud', () => { await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp'); await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); - await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); @@ -213,7 +212,6 @@ describe('Process filters cloud', () => { await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); - await browser.driver.sleep(1000); await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().getNumberOfRows()).toBe(1); await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('processInstanceId', anotherProcessInstance.entry.id); @@ -345,7 +343,6 @@ describe('Process filters cloud', () => { await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedFrom', afterDate); await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('lastModifiedTo', afterDate); - await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); }); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index 2266ade171..779d5934c9 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -108,7 +108,9 @@ describe('Process Header cloud component', () => { await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); await processCloudDemoPage.processFilterCloudComponent.clickOnProcessFilters(); await processCloudDemoPage.processFilterCloudComponent.clickRunningProcessesFilter(); + await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe('Running Processes'); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ processName: runningProcess.entry.name }); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcess.entry.name); diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index 8387538dcc..5718aa48d4 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -74,42 +74,55 @@ describe('Task Header cloud component', () => { let identityService: IdentityService; let groupIdentityService: GroupIdentityService; + const createCompletedTask = async function () { + const completedTaskId = await tasksService.createStandaloneTask(completedTaskName, + simpleApp, { priority: priority, description: description, dueDate: basicCreatedTask.entry.createdDate }); + await tasksService.claimTask(completedTaskId.entry.id, simpleApp); + await tasksService.completeTask(completedTaskId.entry.id, simpleApp); + return tasksService.getTask(completedTaskId.entry.id, simpleApp); + }; + + const createSubTask = async function (createdTaskId) { + const subTaskId = await tasksService.createStandaloneSubtask(createdTaskId.entry.id, simpleApp, StringUtil.generateRandomString()); + await tasksService.claimTask(subTaskId.entry.id, simpleApp); + return tasksService.getTask(subTaskId.entry.id, simpleApp); + }; + + const createTask = async function () { + const createdTaskId = await tasksService.createStandaloneTask(basicCreatedTaskName, simpleApp); + await tasksService.claimTask(createdTaskId.entry.id, simpleApp); + basicCreatedTask = await tasksService.getTask(createdTaskId.entry.id, simpleApp); + basicCreatedDate = moment(basicCreatedTask.entry.createdDate).format(formatDate); + return createdTaskId; + }; + beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); tasksService = new TasksService(apiService); - const createdTaskId = await tasksService.createStandaloneTask(basicCreatedTaskName, simpleApp); unclaimedTask = await tasksService.createStandaloneTask(unclaimedTaskName, simpleApp); - await tasksService.claimTask(createdTaskId.entry.id, simpleApp); + const createdTaskId = await createTask(); - basicCreatedTask = await tasksService.getTask(createdTaskId.entry.id, simpleApp); + completedTask = await createCompletedTask(); - basicCreatedDate = moment(basicCreatedTask.entry.createdDate).format(formatDate); - - const completedTaskId = await tasksService.createStandaloneTask(completedTaskName, - simpleApp, { priority: priority, description: description, dueDate: basicCreatedTask.entry.createdDate }); - await tasksService.claimTask(completedTaskId.entry.id, simpleApp); - await tasksService.completeTask(completedTaskId.entry.id, simpleApp); - completedTask = await tasksService.getTask(completedTaskId.entry.id, simpleApp); completedCreatedDate = moment(completedTask.entry.createdDate).format(formatDate); - dueDate = moment(completedTask.entry.createdDate).format(dateTimeFormat); + dueDate = moment(completedTask.entry.dueDate).format(dateTimeFormat); completedEndDate = moment(completedTask.entry.endDate).format(formatDate); defaultDate = moment(completedTask.entry.createdDate).format(defaultFormat); - const subTaskId = await tasksService.createStandaloneSubtask(createdTaskId.entry.id, simpleApp, StringUtil.generateRandomString()); - await tasksService.claimTask(subTaskId.entry.id, simpleApp); - subTask = await tasksService.getTask(subTaskId.entry.id, simpleApp); + subTask = await createSubTask(createdTaskId); subTaskCreatedDate = moment(subTask.entry.createdDate).format(formatDate); + await browser.sleep(3000); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); }); @@ -128,6 +141,7 @@ describe('Task Header cloud component', () => { await tasksCloudDemoPage.taskFilterCloudComponent.clickMyTasksFilter(); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(basicCreatedTaskName); await tasksCloudDemoPage.taskListCloudComponent().selectRow(basicCreatedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(basicCreatedTask.entry.id); await expect(await taskHeaderCloudPage.getDescription()) .toEqual(isValueInvalid(basicCreatedTask.entry.description) ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : basicCreatedTask.entry.description); @@ -147,6 +161,7 @@ describe('Task Header cloud component', () => { await tasksCloudDemoPage.taskFilterCloudComponent.clickCompletedTasksFilter(); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); await tasksCloudDemoPage.taskListCloudComponent().selectRow(completedTaskName); + await expect(await taskHeaderCloudPage.getId()).toEqual(completedTask.entry.id); await expect(await taskHeaderCloudPage.getDescription()) .toEqual(isValueInvalid(completedTask.entry.description) ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : completedTask.entry.description); @@ -166,6 +181,7 @@ describe('Task Header cloud component', () => { await tasksCloudDemoPage.taskFilterCloudComponent.clickMyTasksFilter(); await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(subTask.entry.name); await tasksCloudDemoPage.taskListCloudComponent().selectRow(subTask.entry.name); + await expect(await taskHeaderCloudPage.getId()).toEqual(subTask.entry.id); await expect(await taskHeaderCloudPage.getDescription()) .toEqual(isValueInvalid(subTask.entry.description) ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : subTask.entry.description); @@ -209,11 +225,14 @@ describe('Task Header cloud component', () => { await tasksCloudDemoPage.editTaskFilterCloud.openFilter(); await tasksCloudDemoPage.editTaskFilterCloud.setStatusFilterDropDown('ALL'); await tasksCloudDemoPage.editTaskFilterCloud.clearAssignee(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unclaimedTask.entry.name); await tasksCloudDemoPage.taskListCloudComponent().selectRow(unclaimedTask.entry.name); await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + const currentAssignee = await taskHeaderCloudPage.assigneeCardTextItem.getFieldValue(); await expect(currentAssignee).toBe('No assignee'); + await taskHeaderCloudPage.priorityCardTextItem.checkElementIsReadonly(); await taskHeaderCloudPage.statusCardTextItem.checkElementIsReadonly(); }); diff --git a/e2e/protractor.excludes.json b/e2e/protractor.excludes.json index da6d3a775f..edcf548f38 100644 --- a/e2e/protractor.excludes.json +++ b/e2e/protractor.excludes.json @@ -1,4 +1,6 @@ { - "C260249" : "REPO-4772 ACS 6.2" + "C260249" : "REPO-4772 ACS 6.2", + "C309674" : "https://issues.alfresco.com/jira/browse/ADF-5122", + "C315268" : "https://issues.alfresco.com/jira/browse/ADF-5123" } diff --git a/lib/testing/src/lib/content-services/actions/upload.actions.ts b/lib/testing/src/lib/content-services/actions/upload.actions.ts index 57d03b64ef..9fe94dc810 100644 --- a/lib/testing/src/lib/content-services/actions/upload.actions.ts +++ b/lib/testing/src/lib/content-services/actions/upload.actions.ts @@ -19,6 +19,8 @@ import * as path from 'path'; import * as fs from 'fs'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NodeEntry } from '@alfresco/js-api/src/api/content-rest-api/model/nodeEntry'; +import { ApiUtil } from '../../core/structure/api.util'; +import { Logger } from '../../core/utils/logger'; export class UploadActions { alfrescoJsApi: AlfrescoApi = null; @@ -64,7 +66,15 @@ export class UploadActions { } async deleteFileOrFolder(nodeId) { - return this.alfrescoJsApi.node.deleteNode(nodeId, { permanent: true }); + const apiCall = async () => { + try { + return this.alfrescoJsApi.node.deleteNode(nodeId, { permanent: true }); + } catch (error) { + Logger.error('Error delete file or folder'); + } + }; + + return ApiUtil.waitForApi(apiCall, () => true); } async uploadFolder(sourcePath, folder) { diff --git a/lib/testing/src/lib/core/pages/data-table-component.page.ts b/lib/testing/src/lib/core/pages/data-table-component.page.ts index 6cda7a7da6..39d34899eb 100644 --- a/lib/testing/src/lib/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/core/pages/data-table-component.page.ts @@ -275,6 +275,7 @@ export class DataTableComponentPage { } async waitTillContentLoaded(): Promise { + await browser.driver.sleep(500); await BrowserVisibility.waitUntilElementIsVisible(this.contents.first()); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/date-time-widget.page.ts b/lib/testing/src/lib/core/pages/form/widgets/date-time-widget.page.ts index 53aaf115c7..4b9699495e 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/date-time-widget.page.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/date-time-widget.page.ts @@ -61,7 +61,7 @@ export class DateTimeWidgetPage { } async selectTime(time): Promise { - const selectedTime = element(by.cssContainingText('div[class*="mat-datetimepicker-clock-cell"]', time)); + const selectedTime = element.all(by.cssContainingText('div[class*="mat-datetimepicker-clock-cell"]', time)).first(); await BrowserActions.click(selectedTime); } diff --git a/lib/testing/src/lib/core/utils/browser-actions.ts b/lib/testing/src/lib/core/utils/browser-actions.ts index 2a0ebaf138..9ff2cdc1e5 100644 --- a/lib/testing/src/lib/core/utils/browser-actions.ts +++ b/lib/testing/src/lib/core/utils/browser-actions.ts @@ -27,13 +27,13 @@ export class BrowserActions { await BrowserVisibility.waitUntilElementIsClickable(elementFinder); await elementFinder.click(); } catch (clickErr) { - try { - await browser.executeScript(`arguments[0].scrollIntoView();`, elementFinder); - await browser.executeScript(`arguments[0].click();`, elementFinder); - } catch (jsErr) { - Logger.error(`click error element ${elementFinder.locator()}`); - throw jsErr; - } + try { + await browser.executeScript(`arguments[0].scrollIntoView();`, elementFinder); + await browser.executeScript(`arguments[0].click();`, elementFinder); + } catch (jsErr) { + Logger.error(`click error element ${elementFinder.locator()}`); + throw jsErr; + } } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts index 896f347a6b..ae4d9204b7 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts @@ -68,9 +68,14 @@ export class PeopleCloudComponentPage { return this.assigneeChipList.all(by.css('mat-chip')).first().getText(); } - async checkUserIsDisplayed(name: string): Promise { - const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); - await BrowserVisibility.waitUntilElementIsVisible(assigneeRow); + async checkUserIsDisplayed(name: string): Promise { + try { + const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); + await BrowserVisibility.waitUntilElementIsVisible(assigneeRow); + return true; + } catch { + return false; + } } async checkUserIsNotDisplayed(name: string): Promise { @@ -78,12 +83,12 @@ export class PeopleCloudComponentPage { await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } - async checkOptionIsDisplayed(): Promise { + async checkOptionIsDisplayed(): Promise { const optionList = element(by.css('.adf-people-cloud-list')); await BrowserVisibility.waitUntilElementIsVisible(optionList); } - async checkOptionIsNotDisplayed(): Promise { + async checkOptionIsNotDisplayed(): Promise { const optionList = element(by.css('.adf-people-cloud-list')); await BrowserVisibility.waitUntilElementIsNotVisible(optionList); } @@ -129,7 +134,7 @@ export class PeopleCloudComponentPage { await BrowserActions.click(peopleInput); } - async checkPeopleWidgetIsReadOnly (): Promise { + async checkPeopleWidgetIsReadOnly(): Promise { const readOnlyAttribute = element(by.css('people-cloud-widget .adf-readonly')); try { await BrowserVisibility.waitUntilElementIsVisible(readOnlyAttribute); @@ -139,7 +144,7 @@ export class PeopleCloudComponentPage { } } - async checkPeopleActiveField(name): Promise { + async checkPeopleActiveField(name): Promise { const activePeopleField = element(by.css('people-cloud-widget .adf-readonly')); try { await BrowserActions.clearSendKeys(activePeopleField, name); diff --git a/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts index dd41458b19..21d3872162 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/process-list-cloud-component.page.ts @@ -17,7 +17,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { DataTableComponentPage } from '../../core/pages/data-table-component.page'; -import { element, by, ElementFinder, Locator } from 'protractor'; +import { element, by, ElementFinder, Locator, browser } from 'protractor'; import { BrowserActions } from '../../core/utils/browser-actions'; export class ProcessListCloudComponentPage { @@ -105,6 +105,7 @@ export class ProcessListCloudComponentPage { async clickOptionsButton(content: string): Promise { await BrowserActions.closeMenuAndDialogs(); const row: ElementFinder = this.dataTable.getRow('Id', content); + await browser.sleep(1000); await BrowserActions.click(row.element(this.optionButton)); await BrowserVisibility.waitUntilElementIsVisible(this.actionMenu); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts index 56c3644f76..ccd6eac3e8 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts @@ -84,6 +84,6 @@ export class TaskHeaderCloudPage { } async checkTaskPropertyListIsDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsVisible(this.taskPropertyList); + await BrowserVisibility.waitUntilElementIsVisible(this.taskPropertyList, 90000); } }