issues/286/user_tool.py (75 lines of code) (raw):

import sys, os base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, base_path) import pytest from playwright.async_api import Page, async_playwright, expect from utils.trace_cleaner import trace_cleaner USER_NAME = "xecuycismfsga+42204" USER_EMAIL = f"{USER_NAME}@gmail.com" PASSWORD = "" def get_magic_code( user_email: str, password: str, current_timestamp: int, retries=5, delay=3 ): return "123456" async def login(page: Page, user_email: str, password: str): now = 20241211 await page.get_by_test_id("username").fill(user_email) await page.get_by_role("button", name="Continue").click() await page.wait_for_timeout(3000) # keeps getting old otp magic_code = get_magic_code(user_email, password, now, retries=3, delay=3) await page.get_by_role("textbox").fill(magic_code) await page.get_by_label("Inbox").wait_for(state="visible") async def close_button_if_present(page: Page): """ Occasionally, there is a close button that prevents any clicks on the page as it covers most of the screen. This button cannot be seen visually. """ close_button = page.locator('button[aria-label="Close"]') if await close_button.is_visible(): await close_button.click() async def leave_group_chat(page: Page): if await page.get_by_text(USER_NAME).first.is_visible(): await page.get_by_text(USER_NAME).first.click() await page.locator( f'div[data-testid="DisplayNamesWithTooltip"]:has-text("{USER_NAME}")' ).last.click() await page.get_by_label("Leave").click() await page.get_by_label("Back").first.click() @pytest.mark.asyncio # ensure you have pytest-asyncio installed async def test_leave_group_chat(): async with async_playwright() as p: browser = await p.chromium.launch(headless=True, slow_mo=500, args=[ '--disable-web-security', '--disable-features=IsolateOrigins,site-per-process', ]) context = await browser.new_context() await context.tracing.start(screenshots=True, snapshots=True, sources=True) page = await context.new_page() try: await page.goto("https://dev.new.expensify.com:8082/") await login(page, USER_EMAIL, PASSWORD) await leave_group_chat(page) await close_button_if_present(page) await page.get_by_label("Start chat (Floating action)").click() await page.get_by_label("Start chat", exact=True).click() await page.get_by_test_id("selection-list-text-input").fill( f"{USER_NAME}_0@gmail.com" ) await page.get_by_role("button", name="Add to group").click() await page.get_by_role("button", name="Next").click() await page.get_by_role("button", name="Start group").click() await page.get_by_role("textbox").fill("Hello World") await page.get_by_role("button", name="Send").click() await page.locator( f'div[data-testid="DisplayNamesWithTooltip"]:has-text("{USER_NAME}_0@gmail.com")' ).last.click() await page.get_by_label("Members").click() await page.get_by_label(f"{USER_NAME}_0@gmail.com").last.click() await page.get_by_role("button", name="selected").click() await page.get_by_label("Remove members").click() await page.get_by_role("button", name="Remove").click() await page.get_by_test_id("ReportParticipantsPage").get_by_label("Back").click() await page.get_by_label("Leave").click() await expect(page.get_by_role("button", name="Leave")).to_be_visible() await page.get_by_role("button", name="Leave").click() finally: await context.tracing.stop(path="/app/expensify/user_tool/output_browser1.zip") trace_cleaner("/app/expensify/user_tool/output_browser1.zip") await context.close() await browser.close()