Files
ragflow/test/playwright/auth/test_validation_presence.py
Idriss Sbaaoui 860c4bd0bb Feat: UI testing automation with playwright (#12749)
### What problem does this PR solve?

This PR helps automate the testing of the ui interface using pytest
Playwright

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
- [x] Other (please describe): test automation infrastructure

---------

Co-authored-by: Liu An <asiro@qq.com>
2026-03-02 13:04:08 +08:00

76 lines
2.3 KiB
Python

import pytest
from playwright.sync_api import expect
from test.playwright.helpers.auth_selectors import EMAIL_INPUT, SUBMIT_BUTTON
from test.playwright.helpers.flow_steps import flow_params, require
def step_01_open_login(
flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click
):
page = flow_page
with step("open login page"):
page.goto(login_url, wait_until="domcontentloaded")
flow_state["login_opened"] = True
snap("open")
def step_02_submit_empty(
flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click
):
require(flow_state, "login_opened")
form, _ = active_auth_context()
expect(form.locator(EMAIL_INPUT)).to_have_count(1)
with step("submit empty login form"):
submit_button = form.locator(SUBMIT_BUTTON)
expect(submit_button).to_have_count(1)
auth_click(submit_button, "submit_validation")
flow_state["submitted_empty"] = True
snap("submitted_empty")
def step_03_assert_validation(
flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click
):
require(flow_state, "login_opened", "submitted_empty")
form, _ = active_auth_context()
invalid_inputs = form.locator("input[aria-invalid='true']")
error_messages = form.locator("p[id$='-form-item-message']")
try:
expect(invalid_inputs).not_to_have_count(0, timeout=2000)
snap("validation_visible")
return
except AssertionError:
pass
try:
expect(error_messages).not_to_have_count(0, timeout=1000)
snap("validation_visible")
return
except AssertionError:
pass
raise AssertionError(
"No validation feedback detected after submitting an empty login form. "
"Expected aria-invalid inputs or visible error containers. "
"See artifacts for DOM evidence."
)
STEPS = [
("01_open_login", step_01_open_login),
("02_submit_empty", step_02_submit_empty),
("03_assert_validation", step_03_assert_validation),
]
@pytest.mark.p1
@pytest.mark.auth
@pytest.mark.parametrize("step_fn", flow_params(STEPS))
def test_validation_presence_flow(
step_fn, flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click
):
step_fn(flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click)