issues/44/user_tool.py (53 lines of code) (raw):
from playwright.sync_api import sync_playwright
from utils.trace_cleaner import trace_cleaner
user_email = "testuserexpensify1@gmail.com"
password = "aedyeaocujbrrcal"
user_id = "testuserexpensify1+155@gmail.com"
def login(p, if_phone=False, first_name="John", last_name="Doe"):
# step 1: Login
permissions = ['clipboard-read']
browser = p.chromium.launch(headless=False, slow_mo=1000, args=["--disable-web-security", "--disable-features=IsolateOrigins,site-per-process"])
if if_phone:
phone = p.devices['Pixel 7']
context = browser.new_context(**phone, permissions=permissions, reduced_motion='no-preference')
else:
context = browser.new_context()
page = context.new_page()
page.goto('https://dev.new.expensify.com:8082/')
phone_or_email_input = page.locator('input[type="email"]')
phone_or_email_input.fill(user_id)
continue_button = page.locator('button[tabindex="0"]')
continue_button.click()
magic_code = "123456"
validate_code_input = page.locator('input[name="validateCode"]')
validate_code_input.fill(magic_code)
return browser, page
def close_modal(page):
"""Attempts to close a modal if it exists."""
try:
page.locator('button[aria-label="Close"]').click(timeout=3000)
except Exception:
pass # Modal might not be present, safely ignore the exception
def test_53918():
with sync_playwright() as p:
browser, page = login(p, False)
# Capture the context from the page for tracing
context = page.context
# Start tracing
context.tracing.start(screenshots=True, snapshots=True, sources=True)
try:
close_modal(page)
close_modal(page)
page.get_by_test_id("CustomBottomTabNavigator").locator('button[aria-label="My settings"]').click()
close_modal(page)
page.get_by_test_id("CustomBottomTabNavigator").locator('div[aria-label="Subscription"]').click()
page.get_by_test_id("SubscriptionSettingsPage").locator('div[dir="auto"]', has_text="Add payment card").click()
page.get_by_test_id("AddPaymentCard").locator('div[aria-label="Zip / Postcode"] input[role="presentation"]').fill("2@,:;")
page.keyboard.press("Enter")
zip_container = page.get_by_test_id("AddPaymentCard").locator('div[aria-label="Zip / Postcode"]')
parent_element = zip_container.locator("..")
error_icon = parent_element.locator('svg[fill="#F25730"]')
# Assert that at least one error icon exists within the parent
assert error_icon.count() > 0, "Error message is not displayed when entering characters that cannot be in a zip code"
finally:
trace_path = "/app/expensify/user_tool/output_browser1.zip"
context.tracing.stop(path=trace_path)
trace_cleaner(trace_path)
browser.close()
if __name__ == "__main__":
test_53918()