Promptaid-VIsion / e2e /pages /upload_page.py
SCGR's picture
e2e
bbce707
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)