File size: 2,370 Bytes
60b6623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4f2f855
60b6623
 
 
 
bbce707
 
60b6623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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)