04 / 10
Trace ile hata ayıklama
Başarısız testi okumak, UI Mode, Inspector ve --debug, trace kaydetme modları, Trace Viewer'ın sekmeleri, error-context dosyası ve kırılgan testi yakalamak için --repeat-each ve --shuffle.
Önce Hata Mesajını Okuyun
Başarısız bir testin çıktısı çoğu zaman sorunu söyler. Bu rehberin projesinde sipariş sayısını bilerek yanlış yazınca çıkan hata:
Error: expect(locator).toHaveCount(expected) failed
Locator: getByRole('table', { name: 'Sipariş listesi' }).getByRole('row').filter({ has: getByRole('cell') })
Expected: 7
Received: 6
Timeout: 2000ms
Call log:
- waiting for getByRole('table', { name: 'Sipariş listesi' }).getByRole('row')...
6 × locator resolved to 0 elements
14 × locator resolved to 6 elementsCall log hikâyeyi anlatır: tablo önce boştu (liste yükleniyordu), sonra 6 satır geldi ve hiç 7 olmadı. Locator doğru, beklenti yanlış. "0 element" satırı hiç bitmeseydi locator'ı sorgulardınız.
Hata ayrıca bir error-context dosyası üretir: test-results/<test>/error-context.md. İçinde testin adı, hata ve sayfanın o anki aria snapshot'ı vardır. Dosya bir yapay zekâ asistanına "neden düştü, düzeltmesi ne" diye sorulacak biçimde yazılmıştır; kendiniz okurken de sayfada neyin göründüğünü hızlıca gösterir.
UI Mode
Test yazarken en verimli araç UI Mode'dur:1
$ pnpm dlx playwright test --uiTestleri listeden seçip çalıştırırsınız; dosya değişince yeniden çalıştıran izleme modu vardır.
Her adım zaman çizelgesinde görünür. Bir adıma tıklayınca sayfanın o anki halini görürsünüz.
"Pick locator" ile sayfadaki bir elementin locator'ını alırsınız.
Konsol, ağ istekleri ve hata aynı ekrandadır.
Inspector ile Adım Adım
--debug testi görünür tarayıcıda başlatır ve Playwright Inspector'ı açar. Her eylemden önce durur; adım adım ilerler, locator'ı canlı düzenler ve hangi elementlere uyduğunu görürsünüz.2
$ pnpm dlx playwright test tests/orders.spec.ts:13 --debugDosya adından sonraki :13 yalnızca o satırdaki testi çalıştırır. Testin belirli bir yerinde durmak için koda await page.pause() ekleyin. VS Code eklentisi aynı şeyi kesme noktalarıyla yapar.2
Inspector'daki actionability log bir eylemin neden beklediğini söyler: "element is not visible", "element is not enabled", "another element would receive the click" gibi (bkz. Assertion ve bekleme).2
Trace Nedir?
Trace, bir test çalıştırmasının tam kaydıdır: her eylem, öncesi ve sonrasındaki DOM, ağ istekleri, konsol mesajları, kaynak kod satırı. CI'da düşen bir testi kendi makinenizde yeniden çalıştırmadan incelemenizi sağlar. Playwright dokümanı CI hataları için video ve ekran görüntüsü yerine trace önerir.3
Trace Kaydetmek
use.trace hangi çalıştırmada trace kaydedileceğini belirler:4
| Mod | Kaydeder | Saklar |
|---|---|---|
"off" | Hiç | — |
"on" | Her çalıştırmada | Her zaman |
"retain-on-failure" | Her çalıştırmada | Çalıştırma düştüyse |
"retain-on-first-failure" | Yalnızca ilk çalıştırmada | İlk çalıştırma düştüyse |
"on-first-retry" | Yalnızca ilk tekrar denemede | Her zaman |
"on-all-retries" | Her tekrar denemede | Her zaman |
Oluşturulan yapılandırma "on-first-retry" kullanır. CI'da retries: 2 olduğu için düşen test bir kez daha çalışır ve o çalıştırma kaydedilir. Doküman "on"'u her test için önermez; trace kaydetmek testleri yavaşlatır.3
İpucu
Yerelde retries: 0 olduğu için "on-first-retry" hiç trace üretmez. Yerelde trace istiyorsanız komut satırından açın:
$ pnpm dlx playwright test --trace onTrace'ler HTML rapordan açılır ya da doğrudan:5
$ pnpm dlx playwright show-trace test-results/orders-duruma-göre-filtreler-chromium/trace.ziptrace.playwright.dev aynı görüntüleyicinin web sürümüdür. Dosyayı sürükleyip bırakırsınız; trace tamamen tarayıcınızda açılır, hiçbir yere gönderilmez.5
Trace Viewer'da Neye Bakılır?
| Sekme | Ne gösterir |
|---|---|
| Actions | Her eylem, locator'ı ve süresi; üzerine gelince sayfa |
| Snapshots | Eylemin öncesi, anı ve sonrası; tıklanan nokta işaretli |
| Source | Eylemin test dosyasındaki satırı |
| Call / Log | Eylemin parametreleri ve actionability adımları |
| Errors | Hata mesajı ve yeri |
| Console | Tarayıcı ve test konsolu |
| Network | Tüm istekler, durum kodu ve yanıt gövdesi |
Snapshot'lar ekran görüntüsü değil, DOM kopyasıdır. Geliştirici araçlarıyla inceleyebilir, locator deneyebilirsiniz.5
Playwright 1.63 ile trace'e aria snapshot ve ekran görüntüsü de eklenebilir. "Display Aria" modu ekran görüntüsünü ve erişilebilirlik ağacını yan yana gösterir:6
use: {
trace: {
mode: "retain-on-failure",
snapshots: { dom: true, aria: true, screen: true },
},
},Kendi Adımlarınız
Uzun testlerde test.step raporu ve trace'i okunur kılar. Adımlar raporda ve Trace Viewer'da başlıklarıyla görünür.7
test("yönetici siparişi iptal eder", async ({ loginPage, ordersPage }) => {
await test.step("giriş yap", async () => {
await loginPage.goto();
await loginPage.login("yonetici@example.com");
});
await test.step("SP-1001'i iptal et", async () => {
await ordersPage.cancel("SP-1001");
});
});Kırılgan Testi Yakalamak
Bazen düşen, bazen geçen teste kırılgan (flaky) denir. Bir kez çalıştırarak yakalanmaz. İki seçenek işe yarar:89
$ pnpm dlx playwright test --repeat-each=10$ pnpm dlx playwright test --shuffle--repeat-each her testi N kez çalıştırır; zamanlamaya bağlı hatalar ortaya çıkar. --shuffle (1.64) testleri rastgele sırayla çalıştırır ve birbirine gizlice bağımlı testleri bulur. Çıktıdaki tohum değerini --shuffle 271828182 gibi verip aynı sırayı tekrar üretebilirsiniz.9
Bu rehberin projesinde --shuffle --repeat-each=3 --workers=4 bir testi düşürdü: önceki bir beforeEach sayfayı /orders'a yönlendirirken test /login'e gidiyordu ve iki gezinme çakışıyordu. Hata yalnızca belirli bir sırada çıkıyordu. Düzeltme, veriyi değiştiren testi ortak beforeEach'i olmayan kendi dosyasına taşımaktı.
Son düşen testleri tekrar çalıştırmak için:8
$ pnpm dlx playwright test --last-failedKendin Dene
Bir assertion'ı bilerek yanlış yazın. Call log'u okuyun, sonra
error-context.mddosyasını açın.npx playwright test --trace onile çalıştırın, raporu açıp bir testin trace'ine girin. Network sekmesinde/api/ordersisteğinin yanıtını bulun.Bir teste
await page.pause()ekleyip--headedile çalıştırın. Inspector'da locator'ı değiştirip hangi elementlere uyduğuna bakın.Test paketinizi
--shuffle --repeat-each=5ile çalıştırın. Düşen test var mı?
Detaylı Öğrenmek İçin
Resmi doküman: Playwright, "Trace viewer"; trace kaydetme, açma ve tüm sekmeler.5
Resmi doküman: Playwright, "Debugging Tests"; Inspector, VS Code ve ayrıntılı API logları.2
Resmi doküman: Playwright, "UI Mode"; izleme modu ve zaman çizelgesi.1
Kaynaklar
İzleme modu, zaman çizelgesi, locator seçme ve ağ sekmesi.
`--debug`, Inspector, `page.pause()`, actionability logları ve VS Code.
CI hataları için trace önerisi ve `on` modunun maliyeti.
Trace ve video modlarının tablosu.
`show-trace`, trace.playwright.dev ve görüntüleyicinin sekmeleri.
Trace'te aria ve ekran snapshot'ları, Display Aria modu.
Adımları raporda ve trace'te gruplamak.
`--repeat-each`, `--last-failed` ve diğer seçenekler.
`--shuffle` ve tohum değeriyle sırayı tekrar üretmek.
Son güncelleme tarihi: 22 Ekim 2026
