From 1218c0fb64150ebe7161e06096f3685426aeec99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=9Awiderski?= Date: Fri, 20 Feb 2026 15:06:37 +0100 Subject: [PATCH] [ACS-11051] getChild usage refactored (#5056) * [ACS-11051] getChild usage refactored * [ACS-11051] sonar fix 1 * [ACS-11051] test fixes 1 * [ACS-11051] test fixes 2 * [ACS-11051] review fixes 1 * [ACS-11051] review fixes 2 --- .../src/tests/edit-offline.e2e.ts | 2 +- .../src/tests/create-rules.e2e.ts | 30 +++++++------- .../src/tests/transform-rules.e2e.ts | 2 +- .../navigation/src/tests/sidebar.e2e.ts | 18 ++++---- .../navigation/src/tests/single-click.e2e.ts | 2 +- .../tests/search-filters-categories.e2e.ts | 2 +- .../src/tests/search-filters-general.e2e.ts | 16 ++++---- .../src/tests/search-filters-logic.e2e.ts | 14 +++---- .../src/tests/upload.e2e.ts | 6 +-- .../components/adf-info-drawer.component.ts | 12 +++--- .../dataTable/data-table.component.ts | 15 ++----- .../components/dataTable/index.ts | 1 - .../datetime-picker.component.ts | 2 +- .../create-from-template-dialog-component.ts | 4 +- .../dialogs/edit-dialog.component.ts | 2 +- .../manage-versions-dialog.component.ts | 2 +- .../dialogs/upload-dialog.component.ts | 8 ++-- .../src/page-objects/components/index.ts | 11 +---- .../components/manageRules/index.ts | 1 + .../manage-rules-toolbar.component.ts} | 10 ++--- .../page-objects/components/search/index.ts | 30 ++++++++++++++ .../search/search-filters.component.ts | 24 +++++------ .../components/search/search-filters/index.ts | 30 ++++++++++++++ .../search-filters-location.component.ts | 2 +- .../search-filters-properties.component.ts | 2 +- .../search-filters-tags.component.ts | 4 +- .../search/search-menu-card.component.ts | 41 +++++++++++++++++++ .../components/sidenav.component.ts | 8 ++-- .../src/page-objects/pages/nodes.page.ts | 4 +- .../src/page-objects/pages/search.page.ts | 4 +- 30 files changed, 198 insertions(+), 111 deletions(-) rename projects/aca-playwright-shared/src/page-objects/components/{dataTable/toolbar.component.ts => manageRules/manage-rules-toolbar.component.ts} (79%) create mode 100644 projects/aca-playwright-shared/src/page-objects/components/search/index.ts create mode 100644 projects/aca-playwright-shared/src/page-objects/components/search/search-filters/index.ts create mode 100644 projects/aca-playwright-shared/src/page-objects/components/search/search-menu-card.component.ts diff --git a/e2e/playwright/edit-actions/src/tests/edit-offline.e2e.ts b/e2e/playwright/edit-actions/src/tests/edit-offline.e2e.ts index 8ff6d995f..f223a0bf7 100644 --- a/e2e/playwright/edit-actions/src/tests/edit-offline.e2e.ts +++ b/e2e/playwright/edit-actions/src/tests/edit-offline.e2e.ts @@ -80,7 +80,7 @@ test.describe('Edit offline - on Personal Files', () => { expect(download.suggestedFilename()).toBe(file1); }); - test('XAT-5305] Lock information is displayed', async ({ personalFiles }) => { + test('[XAT-5305] Lock information is displayed', async ({ personalFiles }) => { expect(await personalFiles.dataTable.isItemPresent(fileLocked2)).toBe(true); expect(await personalFiles.dataTable.getLockOwner(fileLocked2)).toContain(username); }); diff --git a/e2e/playwright/folder-rules/src/tests/create-rules.e2e.ts b/e2e/playwright/folder-rules/src/tests/create-rules.e2e.ts index 93aebdcc3..9aca1a07c 100644 --- a/e2e/playwright/folder-rules/src/tests/create-rules.e2e.ts +++ b/e2e/playwright/folder-rules/src/tests/create-rules.e2e.ts @@ -72,7 +72,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-883] Create a rule with symbols in its name and description', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(testString); await nodesPage.manageRulesDialog.ruleDescriptionInputLocator.fill(testString); @@ -84,13 +84,13 @@ test.describe('Folder Rules Actions', () => { test('[XAT-884] Create a rule and link it to an existing folder', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.IncrementCounter, 0); await nodesPage.manageRulesDialog.createRuleButton.click(); await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName2Id}/rules` }); - await nodesPage.toolbar.clickLinkRulesButton(); + await nodesPage.rulesToolbar.clickLinkRulesButton(); await nodesPage.linkRulesDialog.waitForLinkRules(); await nodesPage.linkRulesDialog.getFolderIcon.click(); await nodesPage.linkRulesDialog.getOptionLocator(username).click(); @@ -102,7 +102,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-885] Create a rule in a folder and inherit it in a subfolder (Rule applies to subfolders)', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.IncrementCounter, 0); await nodesPage.manageRulesDialog.ruleSubfoldersCheckbox.click(); @@ -114,7 +114,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-886] Create a rule and press cancel', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await expect(nodesPage.manageRulesDialog.createRuleButton).toBeDisabled(); await nodesPage.manageRulesDialog.cancelRuleButton.click(); expect(nodesPage.manageRules.checkIfRuleListEmpty()).toBeTruthy(); @@ -122,7 +122,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-887] Create a disabled rule', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.IncrementCounter, 0); await nodesPage.manageRulesDialog.ruleDisableCheckbox.click(); @@ -137,7 +137,7 @@ test.describe('Folder Rules Actions', () => { const simpleWorkFlow = 'accept reject'; await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.IncrementCounter, 0); @@ -157,7 +157,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-889] Create a rule which runs when items are deleted or leave a folder', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.manageRulesDialog.whenCreatedCheckbox.click(); await nodesPage.manageRulesDialog.whenDeletedCheckbox.click(); @@ -182,7 +182,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-890] Create a rule which adds multiple aspects when its ran', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.AddAspect, 0); await nodesPage.actionsDropdown.insertAddAspectActionValues('Classifiable', 0); @@ -206,7 +206,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-891] Prevent rule creation after clicking on cancel during selecting destination folder', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.AddAspect, 0); await nodesPage.actionsDropdown.insertAddAspectActionValues('Classifiable', 0); @@ -219,7 +219,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-892] Prevent rule creation when missing any required field for action', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.AddAspect, 0); await nodesPage.actionsDropdown.insertAddAspectActionValues('Classifiable', 0); @@ -230,7 +230,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-893] Removing values from required fields should restore disabled state for Create button', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.AddAspect, 0); await nodesPage.actionsDropdown.insertAddAspectActionValues('Classifiable', 0); @@ -241,7 +241,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-894] Create rule with filled required fields and empty optional fields', async ({ nodesPage, personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.actionsDropdown.selectAction(ActionType.AddAspect, 0); await nodesPage.actionsDropdown.insertAddAspectActionValues('Classifiable', 0); @@ -255,7 +255,7 @@ test.describe('Folder Rules Actions', () => { nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.conditionsDropdown.addCondition(Field.Size, specialChars, 0, Comparator.Equals); await nodesPage.conditionsDropdown.addCondition(Field.Name, specialChars, 1, Comparator.Equals); @@ -270,7 +270,7 @@ test.describe('Folder Rules Actions', () => { test('[XAT-896] Create a rule with multiple groups utilising all available comparators and conditions', async ({ personalFiles, nodesPage }) => { await personalFiles.navigate({ remoteUrl: `#/nodes/${randomFolderName1Id}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(randomRuleName); await nodesPage.conditionsDropdown.addConditionGroup(Field.Size, specialChars, 0, Comparator.Equals); await nodesPage.conditionsDropdown.addConditionGroup(Field.Name, specialChars, 1, Comparator.Equals); diff --git a/e2e/playwright/folder-rules/src/tests/transform-rules.e2e.ts b/e2e/playwright/folder-rules/src/tests/transform-rules.e2e.ts index 7723ff4a9..71f5d70cb 100644 --- a/e2e/playwright/folder-rules/src/tests/transform-rules.e2e.ts +++ b/e2e/playwright/folder-rules/src/tests/transform-rules.e2e.ts @@ -60,7 +60,7 @@ async function setupTransformationTest( await nodesApi.createFolder(destinationFolderName); await personalFiles.navigate({ remoteUrl: `#/nodes/${parentFolderId}/rules` }); - await nodesPage.toolbar.clickCreateRuleButton(); + await nodesPage.rulesToolbar.clickCreateRuleButton(); await nodesPage.manageRulesDialog.ruleNameInputLocator.fill(testString); await nodesPage.manageRulesDialog.ruleDescriptionInputLocator.fill(testString); await nodesPage.actionsDropdown.selectAction(ActionType.TransformAndCopyContent, 0); diff --git a/e2e/playwright/navigation/src/tests/sidebar.e2e.ts b/e2e/playwright/navigation/src/tests/sidebar.e2e.ts index 30e2ecbde..584bc94aa 100644 --- a/e2e/playwright/navigation/src/tests/sidebar.e2e.ts +++ b/e2e/playwright/navigation/src/tests/sidebar.e2e.ts @@ -48,30 +48,30 @@ test.describe('Sidebar', () => { test('[XAT-5387] The sidenav can be expanded when search results page is displayed', async ({ personalFiles }) => { await personalFiles.navigate({ remoteUrl: `#/search;q=test` }); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar expanded').toBe(false); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar expanded').toBeHidden(); await personalFiles.sidenav.expandSideNav(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar not expanded').toBe(true); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar not expanded').toBeVisible(); }); test('[XAT-5384] Sidenav state is preserved on page refresh', async ({ personalFiles }) => { await personalFiles.navigate(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar not expanded').toBe(true); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar not expanded').toBeVisible(); await personalFiles.reload(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar not expanded').toBe(true); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar not expanded').toBeVisible(); await personalFiles.sidenav.collapseSideNav(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar expanded').toBe(false); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar expanded').toBeHidden(); await personalFiles.reload(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar expanded').toBe(false); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar expanded').toBeHidden(); }); test('[XAT-5382] Sidenav can be collapsed and expanded', async ({ personalFiles }) => { await personalFiles.navigate(); await personalFiles.sidenav.collapseSideNav(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar expanded').toBe(false); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar expanded').toBeHidden(); await personalFiles.sidenav.expandSideNav(); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar not expanded').toBe(true); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar not expanded').toBeVisible(); }); test('[XAT-5386] The sidenav returns to the default state when navigating away from the search results page', async ({ @@ -81,6 +81,6 @@ test.describe('Sidebar', () => { await personalFiles.navigate({ remoteUrl: `#/search;q=test` }); await searchPage.searchInput.searchCloseButton.click(); await searchPage.sidenav.expandedSidenav.waitFor({ state: 'attached' }); - expect(await personalFiles.sidenav.isSidenavExpanded(), 'Sidebar not expanded').toBe(true); + await expect(personalFiles.sidenav.expandedSidenav, 'Sidebar not expanded').toBeVisible(); }); }); diff --git a/e2e/playwright/navigation/src/tests/single-click.e2e.ts b/e2e/playwright/navigation/src/tests/single-click.e2e.ts index fb9d66043..05b9e1ea0 100644 --- a/e2e/playwright/navigation/src/tests/single-click.e2e.ts +++ b/e2e/playwright/navigation/src/tests/single-click.e2e.ts @@ -71,7 +71,7 @@ test.describe('Single click on item name', () => { test('[XAT-4897] Navigate inside the folder when clicking the hyperlink - on Personal Files', async ({ personalFiles }) => { await personalFiles.navigate(); - await personalFiles.dataTable.setPaginationTo50(); + await personalFiles.dataTable.goThroughPagesLookingForRowWithName(folder1); await personalFiles.dataTable.getCellLinkByName(folder1).click(); await personalFiles.dataTable.spinnerWaitForReload(); while ((await personalFiles.breadcrumb.currentItem.innerText()) === 'Personal Files') { diff --git a/e2e/playwright/search/src/tests/search-filters-categories.e2e.ts b/e2e/playwright/search/src/tests/search-filters-categories.e2e.ts index 14f290b96..6028157c1 100644 --- a/e2e/playwright/search/src/tests/search-filters-categories.e2e.ts +++ b/e2e/playwright/search/src/tests/search-filters-categories.e2e.ts @@ -76,7 +76,7 @@ test.describe('Search - Filters - Categories', () => { await searchPage.searchFilters.categoriesFilter.click(); await searchPage.searchFiltersCategories.addOptionInput.fill(newSubcategories[0].name); await searchPage.searchFilters.dropdownOptions.first().click(); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await expect(searchPage.dataTable.getRowByName(fileNamePdf)).toBeHidden(); await expect(searchPage.dataTable.getRowByName(fileNameJpg)).toBeVisible(); diff --git a/e2e/playwright/search/src/tests/search-filters-general.e2e.ts b/e2e/playwright/search/src/tests/search-filters-general.e2e.ts index 187460fd8..fd96c52bb 100644 --- a/e2e/playwright/search/src/tests/search-filters-general.e2e.ts +++ b/e2e/playwright/search/src/tests/search-filters-general.e2e.ts @@ -46,10 +46,10 @@ test.describe('Search - Filters - General', () => { test('[XAT-5575] Search Filters Menu cards have proper titles', async ({ searchPage }) => { async function checkMenuCardTitle(page: SearchPage, filterLocator: Locator, expectText: string): Promise { await filterLocator.click(); - await expect(page.searchFilters.menuCardTitle).toContainText(expectText); - await page.searchFilters.menuCardClose.click(); - await page.searchFilters.menuCardClose.waitFor({ state: 'hidden' }); - await expect(page.searchFilters.menuCardClose).toBeHidden(); + await expect(page.searchMenuCard.menuCardTitle).toContainText(expectText); + await page.searchMenuCard.menuCardClose.click(); + await page.searchMenuCard.menuCardClose.waitFor({ state: 'hidden' }); + await expect(page.searchMenuCard.menuCardClose).toBeHidden(); } const testCases = [ @@ -88,12 +88,12 @@ test.describe('Search - Filters - General', () => { const filterTextBefore = await searchPage.searchFilters.propertiesFilter.textContent(); await searchPage.searchFilters.propertiesFilter.click(); await searchPage.searchFiltersProperties.fileSizeInput.fill('1000'); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); const filterTextAfter = await searchPage.searchFilters.propertiesFilter.textContent(); await searchPage.searchFilters.propertiesFilter.click(); - await searchPage.searchFilters.menuCardClear.click(); + await searchPage.searchMenuCard.menuCardClear.click(); await searchPage.searchFiltersProperties.fileSizeInput.waitFor({ state: 'hidden' }); const filterTextCleared = await searchPage.searchFilters.propertiesFilter.textContent(); @@ -105,14 +105,14 @@ test.describe('Search - Filters - General', () => { const propertiesFilterTextBefore = await searchPage.searchFilters.propertiesFilter.textContent(); await searchPage.searchFilters.propertiesFilter.click(); await searchPage.searchFiltersProperties.fileSizeInput.fill('1000'); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); const propertiesFilterTextAfter = await searchPage.searchFilters.propertiesFilter.textContent(); const logicFilterTextBefore = await searchPage.searchFilters.logicFilter.textContent(); await searchPage.searchFilters.logicFilter.click(); await searchPage.searchFiltersLogic.matchAllInput.fill('test'); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); const logicFilterTextAfter = await searchPage.searchFilters.logicFilter.textContent(); diff --git a/e2e/playwright/search/src/tests/search-filters-logic.e2e.ts b/e2e/playwright/search/src/tests/search-filters-logic.e2e.ts index 5261cdfc6..0e35ada81 100644 --- a/e2e/playwright/search/src/tests/search-filters-logic.e2e.ts +++ b/e2e/playwright/search/src/tests/search-filters-logic.e2e.ts @@ -80,7 +80,7 @@ test.describe('Search - Filters - Logic', () => { await searchPage.searchFiltersLogic.matchAllInput.fill( `${logicFile1NameSplit[0]} ${logicFile1NameSplit[1]} ${logicFile1TitleSplit[1]} ${logicFile1DescriptionSplit[1]}` ); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); await expect(searchPage.dataTable.getRowByName(logicFile1.name)).toBeVisible(); @@ -92,7 +92,7 @@ test.describe('Search - Filters - Logic', () => { await searchPage.searchFiltersLogic.matchAnyInput.fill( `${logicFile1NameSplit[2]}-${logicFile1NameSplit[3]} ${logicFile1TitleSplit[0]} ${logicFile1DescriptionSplit[0]}` ); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(2); @@ -106,7 +106,7 @@ test.describe('Search - Filters - Logic', () => { `${logicFile1NameSplit[0]}-${logicFile1NameSplit[1]} ${logicFile1TitleSplit[0]} ${logicFile1DescriptionSplit[0]}` ); await searchPage.searchFiltersLogic.excludeInput.fill(`${logicFile1DescriptionSplit[1]}`); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(1); @@ -117,7 +117,7 @@ test.describe('Search - Filters - Logic', () => { test('[XAT-5587] should able to filter search result with logic filter with Exact Phrase', async ({ searchPage }) => { await searchPage.searchFilters.logicFilter.click(); await searchPage.searchFiltersLogic.matchExactInput.fill(logicFile1.name); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(1); @@ -126,7 +126,7 @@ test.describe('Search - Filters - Logic', () => { await searchPage.searchFilters.logicFilter.click(); await searchPage.searchFiltersLogic.matchExactInput.fill(logicFile1.title); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(1); @@ -135,7 +135,7 @@ test.describe('Search - Filters - Logic', () => { await searchPage.searchFilters.logicFilter.click(); await searchPage.searchFiltersLogic.matchExactInput.fill(logicFile1.description); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(1); @@ -151,7 +151,7 @@ test.describe('Search - Filters - Logic', () => { await searchPage.searchFiltersLogic.matchAnyInput.fill(`${logicFile1NameSplit[0]} ${logicFile1TitleSplit[2]}`); await searchPage.searchFiltersLogic.excludeInput.fill(`${logicFile1NameSplit[3]}`); await searchPage.searchFiltersLogic.matchExactInput.fill(`${logicFile2NameSplit[1]}-${logicFile2NameSplit[2]}-${logicFile2NameSplit[3]}`); - await searchPage.searchFilters.menuCardApply.click(); + await searchPage.searchMenuCard.menuCardApply.click(); await searchPage.dataTable.progressBarWaitForReload(); expect(await searchPage.dataTable.getRowsCount()).toBe(1); diff --git a/e2e/playwright/upload-download-actions/src/tests/upload.e2e.ts b/e2e/playwright/upload-download-actions/src/tests/upload.e2e.ts index d39c1cb0a..6bf9055bf 100644 --- a/e2e/playwright/upload-download-actions/src/tests/upload.e2e.ts +++ b/e2e/playwright/upload-download-actions/src/tests/upload.e2e.ts @@ -66,14 +66,14 @@ test.describe('Upload files', () => { test('[XAT-17778] The upload dialog can be closed', async ({ personalFiles }) => { await expect(personalFiles.uploadDialog.closeButton, 'Close button was not visible').toBeVisible(); await personalFiles.uploadDialog.closeButton.click(); - await expect(personalFiles.uploadDialog.uploadDialog, 'Upload Dialog was visible').toBeHidden(); + await expect(personalFiles.uploadDialog.uploadDialogContent, 'Upload Dialog was visible').toBeHidden(); }); test('[XAT-17779] The upload dialog can be minimized and maximized', async ({ personalFiles }) => { await personalFiles.uploadDialog.minimizeButton.click(); await expect(personalFiles.uploadDialog.uploadDialogMinimized, 'Upload Dialog was not minimized').toBeVisible(); await personalFiles.uploadDialog.minimizeButton.click(); - await expect(personalFiles.uploadDialog.uploadDialog, 'Upload Dialog was not maximized').toBeVisible(); + await expect(personalFiles.uploadDialog.uploadDialogContent, 'Upload Dialog was not maximized').toBeVisible(); }); test('[XAT-5278] Upload history is expunged on browser refresh / close tab / close browser / log out', async ({ personalFiles, loginPage }) => { @@ -88,6 +88,6 @@ test.describe('Upload files', () => { myLibrariesPage }) => { await myLibrariesPage.navigate(); - await expect(personalFiles.uploadDialog.uploadDialog, 'Upload Dialog was not visible').toBeVisible(); + await expect(personalFiles.uploadDialog.uploadDialogContent, 'Upload Dialog was not visible').toBeVisible(); }); }); diff --git a/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts b/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts index d8a1ff58b..8b8ec3d04 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts @@ -44,15 +44,15 @@ export class AdfInfoDrawerComponent extends BaseComponent { public propertiesTab = this.page.getByRole('tab', { name: 'Properties' }); public commentsTab = this.page.getByRole('tab', { name: 'Comments' }); public infoDrawerTabs = this.getChild('.adf-info-drawer-tab'); - public commentInputField = this.page.locator('#comment-input'); + public commentInputField = this.getChild('#comment-input'); public commentsHeader = this.getChild('#comment-header'); public addCommentButton = this.getChild('[data-automation-id="comments-input-add"]'); public commentsList = this.getChild('.adf-comment-list-item'); public commentUsername = this.getChild('.adf-comment-user-name'); public commentTextContent = this.getChild('.adf-comment-message'); public commentTimestamp = this.getChild('.adf-comment-message-time'); - public infoDrawerPanel = this.page.locator('.adf-info-drawer'); - public headerTitle = this.page.locator('.adf-info-drawer-layout-header-title').getByRole('heading'); + public infoDrawerPanel = this.page.locator(AdfInfoDrawerComponent.rootElement); + public headerTitle = this.getChild('.adf-info-drawer-layout-header-title').getByRole('heading'); public editButton = this.page.getByRole('button', { name: 'Edit' }); public cancelButton = this.page.getByRole('button', { name: 'Cancel' }); public updateButton = this.page.getByRole('button', { name: 'Update' }); @@ -62,9 +62,9 @@ export class AdfInfoDrawerComponent extends BaseComponent { public expandDetailsButton = this.getChild(`button[title='Expand panel']`); public expandedDetailsTabs = this.page.locator('.aca-details-container [role="tab"]'); public expandedDetailsPermissionsTab = this.expandedDetailsTabs.getByText('Permissions'); - public nameField = this.page.locator('input[placeholder=Name]'); - public idField = this.page.locator(`input[placeholder='Library ID']`); - public descriptionField = this.page.locator('textarea[placeholder=Description]'); + public nameField = this.getChild('input[placeholder=Name]'); + public idField = this.getChild(`input[placeholder='Library ID']`); + public descriptionField = this.getChild('textarea[placeholder=Description]'); public visibilityField = this.infoDrawerPanel.getByRole('combobox'); public selectVisibility = (visibilityOption: string) => this.page.getByRole('listbox').getByRole('option', { name: visibilityOption }).click(); public tagsAccordion = this.getChild('[data-automation-id="adf-content-metadata-tags-panel"]'); diff --git a/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts index 48e9c29ae..995b32b90 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts @@ -50,12 +50,10 @@ export class DataTableComponent extends BaseComponent { emptyListSubtitle = this.getChild('.adf-empty-content__subtitle'); emptySearchText = this.getChild('.empty-search__text'); emptyListTest = this.getChild('adf-custom-empty-content-template'); - paginationButton = this.page.locator('.adf-pagination__block button').nth(0); - paginationOptions = this.page.locator('#cdk-overlay-0 button'); - sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Visibility"]'); - sitesName = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Name"]'); - sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="My Role"]'); - lockOwner = this.page.locator('.aca-locked-by--name'); + sitesVisibility = this.getChild('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Visibility"]'); + sitesName = this.getChild('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Name"]'); + sitesRole = this.getChild('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="My Role"]'); + lockOwner = '.aca-locked-by--name'; highlightedText = '.aca-highlight'; searchFileName = '.search-file-name'; searchFileDescription = '[data-automation-id="search-results-entry-description"]'; @@ -310,11 +308,6 @@ export class DataTableComponent extends BaseComponent { await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' }); } - async setPaginationTo50(): Promise { - await this.paginationButton.click(); - await this.paginationOptions.getByText('50').click(); - } - /** * Method used to create objects from names and visibility of sites from datatable * diff --git a/projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts b/projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts index 0d7d40433..459a4e174 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts @@ -24,4 +24,3 @@ export * from './data-table.component'; export * from './mat-menu.component'; -export * from './toolbar.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts b/projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts index 69fb465a9..62be62e26 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts @@ -35,7 +35,7 @@ export class DateTimePicker extends BaseComponent { } async isCalendarOpen(): Promise { - const element = this.getChild(''); + const element = this.page.locator(DateTimePicker.rootElement); return element.isVisible(); } diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts index 161120075..bc97b9d43 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts @@ -35,8 +35,8 @@ export class CreateFromTemplateDialogComponent extends BaseComponent { cancelButton = this.getChild('[data-automation-id="create-from-template-dialog-cancel-button"]'); createButton = this.getChild('[data-automation-id="create-from-template-dialog-create-button"]'); - getDialogTitle = (text: string) => this.getChild('[data-automation-id="create-from-template-title"]', { hasText: text }); - getDialogLabel = (text: string) => this.getChild('label', { hasText: text }); + getDialogTitle = (text: string): Locator => this.getChild('[data-automation-id="create-from-template-title"]', { hasText: text }); + getDialogLabel = (text: string): Locator => this.getChild('label', { hasText: text }); getErrorByText = (text: string): Locator => this.page.locator('[data-automation-id="create-from-template-field-error"]', { hasText: text }); async isErrorMessageDisplayed(errorText: string): Promise { diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts index 3bd29dcea..2670691a0 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts @@ -28,7 +28,7 @@ import { BaseComponent } from '../base.component'; export class EditDialog extends BaseComponent { private static rootElement = 'adf-folder-dialog'; - public editDialog = this.getChild(''); + public editDialog = this.page.locator(EditDialog.rootElement); public titleInput = this.getChild('[data-automation-id="adf-folder-dialog-title"]'); public cancelButton = this.getChild('#adf-folder-cancel-button'); public updateButton = this.getChild('#adf-folder-create-button'); diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts index 3ef258c30..6271b8317 100755 --- a/projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts @@ -29,7 +29,7 @@ export class ManageVersionsDialog extends BaseComponent { private static rootElement = '.adf-new-version-uploader-dialog'; async viewFileVersion(version: string): Promise { - const versionActionsButton = this.page.locator(`[id="adf-version-list-action-menu-button-${version}"]`); + const versionActionsButton = this.getChild(`[id="adf-version-list-action-menu-button-${version}"]`); await versionActionsButton.click(); } diff --git a/projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts b/projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts index a880de61c..9c5cf58ca 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts @@ -26,12 +26,12 @@ import { Page } from '@playwright/test'; import { BaseComponent } from '../base.component'; export class UploadDialog extends BaseComponent { - private static rootElement = '.adf-upload-dialog'; + private static rootElement = 'aca-upload-files-dialog'; - public uploadDialog = this.page.locator('.adf-upload-dialog'); + public uploadDialogContent = this.getChild('.adf-upload-dialog__content'); public closeButton = this.getChild('#adf-upload-dialog-close'); - public minimizeButton = this.page.locator('[data-automation-id="adf-upload-dialog__toggle-minimize"]'); - public uploadDialogMinimized = this.page.locator('.adf-upload-dialog--minimized'); + public minimizeButton = this.getChild('[data-automation-id="adf-upload-dialog__toggle-minimize"]'); + public uploadDialogMinimized = this.getChild('.adf-upload-dialog--minimized'); constructor(page: Page) { super(page, UploadDialog.rootElement); diff --git a/projects/aca-playwright-shared/src/page-objects/components/index.ts b/projects/aca-playwright-shared/src/page-objects/components/index.ts index 5db1e0a10..b8c4543f7 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/index.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/index.ts @@ -33,16 +33,7 @@ export * from './conditions.component'; export * from './pagination.component'; export * from './adf-info-drawer.component'; export * from './viewer.component'; -export * from './search/search-input.component'; -export * from './search/search-overlay.components'; -export * from './search/search-sorting-picker.components'; -export * from './search/search-filters.component'; -export * from './search/search-filters/search-filters-categories.component'; -export * from './search/search-filters/search-filters-date.component'; -export * from './search/search-filters/search-filters-location.component'; -export * from './search/search-filters/search-filters-logic.component'; -export * from './search/search-filters/search-filters-properties.component'; -export * from './search/search-filters/search-filters-tags.component'; +export * from './search'; export * from './breadcrumb/breadcrumb.component'; export * from './sidenav.component'; export * from './aca-header.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts b/projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts index a1d9ac4bf..d6b9b2cc9 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts @@ -24,3 +24,4 @@ export * from './manage-rules-dialog.component'; export * from './manage-rules.component'; +export * from './manage-rules-toolbar.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/dataTable/toolbar.component.ts b/projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules-toolbar.component.ts similarity index 79% rename from projects/aca-playwright-shared/src/page-objects/components/dataTable/toolbar.component.ts rename to projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules-toolbar.component.ts index b71141e90..9e1ec99b8 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/dataTable/toolbar.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules-toolbar.component.ts @@ -25,20 +25,20 @@ import { BaseComponent } from '../base.component'; import { Page } from '@playwright/test'; -export class ToolbarComponent extends BaseComponent { - private static rootElement = 'adf-toolbar'; +export class RulesToolbarComponent extends BaseComponent { + private static readonly rootElement = '.aca-manage-rules__actions-bar'; constructor(page: Page) { - super(page, ToolbarComponent.rootElement); + super(page, RulesToolbarComponent.rootElement); } async clickCreateRuleButton(): Promise { - const button = this.page.locator('[data-automation-id="manage-rules-create-button"]'); + const button = this.getChild('[data-automation-id="manage-rules-create-button"]'); await button.click(); } async clickLinkRulesButton(): Promise { - const button = this.page.locator('[data-automation-id="manage-rules-link-button"]'); + const button = this.getChild('[data-automation-id="manage-rules-link-button"]'); await button.click(); } } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/index.ts b/projects/aca-playwright-shared/src/page-objects/components/search/index.ts new file mode 100644 index 000000000..3b6091902 --- /dev/null +++ b/projects/aca-playwright-shared/src/page-objects/components/search/index.ts @@ -0,0 +1,30 @@ +/*! + * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Alfresco Example Content Application + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * from Hyland Software. If not, see . + */ + +export * from './search-filters'; +export * from './search-filters.component'; +export * from './search-input.component'; +export * from './search-menu-card.component'; +export * from './search-overlay.components'; +export * from './search-sorting-picker.components'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts index 653d7c994..2b0b8c569 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts @@ -32,17 +32,17 @@ export class SearchFilters extends BaseComponent { super(page, SearchFilters.rootElement); } - public filtersButtons = this.page.locator('adf-search-widget-chip'); - public logicFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Logic' }); - public propertiesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Properties' }); - public dateFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Date' }); - public locationFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Location' }); - public tagsFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Tags' }); - public categoriesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Categories' }); - public resetButton = this.page.locator('button', { hasText: 'Reset' }); - public menuCardTitle = this.page.locator('.adf-search-filter-title'); - public menuCardClose = this.page.locator('.adf-search-filter-title-action'); - public menuCardClear = this.page.locator('#cancel-filter-button'); - public menuCardApply = this.page.locator('#apply-filter-button'); + public filtersButtons = this.getChild('adf-search-widget-chip'); + public logicFilter = this.getChild('adf-search-widget-chip', { hasText: 'Logic' }); + public propertiesFilter = this.getChild('adf-search-widget-chip', { hasText: 'Properties' }); + public dateFilter = this.getChild('adf-search-widget-chip', { hasText: 'Date' }); + public locationFilter = this.getChild('adf-search-widget-chip', { hasText: 'Location' }); + public tagsFilter = this.getChild('adf-search-widget-chip', { hasText: 'Tags' }); + public categoriesFilter = this.getChild('adf-search-widget-chip', { hasText: 'Categories' }); + public resetButton = this.getChild('button', { hasText: 'Reset' }); + public menuCardTitle = this.getChild('.adf-search-filter-title'); + public menuCardClose = this.getChild('.adf-search-filter-title-action'); + public menuCardClear = this.getChild('#cancel-filter-button'); + public menuCardApply = this.getChild('#apply-filter-button'); public dropdownOptions = this.page.locator(`[role="option"]`); } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/index.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/index.ts new file mode 100644 index 000000000..ea172dee6 --- /dev/null +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/index.ts @@ -0,0 +1,30 @@ +/*! + * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Alfresco Example Content Application + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * from Hyland Software. If not, see . + */ + +export * from './search-filters-categories.component'; +export * from './search-filters-date.component'; +export * from './search-filters-location.component'; +export * from './search-filters-logic.component'; +export * from './search-filters-properties.component'; +export * from './search-filters-tags.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts index 763f29420..84d156caf 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts @@ -43,7 +43,7 @@ export class SearchFiltersLocation extends BaseComponent { await page.searchFilters.locationFilter.click(); await page.searchFiltersLocation.addOptionInput.fill(location); await page.searchFiltersLocation.searchOption(location).click(); - await page.searchFilters.menuCardApply.click(); + await page.searchMenuCard.menuCardApply.click(); await page.dataTable.progressBarWaitForReload(); } } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts index b5dff2f2a..f49baa092 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts @@ -94,7 +94,7 @@ export class SearchFiltersProperties extends BaseComponent { await this.dropdownOptions.getByText(fileTypeInputText).click(); } - await page.searchFilters.menuCardApply.click(); + await page.searchMenuCard.menuCardApply.click(); await page.dataTable.progressBarWaitForReload(); } } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts index 8f44ef435..ca3e43c3b 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts @@ -43,13 +43,13 @@ export class SearchFiltersTags extends BaseComponent { await page.searchFilters.tagsFilter.click(); await page.searchFiltersTags.addOptionInput.fill(tag); await this.searchOption(tag).click(); - await page.searchFilters.menuCardApply.click(); + await page.searchMenuCard.menuCardApply.click(); await page.dataTable.progressBarWaitForReload(); } async clearTagFilter(page: SearchPage): Promise { await page.searchFilters.tagsFilter.click(); - await page.searchFilters.menuCardClear.click(); + await page.searchMenuCard.menuCardClear.click(); await page.dataTable.progressBarWaitForReload(); } } diff --git a/projects/aca-playwright-shared/src/page-objects/components/search/search-menu-card.component.ts b/projects/aca-playwright-shared/src/page-objects/components/search/search-menu-card.component.ts new file mode 100644 index 000000000..9b0d609ff --- /dev/null +++ b/projects/aca-playwright-shared/src/page-objects/components/search/search-menu-card.component.ts @@ -0,0 +1,41 @@ +/*! + * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Alfresco Example Content Application + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * from Hyland Software. If not, see . + */ + +import { BaseComponent } from '../base.component'; +import { Page } from '@playwright/test'; + +export class SearchMenuCard extends BaseComponent { + private static readonly rootElement = '.adf-search-filter-menu-card'; + + public resetButton = this.getChild('button', { hasText: 'Reset' }); + public menuCardTitle = this.getChild('.adf-search-filter-title'); + public menuCardClose = this.getChild('.adf-search-filter-title-action'); + public menuCardClear = this.getChild('#cancel-filter-button'); + public menuCardApply = this.getChild('#apply-filter-button'); + public dropdownOptions = this.page.locator(`[role="option"]`); + + constructor(page: Page) { + super(page, SearchMenuCard.rootElement); + } +} diff --git a/projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts b/projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts index 1b5d05b01..fb41dae82 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts @@ -27,7 +27,7 @@ import { BaseComponent } from './base.component'; import { Locator, Page } from '@playwright/test'; export class SidenavComponent extends BaseComponent { - private static rootElement = 'app-sidenav'; + private static rootElement = '.adf-layout-container-sidenav'; private personalFiles = this.getChild(`[data-automation-id='app.navbar.personalFiles']`); private myLibraries = this.getChild(`[data-automation-id='app.navbar.libraries.files']`); @@ -37,8 +37,8 @@ export class SidenavComponent extends BaseComponent { private favorites = this.getChild(`[data-automation-id='app.navbar.favorites']`); private trash = this.getChild(`[data-automation-id='app.navbar.trashcan']`); private sidenavToggle = this.getChild(`.aca-sidenav-header-title-logo`); - private sidenavExpand = this.page.getByTitle('Expand navigation menu'); - public expandedSidenav = this.page.locator(`[data-automation-id='expanded']`); + private sidenavExpand = this.page.locator(`[title='Expand navigation menu']`); + public expandedSidenav = this.getChild(`[data-automation-id='expanded']`); constructor(page: Page) { super(page, SidenavComponent.rootElement); @@ -74,7 +74,7 @@ export class SidenavComponent extends BaseComponent { } } - async isSidenavExpanded(): Promise { + private async isSidenavExpanded(): Promise { await this.page.waitForTimeout(timeouts.tiny); return this.expandedSidenav.isVisible(); } diff --git a/projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts index f5bd3c463..fd2591d51 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts @@ -27,7 +27,7 @@ import { ConditionComponent, ManageRules, ManageRulesDialogComponent, - ToolbarComponent, + RulesToolbarComponent, ActionsDropdownComponent, ContentNodeSelectorDialog, LinkRulesDialog @@ -41,7 +41,7 @@ export class NodesPage extends BasePage { super(page, NodesPage.pageUrl); } - public toolbar = new ToolbarComponent(this.page); + public rulesToolbar = new RulesToolbarComponent(this.page); public manageRulesDialog = new ManageRulesDialogComponent(this.page); public actionsDropdown = new ActionsDropdownComponent(this.page); public conditionsDropdown = new ConditionComponent(this.page); diff --git a/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts index 93f935ec9..c1511845b 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/search.page.ts @@ -39,7 +39,8 @@ import { SearchFiltersLocation, SearchFiltersLogic, SearchFiltersProperties, - FolderInformationDialogComponent + FolderInformationDialogComponent, + SearchMenuCard } from '../components'; import { AcaHeader } from '../components/aca-header.component'; import { AdfConfirmDialogComponent, AdfFolderDialogComponent, UploadNewVersionDialog, ManageVersionsDialog } from '../components/dialogs'; @@ -73,6 +74,7 @@ export class SearchPage extends BasePage { public uploadNewVersionDialog = new UploadNewVersionDialog(this.page); public manageVersionsDialog = new ManageVersionsDialog(this.page); public folderInformationDialog = new FolderInformationDialogComponent(this.page); + public searchMenuCard = new SearchMenuCard(this.page); async searchWithin(searchText: string, searchType?: SearchType): Promise { await this.acaHeader.searchButton.click();