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

Uçtan uca testte bir uzantı paketi oluşturulup tarayıcıya yüklenir. Test aracı, etkileşimleri otomatikleştirmek ve kullanıcının geçireceği akışları test etmek için tarayıcıyla iletişim kurar. Uçtan uca testi destekleyen bir kitaplık, genellikle tarayıcıyı kontrol etmenin, kullanıcı girişini simüle etmenin ve açık sayfaların mevcut durumunu gözlemlemenin yollarını sunar.

Bir eğitim için Chrome Uzantılarını Puppeteer ile Test Etme sayfasına ve Chrome uzantılarına yönelik birim testlerini yazmayla ilgili ayrıntılar için Birim testi bölümüne bakın.

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

Uzantılar bir dizi test kitaplığı tarafından desteklenir.

Kitaplık Yönerge
Kuklacı / Oyun Yazarı Chrome Uzantılarını (Puppeteer / Playwright) inceleyin.
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

Testleri otomatik bir iş akışının parçası olarak çalıştırırken genellikle uzantınızı ekranı olmayan bir makineye yüklemeniz gerekir. Chrome'un yeni gözetimsiz modu Chrome'un böyle gözetimsiz bir ortamda çalıştırılabilmesini sağlıyor. Chrome'u --headless=new işaretini kullanarak başlatın (headless şu anda varsayılan olarak "old" değerine ayarlanı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 ayarlama

Testlerde genellikle sabit bir uzantı kimliğinin olması istenir. Bu, iletişim kurması gereken bir sunucuda uzantının kaynağını izin verilenler listesine eklemek veya testlerdeki uzantı sayfalarını açmak 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ı izleyin.

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ınızda bulunan normal gezinme yöntemlerini kullanın.

Uzantı pop-up'ını test etme

Uzantı pop-up'ı 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ız etkin sekmeyi kullanıyorsa sekme kimliğinin pop-up'ınıza açık bir şekilde iletilebileceği bir geçersiz kılma işlemi uygulamayı düşünün. Ö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ı durumunu inceleme

Uzantınızın dahili davranışını değiştirdiğinizde test hatalarını önlemek için entegrasyon testinde dahili duruma erişmekten kaçınmak genellikle en iyi uygulamadır. Bunun yerine, testlerinizde kullanıcının görebildiğini temel almalısınız. Ancak, bazen verilere doğrudan uzantıdan erişmek de istenebilir. Bu durumlarda, kodu bir uzantı sayfası bağlamında çalıştırmayı düşünün.

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');
});

Selenyum'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ı feshinin test edilmesi

Hizmet çalışanı sonlandırma testi hakkında bilgi edinmek için Puppeteer ile hizmet çalışanı sonlandırma test etme sayfasını inceleyin. Ayrıca Kukla ve Selenyum için de bir örnek hazırladık.

Bazı test çerçevelerini kullanırken, Service Worker'ların normal kullanımda olduğu gibi otomatik olarak sonlandırılmayabileceğini unutmayın. Selenium'da da durum böyledir. Bu çözüm, tüm hizmet çalışanlarına, bunların durdurulmasını önleyen bir hata ayıklayıcı ekleyen ChromeDriver'a dayanır.