Chrome Uzantıları için uçtan uca test

Uçtan uca test, bir uzantı paketinin oluşturulmasını ve tarayıcıya yüklenmesini içerir. Test araçları, etkileşimleri otomatikleştirmek ve kullanıcının kullanacağı akışları test etmek için tarayıcı ile iletişim kurar. Uçtan uca testi destekleyen bir kitaplık genellikle tarayıcıyı kontrol etme, kullanıcı girişini simüle etme ve açık sayfaların mevcut durumunu gözlemleme yöntemleri sunar.

Eğitim için Chrome uzantılarını Puppeteer ile test etme başlıklı makaleyi, Chrome uzantıları için birim testi yazma hakkında ayrıntılı bilgi için Birim testi başlıklı makaleyi inceleyin.

Tarayıcı test kitaplıklarını kullanma

Uzantılar, çeşitli test kitaplıkları tarafından desteklenir.

Kitaplık Yönerge
Kuklacı / Oyun yazarı Chrome uzantılarına (Puppeteer / Playwright) bakın.
Selenyum Uzantıları yüklemek için ChromeOptions nesnesini kullanın. Daha fazla bilgiye buradan ulaşabilirsiniz.
WebDriverIO Web Uzantısı Testi başlıklı makaleyi inceleyin.

Gözetimsiz Chrome'da test çalıştırma

Otomatik bir iş akışı kapsamında test çalıştırırken genellikle uzantınızı ekranı olmayan bir makineye yüklemeniz gerekir. Chrome'un yeni başsız modu, Chrome'un bu gibi gözetimsiz bir ortamda çalıştırılmasına olanak tanır. Chrome'u --headless=new işaretini kullanarak başlatın (gözetimsiz şu anda varsayılan olarak "eski" değerine ayarlıdır; uzantıların yüklenmesini desteklemez). Seçtiğiniz otomasyon aracına bağlı olarak, işareti sizin yerinize otomatik olarak ekleyen bir ayar olabilir.

Uzantı kimliği belirleme

Testlerde genellikle sabit bir uzantı kimliği kullanmak istenir. Bu, uzantının iletişim kurması gereken bir sunucuda kaynağını izin verilenler listesine ekleme veya testler içinde uzantı sayfalarını açma gibi birçok yaygın görevi kolaylaştırır. Bunu yapmak için Tutarlı bir uzantı kimliği kullanma bölümündeki adımları uygulayın.

Uzantı sayfalarını test etme

Uzantı sayfalarına, ilgili URL'leri (ör.chrome-extension://<id>/index.html) kullanılarak erişilebilir. Bu URL'lere gitmek için tercih ettiğiniz otomasyon aracında bulunan normal gezinme yöntemlerini kullanın.

Uzantı pop-up'ını test etme

Uzantıların pop-up'larını başka bir sayfa bağlamında açmak şu anda mümkün değildir. Bunun yerine, pop-up'ın URL'sini yeni bir sekmede açın. Pop-up'ınızda etkin sekme kullanılıyorsa sekme kimliğinin pop-up'ınıza açıkça iletilebileceği bir geçersiz kılma işlemi uygulamayı düşünebilirsiniz. Örneğin:

const URL_PARAMS  = new URLSearchParams(window.location.search);

async function getActiveTab() {
  // Open popup.html?tab=5 to use tab ID 5, etc.
  if (URL_PARAMS.has("tab")) {
    return parseInt(URL_PARAMS.get("tab"));
  }

  const tabs = await chrome.tabs.query({
    active: true,
    currentWindow: true
  });

  return tabs[0];
}

Uzantı durumu inceleniyor

Uzantınızın dahili davranışını değiştirdiğinizde test hatalarını önlemek için genellikle en iyi uygulama, entegrasyon testinde dahili duruma erişimden kaçınmaktır. Bunun yerine, testlerinizi kullanıcının görebileceği öğelere göre yapmanız gerekir. Ancak bazen uzantıdan doğrudan verilere erişmek isteyebilirsiniz. Bu gibi durumlarda, kodu bir uzantı sayfası bağlamında yürütmeyi düşünebilirsiniz.

Puppeteer'da:

const workerTarget = await browser.waitForTarget(
  target => target.type() === 'service_worker'
);
const worker = await workerTarget.worker();

const value = await worker.evaluate(() => {
  chrome.storage.local.get('foo');
});

Selenium'da:

// Selenium doesn't allow us to access the service worker, so we need to open an extension page where we can execute the code
await driver.get('chrome-extension://<id>/popup.html');
await driver.executeAsyncScript(
  'const callback = arguments[arguments.length - 1];' +
  'chrome.storage.local.get(\'foo\').then(callback);'
);

Hizmet çalışanının feshedilmesini test etme

Hizmet işçisinin sonlandırılmasını test etme hakkında bilgi edinmek için Puppeteer ile hizmet işçisinin sonlandırılmasını test etme başlıklı makaleyi inceleyin. Puppeteer ve Selenium için de örnek sunuyoruz.

Bazı test çerçeveleri kullanıldığında servis çalışanlarının normal kullanımda olduğu gibi otomatik olarak sonlandırılmayabileceğini unutmayın. Selenium'da durum böyledir. Tüm hizmet işçilerine bir hata ayıklayıcı ekleyerek bunların durdurulmasını önleyen ChromeDriver'ı kullanır.