Spaces:
Running
Running
| from .base_page import BasePage | |
| from playwright.sync_api import expect | |
| class UploadPage(BasePage): | |
| """Page object for the upload page""" | |
| # Selectors using data-testid for stability | |
| DROP_ZONE = "[data-testid='drop-zone']" | |
| FILE_INPUT = "[data-testid='file-input']" | |
| UPLOAD_BUTTON = "[data-testid='upload-button']" | |
| GENERATE_BUTTON = "[data-testid='generate-button']" | |
| FILE_PREVIEW = "[data-testid='file-preview']" | |
| LOADING_SPINNER = "[data-testid='loading-spinner']" | |
| SUCCESS_MESSAGE = "[data-testid='success-message']" | |
| ERROR_MESSAGE = "[data-testid='error-message']" | |
| def __init__(self, page): | |
| super().__init__(page) | |
| self.page_url = "/upload" | |
| def navigate(self): | |
| """Navigate to upload page""" | |
| self.navigate_to(self.page_url) | |
| # For now, just verify the page loads without checking specific elements | |
| # since we don't have the actual UI with data-testid attributes | |
| def upload_file(self, file_path: str): | |
| """Upload a file using drag and drop or file input""" | |
| # Try drag and drop first, fallback to file input | |
| try: | |
| self.page.drag_and_drop(f"input[type='file']", self.DROP_ZONE) | |
| self.page.set_input_files(self.FILE_INPUT, file_path) | |
| except: | |
| # Fallback to direct file input | |
| self.page.set_input_files(self.FILE_INPUT, file_path) | |
| # Wait for file preview | |
| self.expect_element_visible(self.FILE_PREVIEW) | |
| def click_generate(self): | |
| """Click the generate button to start analysis""" | |
| self.click_element(self.GENERATE_BUTTON) | |
| self.expect_element_visible(self.LOADING_SPINNER) | |
| def wait_for_generation_complete(self): | |
| """Wait for generation to complete""" | |
| self.expect_element_not_visible(self.LOADING_SPINNER) | |
| self.expect_element_visible(self.SUCCESS_MESSAGE) | |
| def expect_success_message(self): | |
| """Expect success message to be visible""" | |
| self.expect_element_visible(self.SUCCESS_MESSAGE) | |
| def expect_error_message(self): | |
| """Expect error message to be visible""" | |
| self.expect_element_visible(self.ERROR_MESSAGE) | |
| def get_uploaded_file_name(self) -> str: | |
| """Get the name of the uploaded file""" | |
| return self.get_text(self.FILE_PREVIEW) | |