deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Chrome'daki ModHeader arızası, Selenium header testlerini CDP ve MV3 eklentilerine yönlendiriyor

ModHeader'ın mağazalardan kaldırılması, Chrome'un Manifest V2 kapanışı ve --load-extension değişikliği popüler bir Selenium desenini bozdu; boşluğu artık CDP çağrıları, Playwright seçenekleri ve MV3 eklentileri dolduruyor.

Chrome'daki ModHeader arızası, Selenium header testlerini CDP ve MV3 eklentilerine yönlendiriyor

Ne bozuldu

Tarayıcı testlerinde HTTP header'ları ayarlamanın uzun süredir kullanılan bir yolu — ModHeader eklentisini Selenium üzerinden yüklemek — bu yıl çalışmayı kesti ve dev.to'daki bir yazıya göre başarısızlığın nedeni tek bir değişiklik değil, aynı anda etkili olan üç ayrı değişiklik.

ModHeader Temmuz'da tarayıcı mağazalarından çekildi ve normal kurulum yolu kapandı. npm'deki chrome-modheader paketinde ve Python ile Java için olan modheader_selenium karşılıklarında bulunan kopya 4.3.2 sürümü, yani Manifest V2 derlemesi; Chrome MV2 eklentilerini kapattığı için hiç etkinleşmiyor ve paket güncellenmiş değil. Bunun üzerine Chrome 137 ve üzeri, normal tarayıcıda --load-extension bayrağını yok sayıyor; ChromeDriver'ın addExtensions ile geçirilen her şeyi kurmak için kullandığı mekanizma da bu. Chrome for Testing ve sade Chromium bayrağı hâlâ kabul ediyor.

CI'da sessiz bir başarısızlık

dev.to yazısı, npm paketinin ayda yaklaşık 150.000 indirme aldığını, bunların çoğunun CI'dan geldiğini tahmin ediyor. Bu boru hatları hiçbir iş yapmayan bir eklenti kuruyor; dolayısıyla ona bağımlı testler hiçbir header göndermiyor. Başarısızlık modu sert bir hata değil, sessiz bir şekilde kendini gösteriyor — bozulmanın fark edilmeden neden bu kadar yayıldığının bir nedeni de bu.

Eklenti olmadan request header'ları ayarlamak

En yaygın ihtiyaç için — her yerde aynı request header'larını eklemek, örneğin testleri bir staging ortamına yönlendirmek veya bir test kullanıcısını doğrulamak — yazıya göre hiç eklenti gerekmiyor.

Playwright'ta bu yerleşik olarak var: bir tarayıcı bağlamı extraHTTPHeaders seçeneğiyle oluşturulabiliyor. Chrome'u süren Selenium 4 ise DevTools protokolünü kullanabiliyor; Network alanını etkinleştirip Network.setExtraHTTPHeaders çağrısı yapılarak aynı sonuca ulaşılıyor.

Her iki yaklaşım da o bağlam veya sekmeden gelen her isteğe header ekliyor. Yazı ayrıca sınırlarını da listeliyor: response header'larını değiştiremiyorlar, tarayıcının bir header göndermesini engelleyemiyorlar ve header'ları belirli URL'lerle sınırlayamıyorlar. URL başına ayrıştırma gereken durumlarda Playwright'ın request interception'ı kullanılabilir; bunun bedeli, her isteği testin içinde yönetmek.

Eklentinin hâlâ yer kazandığı nokta

CORS veya CSP gibi response-header çalışmaları, Referer veya Cookie gibi header'ları ayıklamak ve tek bir API hostuna kapsamlı kurallar yine bir eklenti gerektiriyor — ya da mitmproxy gibi bir proxy. Proxy, sertifika yönetimi getiriyor; bulut grid'leri de buna sık sık izin vermiyor.

Yazar burada doğrudan bir çıkar paylaşıyor: Headerwise'ı sürdürüyor — özel bir automation derlemesi olan, açık kaynak, MIT lisanslı bir MV3 header eklentisi bu. Sabit bir extension ID ile geliyor ve istenen header'ları kodlayan bir URL açılıp hazır olma sinyali beklenerek yapılandırılıyor. Normal Chrome --load-extension'ı reddettiği için Selenium kullanıcıları Chrome for Testing çalıştırmak zorunda; Selenium Manager, bir tarayıcı sürümü istendiğinde onu indiriyor. Grid'ler bu derlemeyi ayrı adlarla sunuyor; BrowserStack buna chromefortesting diyor.

Automation derlemesi, ModHeader'ın kendi webdriver.modheader.com add, clear ve load URL'lerine de yanıt veriyor — yazar, tarayıcının bu adresleri yerel olarak eklentiye yönlendirdiğini, yani modheader.com'a gerçekte hiçbir şey gitmediğini söylüyor — ve sayfa başlığını, ModHeader'ın eski davranışıyla uyumlu şekilde Done olarak ayarlıyor. Bu yüzden mevcut bir ModHeader test paketinin taşınması, testin yüklediği eklenti dosyasını değiştirmek kadar küçük olabilir.

Neden önemli

Header ekleme, sentetik kullanıcılarla oturum açan veya trafiği iç ortamlara yönlendiren birçok test paketinin temelini oluşturuyor ve indirme rakamları, CI'da hâlâ çalışan önemli miktarda gizli bozulmaya işaret ediyor. Bu olay ayrıca Chrome'un platform temizliğinin — önce Manifest V2 gün batımı, sonra --load-extension kısıtı — otomasyon ekiplerinin bel bağladığı teknikleri sessizce kaldırmaya devam ettiğinin bir hatırlatıcısı. Yazıdan çıkarılacak kalıcı ders, işi gördükleri yerde Playwright'ın bağlam seçenekleri veya Selenium'un CDP köprüsü gibi birinci sınıf API'leri tercih etmek ve eklenti yanından yüklemeyi varsayılan değil, geri dönüş yolu olarak görmek. Okuyucular için bir uyarı: yazıda önerilen eklenti yazarın kendi projesi; bu nedenle o önerinin benimsenmeden önce bağımsız değerlendirmeye alınması gerek.

  • #selenium
  • #chrome
  • #browser-automation
  • #testing
  • #playwright