Playwright logout test: dialog handler + wait_for_url for async flow

This commit is contained in:
2026-05-05 09:24:59 +02:00
parent e07292ba44
commit a20230187f
11 changed files with 72 additions and 1 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

@@ -0,0 +1,66 @@
{
"tests": [
{
"name": "Login page loads",
"status": "PASS"
},
{
"name": "Login persists JWT",
"status": "PASS",
"url": "https://sport.rinet.one/app",
"token_len": 519
},
{
"name": "Profile section accessible",
"status": "PASS"
},
{
"name": "PGŽ logo clickable",
"status": "PASS",
"href": "/"
},
{
"name": "Logout clears tokens",
"status": "PASS"
},
{
"name": "Mobile login renders",
"status": "PASS",
"viewport": "width=device-width,initial-scale=1"
},
{
"name": "Mobile login → app",
"status": "PASS"
},
{
"name": "Mobile hamburger button",
"status": "PASS",
"visible": true
},
{
"name": "Mobile sidebar opens",
"status": "PASS"
},
{
"name": "Mobile homepage no horizontal scroll",
"status": "PASS",
"body_w": 375,
"viewport": 375
}
],
"screenshots": [
"/opt/pgz-sport/_audit/playwright_20260505_0924/01_login_page.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/02_post_login.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/03_app_dashboard.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/04_profile_view.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/05_post_logout.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/m01_mobile_login.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/m02_mobile_app.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/m03_mobile_sidebar_open.png",
"/opt/pgz-sport/_audit/playwright_20260505_0924/m04_mobile_sport2_homepage.png"
],
"summary": {
"passed": 10,
"failed": 0
}
}
+6 -1
View File
@@ -120,6 +120,8 @@ def test_desktop(pw):
# 5. Logout
try:
# Register confirm() handler — auto-accept
page.on('dialog', lambda d: d.accept())
# Click the logout button (⎋ icon)
# Find a visible logout element across all known selectors
logout_btn = None
@@ -139,7 +141,10 @@ def test_desktop(pw):
}""")
if res:
print(f' [debug] logout invoked via JS: {res}')
time.sleep(2)
# Wait for async logout (POST /auth/logout + clear + redirect)
try: page.wait_for_url('**/login**', timeout=10000)
except: pass
time.sleep(1)
logout_btn = 'js' # sentinel
if logout_btn is not None:
if hasattr(logout_btn, 'click'):