{"id":39200,"date":"2026-02-16T14:30:44","date_gmt":"2026-02-16T11:30:44","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/"},"modified":"2026-02-16T14:30:44","modified_gmt":"2026-02-16T11:30:44","slug":"kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/","title":{"rendered":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<h2>Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>Playwright testlerinde asenkron i\u015flemlerden kaynaklanan kaynak s\u0131z\u0131nt\u0131lar\u0131, testlerin yava\u015flamas\u0131na ve g\u00fcvenilmezli\u011fe yol a\u00e7abilir. A\u011f istekleri veya zamanlay\u0131c\u0131lar gibi uzun s\u00fcreli operasyonlar\u0131n etkin y\u00f6netimi kritik \u00f6neme sahiptir. Bu makale, <code>AbortSignal<\/code>&#8216;\u0131 Playwright testlerinizde nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 detayland\u0131racakt\u0131r. <code>AbortSignal<\/code> ile asenkron operasyonlar\u0131 kontrol alt\u0131na alarak kaynak s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nleyecek ve testlerinizin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayaca\u011f\u0131z.<\/p>\n<h2>1. Asenkron Operasyonlar ve Kaynak S\u0131z\u0131nt\u0131lar\u0131 Nedir?<\/h2>\n<p>Playwright testleri, modern web uygulamalar\u0131n\u0131n karma\u015f\u0131k asenkron davran\u0131\u015flar\u0131n\u0131 taklit eder. Ancak bu asenkron yap\u0131, do\u011fru y\u00f6netilmedi\u011finde test ortam\u0131nda istenmeyen yan etkilere yol a\u00e7abilir.<\/p>\n<h3>1.1. Asenkron Operasyonlar\u0131n Testlerdeki Rol\u00fc<\/h3>\n<p>Web uygulamalar\u0131 genellikle a\u011f istekleri (API \u00e7a\u011fr\u0131lar\u0131), animasyonlar, zamanlay\u0131c\u0131lar (<code>setTimeout<\/code>, <code>setInterval<\/code>) ve kullan\u0131c\u0131 etkile\u015fimleri gibi asenkron i\u015flemlerle doludur. Playwright, bu i\u015flemleri taklit eder ve test eder. \u00d6rne\u011fin, bir butona t\u0131kland\u0131\u011f\u0131nda yap\u0131lan bir API \u00e7a\u011fr\u0131s\u0131n\u0131n yan\u0131t\u0131n\u0131 beklemek veya belirli bir elementin g\u00f6r\u00fcnmesini beklemek asenkron operasyonlard\u0131r. Bu t\u00fcr i\u015flemlerin do\u011fas\u0131 gere\u011fi tamamlanmas\u0131 belirli bir s\u00fcre alabilir ve testin ak\u0131\u015f\u0131n\u0131 etkileyebilir.<\/p>\n<h3>1.2. Kaynak S\u0131z\u0131nt\u0131lar\u0131 ve Test G\u00fcvenilirli\u011fi<\/h3>\n<p>Kaynak s\u0131z\u0131nt\u0131s\u0131, bir testin tamamlanmas\u0131na ra\u011fmen baz\u0131 asenkron i\u015flemlerin hala arka planda \u00e7al\u0131\u015fmaya devam etmesi veya temizlenmemesi durumudur. En yayg\u0131n kaynak s\u0131z\u0131nt\u0131lar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Tamamlanmam\u0131\u015f A\u011f \u0130stekleri:<\/b> Testin sonlanmas\u0131na ra\u011fmen hala yan\u0131t bekleyen HTTP istekleri.<\/li>\n<li><b>Aktif Zamanlay\u0131c\u0131lar:<\/b> Testin bitiminden sonra bile \u00e7al\u0131\u015fmaya devam eden <code>setTimeout<\/code> veya <code>setInterval<\/code> \u00e7a\u011fr\u0131lar\u0131.<\/li>\n<li><b>Bellek S\u0131z\u0131nt\u0131lar\u0131:<\/b> Gereksiz yere tutulan bellek referanslar\u0131.<\/li>\n<\/ul>\n<p>Bu s\u0131z\u0131nt\u0131lar, testlerin tutars\u0131z (flaky) olmas\u0131na, birbirini etkilemesine, daha yava\u015f \u00e7al\u0131\u015fmas\u0131na ve hata ay\u0131klamay\u0131 zorla\u015ft\u0131rmas\u0131na neden olur. \u00d6zellikle uzun s\u00fcreli veya \u00e7ok say\u0131da test senaryosu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda bu sorunlar daha belirgin hale gelir.<\/p>\n<h3>1.3. Playwright Testlerinde Ortaya \u00c7\u0131kan Sorunlar<\/h3>\n<p>Playwright, varsay\u0131lan olarak bir\u00e7ok i\u015flemi otomatik olarak temizlese de, \u00f6zel olarak tan\u0131mlanm\u0131\u015f asenkron i\u015flemler veya \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler arac\u0131l\u0131\u011f\u0131yla ba\u015flat\u0131lan operasyonlar testin \u00f6mr\u00fcn\u00fc a\u015fabilir. Bu durumlar, testlerin beklenmedik \u015fekilde ba\u015far\u0131s\u0131z olmas\u0131na veya bir sonraki testin \u00f6nceki testten kalan kaynaklarla kirlenmesine yol a\u00e7abilir.<\/p>\n<h2>2. AbortSignal&#8217;a Genel Bak\u0131\u015f<\/h2>\n<p><code>AbortSignal<\/code> ve <code>AbortController<\/code>, web platformunun standart bir par\u00e7as\u0131d\u0131r ve asenkron operasyonlar\u0131 iptal etmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>2.1. AbortController ve AbortSignal Nedir?<\/h3>\n<p><code>AbortController<\/code>, bir veya daha fazla asenkron i\u015flemi iptal etmek i\u00e7in kullan\u0131lan bir DOM API&#8217;sidir. <code>AbortController<\/code>&#8216;\u0131n bir <code>signal<\/code> \u00f6zelli\u011fi vard\u0131r, bu \u00f6zellik bir <code>AbortSignal<\/code> nesnesi d\u00f6nd\u00fcr\u00fcr. Bu <code>AbortSignal<\/code> nesnesi, iptal edilebilir bir operasyona iletilir. <code>AbortController.abort()<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, ili\u015fkili t\u00fcm <code>AbortSignal<\/code> nesneleri bir <code>abort<\/code> olay\u0131 tetikler. Bu olay, operasyonun iptal edilmesi gerekti\u011fini belirtir.<\/p>\n<h3>2.2. Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Temel i\u015f ak\u0131\u015f\u0131 \u015f\u00f6yledir:<\/p>\n<ol>\n<li>Bir <code>AbortController<\/code> \u00f6rne\u011fi olu\u015fturulur.<\/li>\n<li><code>controller.signal<\/code> nesnesi, iptal edilebilir asenkron operasyona (\u00f6rne\u011fin, <code>fetch<\/code> iste\u011fi veya <code>setTimeout<\/code>) parametre olarak iletilir.<\/li>\n<li>Operasyonun iptal edilmesi gerekti\u011finde, <code>controller.abort()<\/code> metodu \u00e7a\u011fr\u0131l\u0131r.<\/li>\n<li><code>AbortSignal<\/code>&#8216;\u0131 dinleyen operasyonlar, <code>abort<\/code> olay\u0131n\u0131 yakalar ve kendilerini temizleyerek veya sonland\u0131rarak yan\u0131t verir.<\/li>\n<\/ol>\n<p>Bu mekanizma, \u00f6zellikle uzun s\u00fcreli veya potansiyel olarak tak\u0131l\u0131 kalabilecek i\u015flemleri g\u00fcvenli bir \u015fekilde sonland\u0131rmak i\u00e7in \u00e7ok etkilidir.<\/p>\n<h3>2.3. Yayg\u0131n Kullan\u0131m Alanlar\u0131<\/h3>\n<p><code>AbortSignal<\/code>, modern JavaScript uygulamalar\u0131nda yayg\u0131n olarak kullan\u0131l\u0131r. En bilinen \u00f6rnekler \u015funlard\u0131r:<\/p>\n<ul>\n<li><b><code>fetch<\/code> API:<\/b> A\u011f isteklerini iptal etmek i\u00e7in <code>fetch(url, { signal: controller.signal })<\/code>.<\/li>\n<li><b><code>setTimeout<\/code> \/ <code>setInterval<\/code>:<\/b> \u00d6zel zamanlay\u0131c\u0131lar\u0131 temizlemek i\u00e7in <code>signal.addEventListener('abort', () => clearTimeout(timerId))<\/code>.<\/li>\n<li><b>Web Sockets:<\/b> Ba\u011flant\u0131lar\u0131 kapatmak i\u00e7in.<\/li>\n<li><b>Di\u011fer Asenkron API&#8217;ler:<\/b> Bir\u00e7ok yeni ve modern web API&#8217;si <code>AbortSignal<\/code> deste\u011fi ile gelmektedir.<\/li>\n<\/ul>\n<p>Bu standart API&#8217;nin varl\u0131\u011f\u0131, Playwright testlerinde de tutarl\u0131 ve g\u00fc\u00e7l\u00fc bir iptal mekanizmas\u0131 sa\u011flamam\u0131za olanak tan\u0131r.<\/p>\n<h2>3. Playwright Testlerinde AbortSignal Neden \u00d6nemli?<\/h2>\n<p>Playwright testlerinde <code>AbortSignal<\/code> kullan\u0131m\u0131, testlerin daha kararl\u0131, h\u0131zl\u0131 ve g\u00fcvenilir olmas\u0131n\u0131 sa\u011flayan \u00f6nemli avantajlar sunar.<\/p>\n<h3>3.1. Uzun S\u00fcreli A\u011f \u0130steklerini Y\u00f6netme<\/h3>\n<p>Testler s\u0131ras\u0131nda, \u00f6zellikle yava\u015f yan\u0131t veren veya hi\u00e7 yan\u0131t vermeyen harici API&#8217;lere yap\u0131lan istekler, testin tak\u0131l\u0131 kalmas\u0131na veya zaman a\u015f\u0131m\u0131na u\u011framas\u0131na neden olabilir. <code>AbortSignal<\/code> kullanarak bu t\u00fcr istekleri belirli bir s\u00fcre sonra veya testin sonlanmas\u0131 durumunda proaktif olarak iptal edebiliriz. Bu, testlerin gereksiz yere beklemesini \u00f6nler ve zaman a\u015f\u0131m\u0131 hatalar\u0131n\u0131n daha kontroll\u00fc bir \u015fekilde y\u00f6netilmesini sa\u011flar.<\/p>\n<h3>3.2. Test Hatalar\u0131nda veya Zaman A\u015f\u0131mlar\u0131nda Temizleme<\/h3>\n<p>Bir test ba\u015far\u0131s\u0131z oldu\u011funda veya Playwright&#8217;\u0131n genel zaman a\u015f\u0131m\u0131na u\u011frad\u0131\u011f\u0131nda, arka planda \u00e7al\u0131\u015fan asenkron i\u015flemlerin otomatik olarak temizlenmesi garantilenmez. <code>AbortSignal<\/code> ile, testin ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131 bir sinyal olu\u015fturabiliriz. Testin sonland\u0131\u011f\u0131 (ba\u015far\u0131l\u0131 veya ba\u015far\u0131s\u0131z) veya zaman a\u015f\u0131m\u0131na u\u011frad\u0131\u011f\u0131 anda bu sinyali tetikleyerek t\u00fcm ili\u015fkili operasyonlar\u0131n temizlenmesini sa\u011flayabiliriz. Bu, test ortam\u0131n\u0131n bir sonraki test i\u00e7in temiz kalmas\u0131n\u0131 garanti eder.<\/p>\n<h3>3.3. Test G\u00fcvenilirli\u011fini ve Performans\u0131n\u0131 Art\u0131rma<\/h3>\n<p>Kaynak s\u0131z\u0131nt\u0131lar\u0131, testlerin &#8220;flaky&#8221; (aral\u0131kl\u0131 olarak ba\u015far\u0131s\u0131z olan) olmas\u0131na neden olur. <code>AbortSignal<\/code> kullanarak bu s\u0131z\u0131nt\u0131lar\u0131 \u00f6nlemek, testlerin daha tutarl\u0131 sonu\u00e7lar vermesini sa\u011flar. Ayr\u0131ca, gereksiz yere bekleyen i\u015flemlerin iptal edilmesi, testlerin toplam y\u00fcr\u00fctme s\u00fcresini k\u0131saltarak test paketinin daha h\u0131zl\u0131 tamamlanmas\u0131na yard\u0131mc\u0131 olur. Daha h\u0131zl\u0131 testler, daha s\u0131k geri bildirim ve daha verimli geli\u015ftirme s\u00fcre\u00e7leri anlam\u0131na gelir.<\/p>\n<h2>4. Playwright ile AbortSignal Kullan\u0131m\u0131: Temel Senaryolar<\/h2>\n<p><code>AbortSignal<\/code>&#8216;\u0131 Playwright testlerinize entegre etmek, testlerinizi daha sa\u011flam hale getirecektir. \u0130\u015fte temel kullan\u0131m senaryolar\u0131.<\/p>\n<h3>4.1. A\u011f \u0130steklerini \u0130ptal Etme<\/h3>\n<p>Playwright&#8217;\u0131n <code>page.waitForRequest<\/code> veya <code>page.waitForResponse<\/code> gibi metotlar\u0131 do\u011frudan <code>AbortSignal<\/code>&#8216;\u0131 desteklemez. Ancak, Playwright&#8217;\u0131n kendisi zaman a\u015f\u0131mlar\u0131n\u0131 y\u00f6netir. <code>AbortSignal<\/code>&#8216;\u0131, test i\u00e7indeki \u00f6zel <code>fetch<\/code> \u00e7a\u011fr\u0131lar\u0131 gibi manuel olarak ba\u015flatt\u0131\u011f\u0131n\u0131z a\u011f isteklerini iptal etmek i\u00e7in kullanabilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">import { test, expect } from '@playwright\/test';\n\ntest('AbortSignal ile fetch iste\u011fini iptal etme', async ({ page }) => {\n  const controller = new AbortController();\n  const signal = controller.signal;\n\n  \/\/ Belirli bir s\u00fcre sonra iste\u011fi iptal et\n  const timeoutId = setTimeout(() => {\n    console.log('\u0130stek zaman a\u015f\u0131m\u0131na u\u011frad\u0131, iptal ediliyor...');\n    controller.abort();\n  }, 2000); \/\/ 2 saniye sonra iptal et\n\n  try {\n    \/\/ \u00d6rnek bir uzun s\u00fcreli API iste\u011fi sim\u00fclasyonu\n    const responsePromise = fetch('https:\/\/httpbin.org\/delay\/5', { signal }); \/\/ 5 saniye gecikmeli bir istek\n    const response = await responsePromise;\n    const data = await response.json();\n    console.log('\u0130stek ba\u015far\u0131yla tamamland\u0131:', data);\n    clearTimeout(timeoutId); \/\/ Ba\u015far\u0131l\u0131 olursa zamanlay\u0131c\u0131y\u0131 temizle\n  } catch (error: any) {\n    if (error.name === 'AbortError') {\n      console.log('\u0130stek AbortSignal taraf\u0131ndan iptal edildi.');\n    } else {\n      console.error('\u0130stek s\u0131ras\u0131nda bir hata olu\u015ftu:', error);\n    }\n    clearTimeout(timeoutId); \/\/ Hata durumunda da zamanlay\u0131c\u0131y\u0131 temizle\n  }\n});<\/pre>\n<p><\/code><br \/>\nBu \u00f6rnekte, <code>fetch<\/code> iste\u011fi 5 saniye s\u00fcrmesi gerekirken, <code>AbortSignal<\/code> sayesinde 2 saniye sonra iptal edilmektedir.<\/p>\n<h3>4.2. \u00d6zel Zamanlay\u0131c\u0131lar\u0131 Temizleme<\/h3>\n<p>Testlerinizde <code>setTimeout<\/code> veya <code>setInterval<\/code> kullanarak \u00f6zel gecikmeler veya periyodik i\u015flemler tan\u0131mlayabilirsiniz. Bu zamanlay\u0131c\u0131lar\u0131n test sonunda temizlenmesi \u00f6nemlidir.<\/p>\n<pre><code class=\"language-typescript\">import { test, expect } from '@playwright\/test';\n\ntest('AbortSignal ile setTimeout temizleme', async ({ page }) => {\n  const controller = new AbortController();\n  const signal = controller.signal;\n\n  let timerExecuted = false;\n  const timer = setTimeout(() => {\n    timerExecuted = true;\n    console.log('Zamanlay\u0131c\u0131 \u00e7al\u0131\u015ft\u0131!');\n  }, 5000); \/\/ 5 saniye sonra \u00e7al\u0131\u015facak\n\n  \/\/ AbortSignal tetiklendi\u011finde zamanlay\u0131c\u0131y\u0131 temizle\n  signal.addEventListener('abort', () => {\n    clearTimeout(timer);\n    console.log('Zamanlay\u0131c\u0131 AbortSignal taraf\u0131ndan temizlendi.');\n  });\n\n  \/\/ Testin ortas\u0131nda veya belirli bir ko\u015fulda iptal et\n  await page.goto('https:\/\/www.example.com');\n  \/\/ ... di\u011fer test ad\u0131mlar\u0131 ...\n\n  \/\/ \u00d6rne\u011fin, 2 saniye sonra zamanlay\u0131c\u0131y\u0131 iptal et\n  await page.waitForTimeout(2000);\n  controller.abort();\n\n  \/\/ Testin sonunda zamanlay\u0131c\u0131n\u0131n \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edebiliriz\n  expect(timerExecuted).toBe(false);\n});<\/pre>\n<p><\/code><br \/>\nBu sayede, testin beklenenden erken bitmesi veya bir hata olu\u015fmas\u0131 durumunda, gereksiz zamanlay\u0131c\u0131lar\u0131n arka planda \u00e7al\u0131\u015fmaya devam etmesi engellenir.<\/p>\n<h3>4.3. Playwright'\u0131n <code>test.use<\/code> ve <code>test.setTimeout<\/code> ile Entegrasyon<\/h3>\n<p>Playwright'\u0131n <code>test.use<\/code> hook'u, test ba\u011flam\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in harika bir yoldur. Bir <code>AbortController<\/code>'\u0131 test ba\u011flam\u0131na ekleyerek, her test i\u00e7in otomatik olarak bir <code>signal<\/code> sa\u011flayabiliriz.<\/p>\n<pre><code class=\"language-typescript\">import { test as base, expect } from '@playwright\/test';\n\n\/\/ Kendi \u00f6zel test fixture'\u0131m\u0131z\u0131 tan\u0131ml\u0131yoruz\nconst test = base.extend<{ abortController: AbortController, abortSignal: AbortSignal }>({\n  abortController: async ({}, use) => {\n    const controller = new AbortController();\n    await use(controller);\n    \/\/ Test bitti\u011finde veya hata olu\u015ftu\u011funda sinyali tetikle\n    controller.abort();\n  },\n  abortSignal: async ({ abortController }, use) => {\n    await use(abortController.signal);\n  }\n});\n\ntest('AbortSignal ile test \u00f6zel zamanlay\u0131c\u0131s\u0131', async ({ page, abortSignal }) => {\n  let longRunningOperationCompleted = false;\n\n  \/\/ Bir asenkron operasyon ba\u015flat\n  const operationPromise = new Promise<void>((resolve, reject) => {\n    const timeoutId = setTimeout(() => {\n      longRunningOperationCompleted = true;\n      console.log('Uzun s\u00fcreli operasyon tamamland\u0131.');\n      resolve();\n    }, 5000); \/\/ 5 saniye s\u00fcrecek\n\n    abortSignal.addEventListener('abort', () => {\n      clearTimeout(timeoutId);\n      console.log('Uzun s\u00fcreli operasyon AbortSignal taraf\u0131ndan iptal edildi.');\n      reject(new Error('Operation aborted')); \/\/ Operasyonu reddet\n    });\n  });\n\n  await page.goto('https:\/\/www.example.com');\n\n  \/\/ Testin varsay\u0131lan zaman a\u015f\u0131m\u0131 30 saniye olabilir, ama biz operasyonu 2 saniye sonra iptal edece\u011fiz.\n  \/\/ Bu durumda, testin kendisi ba\u015far\u0131l\u0131 olacak ama operasyon iptal edilecek.\n  await page.waitForTimeout(2000); \/\/ Sadece 2 saniye bekle\n\n  \/\/ Operasyonun iptal edildi\u011fini do\u011frula\n  await expect(operationPromise).rejects.toThrow('Operation aborted');\n  expect(longRunningOperationCompleted).toBe(false);\n});<\/pre>\n<p><\/code><br \/>\nBu yakla\u015f\u0131m, her testin kendi <code>AbortSignal<\/code>'\u0131na sahip olmas\u0131n\u0131 ve test sonunda otomatik olarak temizlenmesini sa\u011flar.<\/p>\n<h2>5. Geli\u015fmi\u015f AbortSignal Kullan\u0131m Teknikleri<\/h2>\n<p><code>AbortSignal<\/code>'\u0131 daha karma\u015f\u0131k senaryolarda kullanarak testlerinizin kontrol\u00fcn\u00fc art\u0131rabilirsiniz.<\/p>\n<h3>5.1. AbortSignal'lar\u0131 Zincirleme (Chaining)<\/h3>\n<p>Bazen birden fazla iptal ko\u015fulunu y\u00f6netmek isteyebilirsiniz. \u00d6rne\u011fin, hem genel bir test zaman a\u015f\u0131m\u0131 hem de belirli bir operasyon i\u00e7in daha k\u0131sa bir zaman a\u015f\u0131m\u0131. <code>AbortSignal.any()<\/code> (deneysel bir API olsa da, benzer mant\u0131k manuel olarak uygulanabilir) veya birden fazla sinyali dinleyen bir yap\u0131 olu\u015fturarak bu durumu y\u00f6netebilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Birden fazla sinyali dinleyen bir Promise \u00f6rne\u011fi\nfunction raceSignals(signals: AbortSignal[]): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const onAbort = () => {\n      signals.forEach(s => s.removeEventListener('abort', onAbort));\n      reject(new Error('One of the signals aborted'));\n    };\n    signals.forEach(s => s.addEventListener('abort', onAbort, { once: true }));\n  });\n}\n\ntest('Birden fazla AbortSignal ile zincirleme', async ({ page }) => {\n  const globalController = new AbortController();\n  const specificController = new AbortController();\n\n  \/\/ 1. Genel test sinyali (\u00f6rne\u011fin, test fixture'dan gelen)\n  \/\/ 2. \u00d6zel operasyon sinyali (daha k\u0131sa s\u00fcreli)\n  const combinedSignalPromise = raceSignals([globalController.signal, specificController.signal]);\n\n  let operationCompleted = false;\n  const longRunningPromise = new Promise<void>((resolve, reject) => {\n    const timeoutId = setTimeout(() => {\n      operationCompleted = true;\n      resolve();\n    }, 10000); \/\/ 10 saniye s\u00fcrecek operasyon\n\n    combinedSignalPromise.catch(error => {\n      clearTimeout(timeoutId);\n      reject(error);\n    });\n  });\n\n  \/\/ Global sinyali 5 saniye sonra iptal et\n  setTimeout(() => globalController.abort(), 5000);\n\n  \/\/ \u00d6zel sinyali 2 saniye sonra iptal et (bu \u00f6nce tetiklenecek)\n  setTimeout(() => specificController.abort(), 2000);\n\n  await page.goto('https:\/\/www.example.com');\n\n  await expect(longRunningPromise).rejects.toThrow('One of the signals aborted');\n  expect(operationCompleted).toBe(false);\n});<\/pre>\n<p><\/code><br \/>\nBu senaryoda, <code>specificController<\/code> 2 saniye sonra tetiklendi\u011fi i\u00e7in <code>longRunningPromise<\/code> de 2 saniye sonra iptal olacakt\u0131r.<\/p>\n<h3>5.2. Yard\u0131mc\u0131 Fonksiyonlar Arac\u0131l\u0131\u011f\u0131yla AbortSignal Yayma<\/h3>\n<p>Karma\u015f\u0131k testlerde, asenkron i\u015flemleri ger\u00e7ekle\u015ftiren yard\u0131mc\u0131 fonksiyonlar\u0131n\u0131z olabilir. <code>AbortSignal<\/code>'\u0131 bu fonksiyonlara parametre olarak ge\u00e7irerek iptal mekanizmas\u0131n\u0131 t\u00fcm katmanlara yayabilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ helper.ts\nexport async function performLongOperation(signal: AbortSignal): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const timeoutId = setTimeout(() => {\n      if (signal.aborted) {\n        reject(new Error('Operation aborted before completion'));\n        return;\n      }\n      resolve('Operasyon ba\u015far\u0131yla tamamland\u0131.');\n    }, 4000); \/\/ 4 saniye s\u00fcren bir i\u015flem\n\n    signal.addEventListener('abort', () => {\n      clearTimeout(timeoutId);\n      reject(new Error('Operation aborted by signal'));\n    }, { once: true });\n  });\n}\n\n\/\/ test.ts\nimport { test, expect } from '@playwright\/test';\nimport { performLongOperation } from '.\/helper';\n\ntest('Yard\u0131mc\u0131 fonksiyon ile AbortSignal kullan\u0131m\u0131', async ({ page }) => {\n  const controller = new AbortController();\n  const signal = controller.signal;\n\n  \/\/ 2 saniye sonra operasyonu iptal et\n  setTimeout(() => controller.abort(), 2000);\n\n  await page.goto('https:\/\/www.example.com');\n\n  await expect(performLongOperation(signal)).rejects.toThrow('Operation aborted by signal');\n});<\/pre>\n<p><\/code><br \/>\nBu, kod tekrar\u0131n\u0131 azalt\u0131r ve iptal mant\u0131\u011f\u0131n\u0131 merkezi bir \u015fekilde y\u00f6netmenizi sa\u011flar.<\/p>\n<h2>6. En \u0130yi Uygulamalar ve Dikkat Edilmesi Gerekenler<\/h2>\n<p><code>AbortSignal<\/code> kullan\u0131rken baz\u0131 \u00f6nemli noktalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak, testlerinizin daha verimli ve hatas\u0131z olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>6.1. Ne Zaman Kullanmal\u0131, Ne Zaman Kullanmamal\u0131?<\/h3>\n<table>\n<thead>\n<tr>\n<th>Kullan\u0131m Durumu<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2705 Uzun S\u00fcreli Asenkron \u0130\u015flemler<\/td>\n<td>Manuel <code>fetch<\/code> istekleri, <code>setTimeout<\/code>\/<code>setInterval<\/code> gibi \u00f6zel zamanlay\u0131c\u0131lar.<\/td>\n<\/tr>\n<tr>\n<td>\u2705 Kaynak Temizli\u011fi<\/td>\n<td>Test sonunda t\u00fcm bekleyen i\u015flemlerin durdurulmas\u0131 gereken durumlar.<\/td>\n<\/tr>\n<tr>\n<td>\u2705 Dinamik \u0130ptal Ko\u015fullar\u0131<\/td>\n<td>Belirli bir kullan\u0131c\u0131 etkile\u015fimi veya ko\u015fula ba\u011fl\u0131 olarak iptal edilmesi gereken i\u015flemler.<\/td>\n<\/tr>\n<tr>\n<td>\u274c Playwright'\u0131n Dahili Bekleme Metotlar\u0131<\/td>\n<td><code>page.waitForSelector<\/code>, <code>page.waitForLoadState<\/code> gibi metotlar kendi zaman a\u015f\u0131m\u0131 mekanizmalar\u0131na sahiptir ve genellikle <code>AbortSignal<\/code>'a ihtiya\u00e7 duymazlar.<\/td>\n<\/tr>\n<tr>\n<td>\u274c \u00c7ok K\u0131sa S\u00fcreli \u0130\u015flemler<\/td>\n<td>\u00c7ok h\u0131zl\u0131 tamamlanan i\u015flemler i\u00e7in <code>AbortSignal<\/code> kullanmak, ek y\u00fck getirebilir ve gereksiz olabilir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>6.2. \u0130ptal Edilen Operasyonlarda Hata Y\u00f6netimi<\/h3>\n<p>Bir operasyon <code>AbortSignal<\/code> taraf\u0131ndan iptal edildi\u011finde, genellikle bir <code>AbortError<\/code> hatas\u0131 f\u0131rlat\u0131l\u0131r. Bu hatay\u0131 do\u011fru bir \u015fekilde yakalamak ve i\u015flemek \u00f6nemlidir. Bu, test raporlar\u0131n\u0131zda \"ger\u00e7ek\" hatalar ile \"kas\u0131tl\u0131 iptaller\" aras\u0131ndaki fark\u0131 anlaman\u0131za yard\u0131mc\u0131 olur. <code>try...catch<\/code> bloklar\u0131 kullanarak <code>AbortError<\/code>'u yakalay\u0131n ve buna g\u00f6re davran\u0131n (\u00f6rne\u011fin, testin ba\u015far\u0131s\u0131z olmas\u0131n\u0131 engellemek veya uygun bir mesaj loglamak).<\/p>\n<h3>6.3. Performans Etkileri<\/h3>\n<p><code>AbortController<\/code> ve <code>AbortSignal<\/code> nesneleri olu\u015fturmak ve olay dinleyicileri eklemek, \u00e7ok k\u00fc\u00e7\u00fck bir performans y\u00fck\u00fc getirir. Ancak, bu y\u00fck genellikle uzun s\u00fcreli asenkron i\u015flemlerin iptal edilmesinden elde edilen performans kazanc\u0131na k\u0131yasla ihmal edilebilir d\u00fczeydedir. Gereksiz yere her k\u00fc\u00e7\u00fck i\u015flem i\u00e7in <code>AbortSignal<\/code> kullanmaktan ka\u00e7\u0131nmak, en iyi performans\u0131 sa\u011flaman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Sadece ger\u00e7ekten iptal edilebilir olmas\u0131 gereken veya kaynak s\u0131z\u0131nt\u0131s\u0131na yol a\u00e7abilecek operasyonlar i\u00e7in kullan\u0131n.<\/p>\n<h2>7. Alternatif Yakla\u015f\u0131mlar ve AbortSignal Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h2>\n<p><code>AbortSignal<\/code>, asenkron operasyonlar\u0131 y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, ba\u015fka y\u00f6ntemler de mevcuttur.<\/p>\n<h3>7.1. Manuel Temizleme (<code>finally<\/code> Bloklar\u0131)<\/h3>\n<p><code>try...finally<\/code> bloklar\u0131, bir operasyonun sonunda kaynaklar\u0131 temizlemek i\u00e7in geleneksel bir y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-typescript\">test('Manuel temizleme \u00f6rne\u011fi', async ({ page }) => {\n  let timerId: NodeJS.Timeout | null = null;\n  try {\n    timerId = setTimeout(() => console.log('Zamanlay\u0131c\u0131 \u00e7al\u0131\u015ft\u0131 (manuel)'), 5000);\n    await page.goto('https:\/\/www.example.com');\n    \/\/ ... test ad\u0131mlar\u0131 ...\n  } finally {\n    if (timerId) {\n      clearTimeout(timerId);\n      console.log('Zamanlay\u0131c\u0131 manuel olarak temizlendi.');\n    }\n  }\n});<\/pre>\n<p><\/code><br \/>\nBu y\u00f6ntem, basit senaryolar i\u00e7in yeterli olabilir. Ancak, i\u00e7 i\u00e7e ge\u00e7mi\u015f veya \u00e7ok say\u0131da asenkron i\u015flemde, her birini manuel olarak takip etmek ve temizlemek karma\u015f\u0131k ve hataya a\u00e7\u0131k hale gelebilir. <code>AbortSignal<\/code>, bu temizleme mant\u0131\u011f\u0131n\u0131 merkezi ve olay tabanl\u0131 bir \u015fekilde y\u00f6netir.<\/p>\n<h3>7.2. Playwright'\u0131n Dahili Zaman A\u015f\u0131mlar\u0131<\/h3>\n<p>Playwright, testler ve sayfa i\u015flemleri i\u00e7in yerle\u015fik zaman a\u015f\u0131m\u0131 mekanizmalar\u0131na sahiptir:<\/p>\n<ul>\n<li><code>test.setTimeout(ms)<\/code>: T\u00fcm testin zaman a\u015f\u0131m\u0131n\u0131 ayarlar.<\/li>\n<li><code>page.setDefaultTimeout(ms)<\/code>: Sayfa \u00fczerindeki t\u00fcm i\u015flemlerin varsay\u0131lan zaman a\u015f\u0131m\u0131n\u0131 ayarlar.<\/li>\n<li><code>page.waitFor*<\/code> metotlar\u0131: Kendi zaman a\u015f\u0131m\u0131 se\u00e7eneklerine sahiptir.<\/li>\n<\/ul>\n<p>Bu zaman a\u015f\u0131mlar\u0131, Playwright'\u0131n kontrol\u00fcndeki operasyonlar\u0131 otomatik olarak sonland\u0131r\u0131r. Ancak, <code>AbortSignal<\/code>'\u0131n fark\u0131, Playwright'\u0131n \u00f6tesindeki (\u00f6rne\u011fin, do\u011frudan JavaScript <code>fetch<\/code> veya <code>setTimeout<\/code> \u00e7a\u011fr\u0131lar\u0131) asenkron i\u015flemleri de kontrol edebilmesidir. <code>AbortSignal<\/code>, daha granular ve operasyon baz\u0131nda bir iptal mekanizmas\u0131 sunar. Playwright'\u0131n zaman a\u015f\u0131mlar\u0131 testin tamam\u0131n\u0131 veya belirli bir Playwright API \u00e7a\u011fr\u0131s\u0131n\u0131 sonland\u0131r\u0131rken, <code>AbortSignal<\/code> bir veya daha fazla ba\u011f\u0131ms\u0131z asenkron operasyonu hedefleyebilir.<\/p>\n<h3>7.3. Neden AbortSignal Daha Gran\u00fcler Kontrol Sa\u011flar?<\/h3>\n<p><code>AbortSignal<\/code>, asenkron operasyonlar\u0131n iptalini do\u011frudan operasyonun kendisine entegre etme yetene\u011fi sunar. Bu, bir operasyonun ne zaman ve hangi ko\u015fullar alt\u0131nda iptal edilece\u011fine dair daha ince taneli kontrol sa\u011flar. \u00d6rne\u011fin, bir a\u011f iste\u011finin belirli bir ko\u015ful kar\u015f\u0131land\u0131\u011f\u0131nda iptal edilmesini sa\u011flayabilir veya bir kullan\u0131c\u0131n\u0131n sayfadan ayr\u0131lmas\u0131 durumunda arka plandaki bir i\u015flemi durdurabilirsiniz. Playwright'\u0131n dahili zaman a\u015f\u0131mlar\u0131 genellikle \"her \u015feyi durdur\" veya \"bu belirli Playwright eylemini durdur\" yakla\u015f\u0131m\u0131n\u0131 benimserken, <code>AbortSignal<\/code> \"bu belirli asenkron JavaScript i\u015flemini durdur\" yetene\u011fi sunar. Bu esneklik, karma\u015f\u0131k test senaryolar\u0131nda kaynak y\u00f6netimini \u00e7ok daha etkili hale getirir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Playwright testlerinde kaynak s\u0131z\u0131nt\u0131lar\u0131, testlerin g\u00fcvenilirli\u011fini ve performans\u0131n\u0131 ciddi \u015fekilde etkileyebilir. <code>AbortSignal<\/code> ve <code>AbortController<\/code>, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in modern ve standart bir yakla\u015f\u0131md\u0131r. Bu API'yi kullanarak, testlerinizdeki asenkron a\u011f isteklerini, zamanlay\u0131c\u0131lar\u0131 ve di\u011fer uzun s\u00fcreli i\u015flemleri proaktif bir \u015fekilde iptal edebilir, b\u00f6ylece test ortam\u0131n\u0131z\u0131n temiz kalmas\u0131n\u0131 ve testlerinizin daha h\u0131zl\u0131 ve daha kararl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz. <code>AbortSignal<\/code>'\u0131 test stratejinize dahil etmek, daha sa\u011flam, bak\u0131m\u0131 kolay ve verimli test otomasyonu s\u00fcre\u00e7leri olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>SSS (S\u0131k Sorulan Sorular)<\/h2>\n<h3>AbortSignal nedir?<\/h3>\n<p><code>AbortSignal<\/code>, JavaScript'teki asenkron operasyonlar\u0131 iptal etmek i\u00e7in kullan\u0131lan bir web API'sidir. Bir <code>AbortController<\/code> taraf\u0131ndan olu\u015fturulur ve <code>abort()<\/code> metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda ili\u015fkili operasyonlara iptal sinyali g\u00f6nderir.<\/p>\n<h3>AbortSignal Playwright'a \u00f6zel mi?<\/h3>\n<p>Hay\u0131r, <code>AbortSignal<\/code> Playwright'a \u00f6zel de\u011fildir. Web platformunun standart bir par\u00e7as\u0131d\u0131r ve <code>fetch<\/code> API'si gibi bir\u00e7ok taray\u0131c\u0131 API'si taraf\u0131ndan desteklenir. Playwright testlerinde, test i\u00e7indeki JavaScript asenkron operasyonlar\u0131n\u0131<\/p>\n","protected":false},"excerpt":{"rendered":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?\nPlaywright testlerinde asenkron i\u015flemlerden kaynaklanan kaynak &#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-39200","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? Playwright testlerinde asenkron i\u015flemlerden kaynaklanan kaynak ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-16T11:30:44+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?\",\"datePublished\":\"2026-02-16T11:30:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\"},\"wordCount\":2101,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\",\"name\":\"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-16T11:30:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?","og_description":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? Playwright testlerinde asenkron i\u015flemlerden kaynaklanan kaynak ...","og_url":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-16T11:30:44+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?","datePublished":"2026-02-16T11:30:44+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/"},"wordCount":2101,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/","name":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-16T11:30:44+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kaynak-sizintilarini-durdurun-playwright-testlerinde-abortsignal-nasil-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kaynak S\u0131z\u0131nt\u0131lar\u0131n\u0131 Durdurun: Playwright Testlerinde AbortSignal Nas\u0131l Kullan\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39200"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39200\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}