From d89b6e32b5a67dea44f9047abdd380a6067154a2 Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Tue, 21 Apr 2026 12:17:15 +0530 Subject: [PATCH 1/3] Add method to locate Import Content dialog and refactor related code --- tests/e2e-test/pages/HomePageV2.py | 41 +++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/tests/e2e-test/pages/HomePageV2.py b/tests/e2e-test/pages/HomePageV2.py index 9fb3ff5d..646ce8cf 100644 --- a/tests/e2e-test/pages/HomePageV2.py +++ b/tests/e2e-test/pages/HomePageV2.py @@ -156,6 +156,20 @@ def get_testdata_files(self): logger.info(f"Found {len(files)} files in testdata folder: {[os.path.basename(f) for f in files]}") return files + def _get_import_dialog(self): + """ + Locate the Import Content dialog using both 'dialog' and 'alertdialog' roles. + Fluent UI v9 with modalType='modal' renders as role='dialog', while older + versions or modalType='alert' use 'alertdialog'. + """ + dialog = self.page.get_by_role("dialog", name="Import Content") + if dialog.count() > 0: + return dialog.first + alertdialog = self.page.get_by_role("alertdialog", name="Import Content") + if alertdialog.count() > 0: + return alertdialog.first + raise Exception("Import Content dialog not found with role 'dialog' or 'alertdialog'") + def select_schema_for_file(self, file_name, schema_name): """ Select a schema from the dropdown for a specific file in the import dialog. @@ -166,13 +180,14 @@ def select_schema_for_file(self, file_name, schema_name): """ logger.info(f"Selecting schema '{schema_name}' for file '{file_name}'...") + dialog = self._get_import_dialog() + # Get all schema comboboxes and file labels in the import dialog - schema_dropdowns = self.page.get_by_role( - "alertdialog", name="Import Content" - ).get_by_placeholder("Select Schema") - file_labels = self.page.get_by_role( - "alertdialog", name="Import Content" - ).locator("strong") + schema_dropdowns = dialog.get_by_placeholder("Select Schema") + file_labels = dialog.locator("strong") + + # Wait for file labels to appear (React state update may be async) + file_labels.first.wait_for(state="visible", timeout=10000) # Find the index of this file among all listed files count = file_labels.count() @@ -184,6 +199,8 @@ def select_schema_for_file(self, file_name, schema_name): break if target_index == -1: + dialog_text = dialog.inner_text() + logger.error(f"File '{file_name}' not found. Dialog content:\n{dialog_text[:500]}") raise Exception(f"File '{file_name}' not found in import dialog") # Click on the schema dropdown for this file @@ -249,7 +266,7 @@ def upload_files(self): logger.info("Validating upload success...") expect( - self.page.get_by_role("alertdialog", name="Import Content") + self._get_import_dialog() .locator("path") .nth(1) ).to_be_visible() @@ -818,7 +835,7 @@ def validate_import_without_collection(self): validation_msg = self.page.locator( "//div[contains(text(),'Please Select') or contains(text(),'Please select')]" ) - dialog = self.page.get_by_role("alertdialog") + dialog = self.page.get_by_role("dialog").or_(self.page.get_by_role("alertdialog")) if validation_msg.count() > 0 and validation_msg.first.is_visible(): logger.info("✓ Validation message is visible") @@ -864,7 +881,7 @@ def validate_schema_selection_warning(self): # Validate the selected collection info message logger.info("Validating 'Selected Collection: Auto Claim' message...") - dialog = self.page.get_by_role("alertdialog", name="Import Content") + dialog = self._get_import_dialog() expect(dialog).to_be_visible() logger.info("✓ Import Content dialog is visible") @@ -935,7 +952,7 @@ def validate_unsupported_file_upload(self): logger.info("✓ Unsupported file error message is visible") else: # Check if Import button remains disabled - dialog = self.page.get_by_role("alertdialog", name="Import Content") + dialog = self._get_import_dialog() import_btn = dialog.locator("//button[normalize-space()='Import']") expect(import_btn).to_be_disabled() logger.info("✓ Import button remains disabled for unsupported file") @@ -1060,7 +1077,7 @@ def open_import_dialog_with_files(self): self.page.wait_for_timeout(5000) - dialog = self.page.get_by_role("alertdialog", name="Import Content") + dialog = self._get_import_dialog() logger.info("Import dialog opened with files ready for schema selection") return dialog @@ -1158,7 +1175,7 @@ def upload_files_with_mismatched_schemas(self): logger.info("Validating upload success (system accepts mismatched schemas)...") expect( - self.page.get_by_role("alertdialog", name="Import Content") + self._get_import_dialog() .locator("path") .nth(1) ).to_be_visible() From 1ffa4abde3c0497ce783370ad5753cdd3c4e4a66 Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Tue, 21 Apr 2026 12:20:17 +0530 Subject: [PATCH 2/3] Remove unnecessary wait for file labels in HomePageV2 --- tests/e2e-test/pages/HomePageV2.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/e2e-test/pages/HomePageV2.py b/tests/e2e-test/pages/HomePageV2.py index 646ce8cf..4a8f89d2 100644 --- a/tests/e2e-test/pages/HomePageV2.py +++ b/tests/e2e-test/pages/HomePageV2.py @@ -186,9 +186,6 @@ def select_schema_for_file(self, file_name, schema_name): schema_dropdowns = dialog.get_by_placeholder("Select Schema") file_labels = dialog.locator("strong") - # Wait for file labels to appear (React state update may be async) - file_labels.first.wait_for(state="visible", timeout=10000) - # Find the index of this file among all listed files count = file_labels.count() target_index = -1 From ecdac44eb47994fd7aa145946011fdda72185387 Mon Sep 17 00:00:00 2001 From: Pavan-Microsoft Date: Tue, 21 Apr 2026 12:49:30 +0530 Subject: [PATCH 3/3] Refactor Import Content dialog handling to improve visibility checks and error reporting --- tests/e2e-test/pages/HomePageV2.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/e2e-test/pages/HomePageV2.py b/tests/e2e-test/pages/HomePageV2.py index 4a8f89d2..0ba46d63 100644 --- a/tests/e2e-test/pages/HomePageV2.py +++ b/tests/e2e-test/pages/HomePageV2.py @@ -163,12 +163,17 @@ def _get_import_dialog(self): versions or modalType='alert' use 'alertdialog'. """ dialog = self.page.get_by_role("dialog", name="Import Content") - if dialog.count() > 0: - return dialog.first alertdialog = self.page.get_by_role("alertdialog", name="Import Content") - if alertdialog.count() > 0: - return alertdialog.first - raise Exception("Import Content dialog not found with role 'dialog' or 'alertdialog'") + import_dialog = dialog.or_(alertdialog).first + + try: + expect(import_dialog).to_be_visible(timeout=5000) + except Exception as exc: + raise Exception( + "Import Content dialog not found with role 'dialog' or 'alertdialog'" + ) from exc + + return import_dialog def select_schema_for_file(self, file_name, schema_name): """ @@ -832,7 +837,9 @@ def validate_import_without_collection(self): validation_msg = self.page.locator( "//div[contains(text(),'Please Select') or contains(text(),'Please select')]" ) - dialog = self.page.get_by_role("dialog").or_(self.page.get_by_role("alertdialog")) + dialog = self.page.get_by_role("dialog", name="Import Content").or_( + self.page.get_by_role("alertdialog", name="Import Content") + ) if validation_msg.count() > 0 and validation_msg.first.is_visible(): logger.info("✓ Validation message is visible")