Skip to content

Commit 07da1fd

Browse files
download restructure
1 parent de38875 commit 07da1fd

File tree

2 files changed

+28
-55
lines changed

2 files changed

+28
-55
lines changed

mavis/test/pages/header_component.py

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import re
2+
13
from playwright.sync_api import Page
24

35
from mavis.test.annotations import step
@@ -32,36 +34,14 @@ def __init__(self, page: Page) -> None:
3234
self.your_team_link = menu.get_by_role("link", name="Your Team", exact=True)
3335

3436
def ensure_menu_visible(self) -> None:
35-
"""Expand mobile menu if needed (e.g., 'Browse More' button)."""
36-
# Look for "Browse More" button
37-
# (has newline between words on mobile)
38-
try:
39-
# Find button containing both Browse and More
40-
buttons = self.page.get_by_role("button")
41-
for i in range(buttons.count()):
42-
try:
43-
btn_text = buttons.nth(i).inner_text(timeout=100)
44-
# Check if button contains both Browse and More
45-
if "browse" in btn_text.lower() and "more" in btn_text.lower():
46-
button = buttons.nth(i)
47-
if button.is_visible(timeout=100):
48-
# Check if button is expanded already
49-
aria_expanded = button.get_attribute("aria-expanded")
50-
if aria_expanded != "true":
51-
button.click()
52-
# Wait for the menu to become visible
53-
self.page.wait_for_selector(
54-
'[aria-label="Menu"] [role="link"]',
55-
state="visible",
56-
timeout=2000,
57-
)
58-
return
59-
except (TimeoutError, Exception): # noqa: BLE001, S112
60-
# Playwright may raise TimeoutError or generic Error if element is
61-
# detached or not interactable
62-
continue # Button check failed, try next
63-
except (TimeoutError, Exception): # noqa: BLE001, S110
64-
pass # Browse More button not found or menu already expanded
37+
browse_button = self.page.get_by_role(
38+
"button", name=re.compile(r"browse\s*more", re.IGNORECASE)
39+
)
40+
if (
41+
browse_button.count() > 0
42+
and browse_button.get_attribute("aria-expanded") != "true"
43+
):
44+
browse_button.click()
6545

6646
@step("Click on Manage vaccinations in schools")
6747
def click_mavis(self) -> None:

mavis/test/pages/reports/vaccination_report_page.py

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,35 +39,28 @@ def _download_and_verify_report_headers(self, expected_headers: str) -> None:
3939
getattr(browser, "browser_type", None), "name", None
4040
)
4141

42-
# Playwright's webkit browser may open CSVs in the browser
43-
# unlike Chromium and Firefox, but behavior varies by environment
44-
if browser_type_name == "webkit":
45-
# WebKit behavior varies: may download file, open in new page,
46-
# or open in current page. Try download first (macOS CI behavior)
47-
try:
48-
with self.page.expect_download(timeout=5000) as download_info:
49-
self.click_download_report()
50-
download = download_info.value
51-
download.save_as(_file_path)
52-
_actual_df = pd.read_csv(_file_path)
53-
except PlaywrightTimeoutError:
54-
# No download - CSV opened in browser (new page or current page)
55-
new_page = self.page.context.pages[-1]
56-
if new_page != self.page:
57-
new_page.wait_for_load_state("load", timeout=10000)
58-
csv_content = new_page.locator("pre").inner_text(timeout=5000)
59-
new_page.close()
60-
else:
61-
self.page.wait_for_load_state("load", timeout=10000)
62-
csv_content = self.page.locator("pre").inner_text(timeout=10000)
63-
self.page.go_back()
64-
_actual_df = pd.read_csv(StringIO(csv_content))
65-
else:
66-
with self.page.expect_download() as download_info:
42+
# Try to download the file (set shorter timeout for WebKit)
43+
download_timeout = 5000 if browser_type_name == "webkit" else None
44+
page_load_timeout = 10000 if browser_type_name == "webkit" else None
45+
try:
46+
with self.page.expect_download(timeout=download_timeout) as download_info:
6747
self.click_download_report()
6848
download = download_info.value
6949
download.save_as(_file_path)
7050
_actual_df = pd.read_csv(_file_path)
51+
except PlaywrightTimeoutError:
52+
# WebKit may open CSV in browser - read from <pre> element
53+
pages = self.page.context.pages
54+
page_to_read = pages[-1] if len(pages) > 1 else self.page
55+
page_to_read.wait_for_load_state("load", timeout=page_load_timeout)
56+
csv_content = page_to_read.locator("pre").inner_text()
57+
_actual_df = pd.read_csv(StringIO(csv_content))
58+
59+
# Clean up: close new page or go back on current page
60+
if page_to_read != self.page:
61+
page_to_read.close()
62+
else:
63+
self.page.go_back()
7164

7265
expected_set = set(expected_headers.split(","))
7366
actual_set = set(_actual_df.columns)

0 commit comments

Comments
 (0)