getByLabel('Email') matched two elements on /register -- the email input and
the marketing consent checkbox, whose label "Send me occasional emails"
contains the substring. Playwright's strict mode failed both tests that
filled it.
getByRole('textbox', ...) narrows by role, so the checkbox no longer collides.
Applied to the /login usage too, so the same concept reads the same way
throughout the file.
These failures were latent: the frontend-e2e job died at the build step
before it ever reached the tests, so CI never reported them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
1.6 KiB
TypeScript
Executable File
39 lines
1.6 KiB
TypeScript
Executable File
import { test, expect } from '@playwright/test';
|
|
|
|
function uniqueEmail(): string {
|
|
return `playwright-${Date.now()}-${Math.floor(Math.random() * 10000)}@example.com`;
|
|
}
|
|
|
|
test.describe('Customer accounts', () => {
|
|
test('marketing consent checkbox is unchecked by default', async ({ page }) => {
|
|
await page.goto('/register');
|
|
await expect(page.getByRole('checkbox')).not.toBeChecked();
|
|
});
|
|
|
|
test('registers a new account and lands on the account page', async ({ page }) => {
|
|
const email = uniqueEmail();
|
|
await page.goto('/register');
|
|
await page.getByRole('textbox', { name: 'Email' }).fill(email);
|
|
await page.getByLabel('Password').fill('supersecret123');
|
|
await page.getByRole('button', { name: 'Create account' }).click();
|
|
await expect(page).toHaveURL(/\/account/);
|
|
await expect(page.getByText(email)).toBeVisible();
|
|
});
|
|
|
|
test('rejects login with the wrong password', async ({ page }) => {
|
|
const email = uniqueEmail();
|
|
await page.goto('/register');
|
|
await page.getByRole('textbox', { name: 'Email' }).fill(email);
|
|
await page.getByLabel('Password').fill('supersecret123');
|
|
await page.getByRole('button', { name: 'Create account' }).click();
|
|
await expect(page).toHaveURL(/\/account/);
|
|
|
|
await page.getByRole('button', { name: 'Log out' }).click();
|
|
await page.goto('/login');
|
|
await page.getByRole('textbox', { name: 'Email' }).fill(email);
|
|
await page.getByLabel('Password').fill('wrong-password');
|
|
await page.getByRole('button', { name: 'Log in' }).click();
|
|
await expect(page.getByText('invalid email or password')).toBeVisible();
|
|
});
|
|
});
|