From 5e65162bd86f11a58ee323caebb902cdb1196920 Mon Sep 17 00:00:00 2001 From: Ryan Melton Date: Wed, 23 Sep 2026 12:09:52 -0600 Subject: [PATCH] Fill the password inputs inside the Vuetify wrappers in auth setup Login.vue puts data-test=new-password and data-test=confirm-password on v-text-field, which Vuetify renders as a wrapper div around the real input. Playwright refuses to fill a div, so sign-in failed before any plugin was installed and every plugin using the reusable workflow failed its Playwright job. Target the input inside each wrapper instead. Co-Authored-By: Claude Opus 5.5 (1M context) --- playwright-plugin/tests/auth.setup.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/playwright-plugin/tests/auth.setup.ts b/playwright-plugin/tests/auth.setup.ts index aa90809..6de9f21 100644 --- a/playwright-plugin/tests/auth.setup.ts +++ b/playwright-plugin/tests/auth.setup.ts @@ -15,6 +15,10 @@ // password field carries data-test=new-password either way, so key off whether // the confirm field is present rather than off the labels, which change text // between the two states. +// +// The data-test attributes sit on the v-text-field, which Vuetify renders as a +// wrapper div around the real . Playwright can only fill the input, so +// fill() has to reach inside the wrapper. import { test as setup, expect, Page } from '@playwright/test' import { STORAGE_STATE } from '../playwright.config' @@ -68,11 +72,11 @@ setup('sign in', async ({ page }) => { await expect(page.locator('[data-test=new-password]')).toBeVisible({ timeout: 60 * 1000, }) - await page.locator('[data-test=new-password]').fill(PASSWORD) + await page.locator('[data-test=new-password] input').fill(PASSWORD) if (await page.locator('[data-test=confirm-password]').isVisible()) { // First run, COSMOS wants the password created - await page.locator('[data-test=confirm-password]').fill(PASSWORD) + await page.locator('[data-test=confirm-password] input').fill(PASSWORD) await page.locator('[data-test=set-password]').click() } else { // A password already exists, e.g. re-running against a stack still up