← Back to library
Playwrightfixturesintermediatev1.20+

Parametrize tests with a data loop

Run the same assertion logic for multiple roles using a for...of loop over test data.

1import { test, expect } from '@playwright/test';
2
3const roles = [
4  { name: 'admin',  email: 'admin@test.com',  canDelete: true  },
5  { name: 'editor', email: 'editor@test.com', canDelete: false },
6  { name: 'viewer', email: 'viewer@test.com', canDelete: false },
7];
8
9for (const { name, email, canDelete } of roles) {
10  test(`${name} sees correct actions`, async ({ page }) => {
11    await page.goto(`/login?email=${email}`);
12
13    const deleteBtn = page.getByRole('button', { name: 'Delete' });
14
15    if (canDelete) {
16      await expect(deleteBtn).toBeVisible();
17    } else {
18      await expect(deleteBtn).not.toBeVisible();
19    }
20  });
21}
#parametrize#data-driven#loop#roles