Spaces:
Running
Running
| from __future__ import annotations | |
| import asyncio | |
| from time import time | |
| from playwright.async_api import async_playwright | |
| async def main() -> None: | |
| async with async_playwright() as playwright: | |
| browser = await playwright.chromium.launch() | |
| page = await browser.new_page() | |
| messages: list[str] = [] | |
| page.on("pageerror", lambda error: messages.append(f"PAGEERROR: {error}")) | |
| page.on( | |
| "console", | |
| lambda message: messages.append(f"CONSOLE {message.type}: {message.text}") if message.type == "error" else None, | |
| ) | |
| suffix = str(int(time())) | |
| note_title = f"Progress Note Follow-up {suffix}" | |
| order_name = f"Normal saline bolus {suffix}" | |
| await page.goto("http://127.0.0.1:3000/patient/pat-1001", wait_until="networkidle") | |
| print("loaded", page.url) | |
| await page.get_by_test_id("chart-tab-labs").click() | |
| print("labs_tab_active", await page.get_by_test_id("chart-tab-labs").get_attribute("aria-selected")) | |
| await page.get_by_test_id("chart-tab-notes").click() | |
| print("chart_notes_tab_active", await page.get_by_test_id("chart-tab-notes").get_attribute("aria-selected")) | |
| await page.get_by_test_id("activity-orders").click() | |
| await page.wait_for_timeout(150) | |
| print("hash_after_orders_nav", await page.evaluate("window.location.hash")) | |
| await page.get_by_label("Note author").fill("Dr. Test User") | |
| await page.get_by_label("Note title").fill(note_title) | |
| await page.get_by_label("Progress note content").fill( | |
| "S: feels better\nO: creatinine trend reviewed\nA: volume depletion with AKI\nP: repeat BMP and volume assessment" | |
| ) | |
| await page.get_by_test_id("save-note-button").click() | |
| await page.locator("article.note-row", has_text=note_title).last.wait_for(timeout=5000) | |
| print("has_new_note", await page.locator("article.note-row", has_text=note_title).count()) | |
| await page.get_by_label("Order name").fill(order_name) | |
| await page.get_by_label("Order category").select_option("MED") | |
| await page.get_by_label("Order parameters").fill("1 L IV once") | |
| await page.get_by_label("Order rationale").fill("Volume repletion for AKI") | |
| await page.get_by_label("Submit order for signature").check() | |
| await page.get_by_test_id("save-order-button").click() | |
| await page.locator("article.order-row", has_text=order_name).first.wait_for(timeout=5000) | |
| print("has_new_order", await page.locator("article.order-row", has_text=order_name).count()) | |
| new_order_row = page.locator("article.order-row", has_text=order_name).first | |
| sign_buttons = new_order_row.locator('[data-testid^="sign-order-"]') | |
| print("sign_buttons", await sign_buttons.count()) | |
| if await sign_buttons.count() > 0: | |
| await sign_buttons.first.click() | |
| await new_order_row.get_by_text("SIGNED").wait_for(timeout=5000) | |
| print("signed_clicked", True) | |
| await page.get_by_test_id("sign-encounter-button").click() | |
| await page.locator('[data-testid="patient-banner"] .status-pill').get_by_text("SIGNED").wait_for(timeout=5000) | |
| print("encounter_status", await page.locator('[data-testid="patient-banner"] .status-pill').inner_text()) | |
| if messages: | |
| for message in messages: | |
| print(message) | |
| await browser.close() | |
| if __name__ == "__main__": | |
| asyncio.run(main()) | |