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.