mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-09-08 10:14:35 +08:00
Fix : make playwright tests idempotent (#13332)
### What problem does this PR solve? Playwright tests previously depended on cross-file execution order (`auth -> provider -> dataset -> chat`). This change makes setup explicit and idempotent via fixtures so tests can run independently. - Added/standardized prerequisite fixtures in `test/playwright/conftest.py`: - `ensure_auth_context`, `ensure_model_provider_configured`, `ensure_dataset_ready`, `ensure_chat_ready` - Made provisioning reusable/idempotent with `RUN_ID`-based resource naming. - Synced auth envs (`E2E_ADMIN_EMAIL`, `E2E_ADMIN_PASSWORD`) into seeded creds. - Fixed provider cache freshness (`auth_header`/`page` refresh on cache hit). Also included minimal stability fixes: - dataset create stale-element click handling, - search wait logic for results/empty-state, - agent create-menu handling, - agent run-step retry when run UI doesn’t open first click. ### Type of change - [x] Test fix - [x] Refactoring --------- Co-authored-by: Liu An <asiro@qq.com>
This commit is contained in:
@@ -30,8 +30,10 @@ def ensure_authed(
|
||||
if seeded_user_credentials:
|
||||
email, password = seeded_user_credentials
|
||||
else:
|
||||
email = os.getenv("SEEDED_USER_EMAIL")
|
||||
password = os.getenv("SEEDED_USER_PASSWORD")
|
||||
email = os.getenv("SEEDED_USER_EMAIL") or os.getenv("E2E_ADMIN_EMAIL")
|
||||
password = os.getenv("SEEDED_USER_PASSWORD") or os.getenv(
|
||||
"E2E_ADMIN_PASSWORD"
|
||||
)
|
||||
if not email or not password:
|
||||
pytest.skip("SEEDED_USER_EMAIL/SEEDED_USER_PASSWORD not set.")
|
||||
|
||||
@@ -45,22 +47,16 @@ def ensure_authed(
|
||||
|
||||
try:
|
||||
if "/login" not in page.url:
|
||||
if (
|
||||
page.locator(
|
||||
"input[data-testid='auth-email'], [data-testid='auth-email'] input"
|
||||
).count()
|
||||
== 0
|
||||
):
|
||||
try:
|
||||
page.wait_for_function(token_wait_js, timeout=2000)
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
page.wait_for_function(token_wait_js, timeout=2000)
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
page.goto(login_url, wait_until="domcontentloaded")
|
||||
|
||||
if "/login" not in page.url:
|
||||
return
|
||||
|
||||
form, _ = active_auth_context()
|
||||
email_input = form.locator(
|
||||
"input[data-testid='auth-email'], [data-testid='auth-email'] input"
|
||||
|
||||
Reference in New Issue
Block a user