""" The eCW application shell: left navigation panel and the route spinner. Three facts from the live DOM shape every locator built on these, and all three cost a debugging session to find: * `#JellyBeanCountCntrl` renders **twice**, so `SEL_NAV_TOGGLE` matches two elements and Playwright's strict mode errors out without `.first`. * the toggle's handler `launchLeftPanel()` is a **toggle**, not an "open" — clicking it on an already-open panel closes it. State first, click second. * the panel's contents are injected by `getleftnavhtml()` on `DOMContentLoaded`, so `SEL_MENU_BILLING` does not exist at the moment login is confirmed. Wait for it; do not assume it. """ SEL_NAV_TOGGLE = "#jellybean-panelLink4" # launchLeftPanel() flips the `visible` class on .response-nav-lp (#leftnavApp). SEL_NAV_PANEL = "#leftnavApp" SEL_NAV_OPEN = "#leftnavApp.visible" SEL_MENU_BILLING = "#Billing_menu > a" SEL_MENU_BILLING_OPEN = "li#Billing_menu.open" # Click the LABEL span, not the anchor: the anchor also holds #favorite_16, # whose own ng-click stars the menu item instead of navigating. SEL_CLAIMS = "#CLAIMS_BILLING" SEL_CLAIMS_LABEL = "#CLAIMS_BILLING span.padl10" # What that item's ng-click openURL() actually does. Kept here because it is # also the fallback route when the menu markup shifts. CLAIMS_HASH = "#/mobiledoc/jsp/webemr/webpm/claimLookup.jsp" # Angular's route spinner — hidden once the requested view has rendered. SEL_ROUTE_LOADER = "#routeLoader"