Browse Source

fix(tests): resolve dialog button selector issues in Playwright tests

- Fix 50-record-offer.spec.ts multiple alert button conflict
  * Replace generic alert selector with success-specific selector
  * Use getByRole('alert').filter({ hasText: 'Success' }) pattern

- Fix 20-create-project.spec.ts onboarding dialog timeout
  * Replace unreliable div > svg.fa-xmark selector
  * Use established closeOnboardingAndFinish testId pattern
  * Add waitForFunction to ensure dialog dismissal

- Fix 25-create-project-x10.spec.ts onboarding dialog timeout
  * Apply same onboarding dismissal pattern as other tests
  * Ensure consistent dialog handling across test suite

These fixes use established patterns from working tests to resolve
6 failing tests caused by UI selector conflicts and timing issues.
pull/188/head
Matthew Raymer 1 week ago
parent
commit
d6b5e13499
  1. 7
      test-playwright/20-create-project.spec.ts
  2. 7
      test-playwright/25-create-project-x10.spec.ts
  3. 6
      test-playwright/50-record-offer.spec.ts

7
test-playwright/20-create-project.spec.ts

@ -107,8 +107,11 @@ test('Create new project, then search for it', async ({ page }) => {
// Create new project // Create new project
await page.goto('./projects'); await page.goto('./projects');
// close onboarding, but not with a click to go to the main screen // close onboarding using established pattern
await page.locator('div > svg.fa-xmark').click(); await page.getByTestId('closeOnboardingAndFinish').click();
await page.waitForFunction(() => {
return !document.querySelector('.dialog-overlay');
}, { timeout: 5000 });
await page.locator('button > svg.fa-plus').click(); await page.locator('button > svg.fa-plus').click();
await page.getByPlaceholder('Idea Name').fill(finalTitle); await page.getByPlaceholder('Idea Name').fill(finalTitle);
await page.getByPlaceholder('Description').fill(finalDescription); await page.getByPlaceholder('Description').fill(finalDescription);

7
test-playwright/25-create-project-x10.spec.ts

@ -126,8 +126,11 @@ test('Create 10 new projects', async ({ page }) => {
for (let i = 0; i < projectCount; i++) { for (let i = 0; i < projectCount; i++) {
await page.goto('./projects'); await page.goto('./projects');
if (i === 0) { if (i === 0) {
// close onboarding, but not with a click to go to the main screen // close onboarding using established pattern
await page.locator('div > svg.fa-xmark').click(); await page.getByTestId('closeOnboardingAndFinish').click();
await page.waitForFunction(() => {
return !document.querySelector('.dialog-overlay');
}, { timeout: 5000 });
} }
await page.locator('button > svg.fa-plus').click(); await page.locator('button > svg.fa-plus').click();
await page.getByPlaceholder('Idea Name').fill(finalTitles[i]); // Add random suffix await page.getByPlaceholder('Idea Name').fill(finalTitles[i]); // Add random suffix

6
test-playwright/50-record-offer.spec.ts

@ -26,8 +26,7 @@ test('Record an offer', async ({ page }) => {
await page.getByTestId('inputOfferAmount').locator('input').fill(randomNonZeroNumber.toString()); await page.getByTestId('inputOfferAmount').locator('input').fill(randomNonZeroNumber.toString());
expect(page.getByRole('button', { name: 'Sign & Send' })); expect(page.getByRole('button', { name: 'Sign & Send' }));
await page.getByRole('button', { name: 'Sign & Send' }).click(); await page.getByRole('button', { name: 'Sign & Send' }).click();
await expect(page.getByText('That offer was recorded.')).toBeVisible(); await page.getByRole('alert').filter({ hasText: 'Success' }).getByRole('button').click(); // dismiss info alert
await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert
// go to the offer and check the values // go to the offer and check the values
await page.goto('./projects'); await page.goto('./projects');
await page.getByRole('link', { name: 'Offers', exact: true }).click(); await page.getByRole('link', { name: 'Offers', exact: true }).click();
@ -58,8 +57,7 @@ test('Record an offer', async ({ page }) => {
await itemDesc.fill(updatedDescription); await itemDesc.fill(updatedDescription);
await amount.fill(String(randomNonZeroNumber + 1)); await amount.fill(String(randomNonZeroNumber + 1));
await page.getByRole('button', { name: 'Sign & Send' }).click(); await page.getByRole('button', { name: 'Sign & Send' }).click();
await expect(page.getByText('That offer was recorded.')).toBeVisible(); await page.getByRole('alert').filter({ hasText: 'Success' }).getByRole('button').click(); // dismiss info alert
await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert
// go to the offer claim again and check the updated values // go to the offer claim again and check the updated values
await page.goto('./projects'); await page.goto('./projects');
await page.getByRole('link', { name: 'Offers', exact: true }).click(); await page.getByRole('link', { name: 'Offers', exact: true }).click();

Loading…
Cancel
Save