Újdonságok
A Playwright 1.63 frissítése megérkezett, és számtalan olyan funkciót hoz, amelyek lényegesen egyszerűbbé teszik a komplex tesztelési munkafolyamatokat, a párhuzamosítást és a hibakeresést.
Az alábbiakban összefoglaltuk a kiadás legfontosabb újdonságait és fejlesztéseit.
Key Features & Újdonságok
1. Test Locks (Tesztreteszek)
- Megoldást nyújt a közös erőforrások (pl. központi adatbázis, globális fiókbeállítások vagy külső API-k) használata miatti ütközésekre.
- Lehetővé teszi zárolások (locks) megadását, így a tesztek automatikusan sorba állnak a kritikus erőforrások eléréséhez, elkerülve a párhuzamos futtatásból eredő hibákat.
2. Step paraméterek és feliratok (test.step)
- A
test.step()mostantól elfogad egyparamsopciót, amellyel saját metaadatokat és paramétereket adhatsz át a lépésekhez. - A riportokban és a Trace Viewerben tisztábban nyomon követhetők az egyedi lépésekhez tartozó változók és hívási argumentumok.
3. Aria Traces & Bővített Tracing
- A Trace Viewer új
ariapillanatképeket (snapshots) támogat. - Megkönnyíti a hozzáférhetőségi (accessibility) elemek és az ARIA fa állapotának elemzését hibakeresés közben.
4. Új Scroll Opciók az akcióknál
- A legtöbb akciónál (pl.
.click()) megjelent egy újscrollopció ("auto"|"none"). - Lehetőséget biztosít arra, hogy kikapcsold a Playwright automatikus „scroll-into-view” viselkedését, ha egy elem pozícióját manuálisan szeretnéd kezelni.
5. Új teszt opciók és CLI parancsok
- Nagyobb hozzáférhetőség tesztelése: Új
reducedMotion,forcedColorséscontrastopciók atestOptionsalatt. --add-reporterparancssori opció: Bővítheted a meglévő riporterek listáját ahelyett, hogy felülírnád aplaywright.config.ts-ben megadottakat.omitTagsopció: Letisztultabb tesztcímek a riportokban (suppress-eli az automatikusan hozzáfűzött tegeket alist,line,dot,githubésjunitriportereknél).
Eltávolított (Deprecated) API-k
A 1.63-as verzió végleg kivezeti a régen elavultnak jelölt funkciókat:
Locator.ariaRef()(használd helyette alocator.ariaSnapshot()funkciót).handleopció aBrowserContext.exposeBindingésPage.exposeBindingesetében.loggeropció aBrowserType.connectésconnectOverCDPmetódusoknál.videosPathésvideoSizekonfig opciók (használd arecordVideo-t).
Frissítés
A legújabb verzióra való átálláshoz futtasd a projekt gyökerében az alábbi parancsot:
Bash
npm install -D @playwright/test@latest
npx playwright installTest Lock minta
A Playwright 1.63-ban megjelent Test Locks (Tesztreteszek) opció segítségével megakadályozhatod, hogy bizonyos tesztek egyszerre futjanak és ütközzenek a közös erőforrásokon (pl. ugyanazon tesztfiók beállításai, adatbázis vagy külső API-k), miközben a többi független teszt továbbra is párhuzamosan fut.
Az alábbiakban bemutatjuk a legfontosabb használati módokat kódpéldákkal.
1. Egyedi teszt zárolása egy megnevezett retesszel (lock)
Ha van két vagy több teszted, amelyek ugyanazt a megosztott erőforrást módosítják, megadhatsz nekik egy azonos lock nevet az opciók között:
TypeScript
import { test, expect } from '@playwright/test';
// Ez a teszt lefoglalja az 'admin-account' reteszt
test('Adminisztrátor frissíti a cég nevét', { lock: 'admin-account' }, async ({ page }) => {
await page.goto('https://example.com/admin/settings');
await page.getByLabel('Cégnév').fill('Új Cégnév Kft.');
await page.getByRole('button', { name: 'Mentés' }).click();
await expect(page.getByText('Sikeres mentés')).toBeVisible();
});
// Ez a teszt megvárja, amíg az előző teszt elengedi az 'admin-account' reteszt
test('Adminisztrátor módosítja az időzónát', { lock: 'admin-account' }, async ({ page }) => {
await page.goto('https://example.com/admin/settings');
await page.getByLabel('Időzóna').selectOption('Europe/Budapest');
await page.getByRole('button', { name: 'Mentés' }).click();
await expect(page.getByText('Sikeres mentés')).toBeVisible();
});
Hogyan működik? Amíg a Worker 1 az első tesztet futtatja az
admin-accountretesszel, addig a Worker 2 nem kezdi el a második tesztet. A két teszt egymás után fog lefutni, de a csomag többi, független tesztje (pl. termékkeresés, kosárkezelés) továbbra is teljesen párhuzamosan fut a többi workeren.
2. Egész tesztcsoport zárolása (test.describe)
Ha egy egész blokknyi teszt egyetlen közös erőforráson dolgozik, a lock opciót közvetlenül a test.describe() csoportra is ráteheted:
TypeScript
import { test, expect } from '@playwright/test';
test.describe('Adatbázis konfigurációs tesztek', { lock: 'database-config' }, () => {
test('Alapértelmezett nyelv beállítása', async ({ page }) => {
// ... teszt kód
});
test('Rendszerértesítések kikapcsolása', async ({ page }) => {
// ... teszt kód
});
});
3. Több retesz egyidejű használata (Array)
Egy teszt akár több megosztott erőforrás zárolását is kérheti egyszerre. Ehhez adj meg egy tömböt a lock paraméterben:
TypeScript
import { test, expect } from '@playwright/test';
test(
'Fizetési átjáró és szállítási beállítások egyidejű frissítése',
{ lock: ['payment-sandbox', 'shipping-api'] },
async ({ page }) => {
// Ez a teszt csak akkor indul el, ha mindkét retesz szabad
await page.goto('https://example.com/admin/integrations');
// ... teszt kód
}
);