*** Settings *** Resource ${CURDIR}/../resources/common.resource Resource ${CURDIR}/../resources/auth.resource *** Test Cases *** Login Page Loads Without Error [Documentation] Login must run before Login As Admin — use New Page to avoid session cookie. ... Vite SPA always returns 200; focus on DOM assertions after client-side routing. New Browser chromium headless=${TRUE} New Page Go To ${FRONTEND_URL}/login Wait For Elements State css=form visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Setup Page Loads Without Error [Documentation] Setup wizard accessible before auth; may redirect to /login if already done. New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/setup Wait For Elements State css=form,button visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Dashboard Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/ Wait For Elements State css=main visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Map Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/map Wait For Elements State css=canvas,svg,.map-container visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Jails Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/jails Wait For Elements State css=main,table,.jails-list visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Jail Detail Page Loads Without Error [Documentation] Guard: check jail exists via GET /api/jails first; use first jail name. New Browser chromium headless=${TRUE} Login As Admin # Guard: find an active jail before navigating to /jails/:name ${response}= GET ${BACKEND_URL}/api/jails ${jails}= Set Variable ${response.json()} ${count}= Get Length ${jails} IF ${count} > 0 ${first_jail}= Get From List ${jails} 0 ${jail_name}= Set Variable ${first_jail}[name] Log Using jail: ${jail_name} ELSE ${jail_name}= Set Variable manual-Jail Log No jails found; using fallback name: ${jail_name} END Go To ${FRONTEND_URL}/jails/${jail_name} Wait For Elements State css=main,h1,h2,.jail-detail visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Config Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/config Wait For Elements State css=main,.tabs,.config-editor visible timeout=15s Get Text css=body not contains Something went wrong Close Browser History Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/history Wait For Elements State css=main,table,.history-table visible timeout=15s Get Text css=body not contains Something went wrong Close Browser Blocklists Page Loads Without Error New Browser chromium headless=${TRUE} Login As Admin Go To ${FRONTEND_URL}/blocklists Wait For Elements State css=main,.blocklists-panel,.panel visible timeout=15s Get Text css=body not contains Something went wrong Close Browser