Uçtan uca test, bir uzantı paketinin oluşturulup tarayıcıya yüklenmesini içerir. Bir test aracı, etkileşimleri otomatikleştirmek ve kullanıcının geçeceğ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 etme, kullanıcı girişini simüle etme ve açık sayfaların mevcut durumunu gözlemleme yöntemleri sunar.
Eğitim için Testing Chrome Extensions with Puppeteer (Chrome uzantılarını Puppeteer ile test etme) başlıklı makaleye, Chrome uzantıları için birim testleri yazma hakkında ayrıntılı bilgi için ise Unit testing (Birim testi) başlıklı makaleye bakın.
Tarayıcı testi kitaplıklarını kullanma
Uzantılar, çeşitli test kitaplıkları tarafından desteklenir.
| Kitaplık | Yönerge |
|---|---|
| Kuklacı / Oyun Yazarı | Chrome uzantıları (Puppeteer / Playwright) başlıklı makaleyi 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
Otomatik iş akışının bir parçası olarak testler yürütürken genellikle uzantınızı ekranı olmayan bir makineye yüklemeniz gerekir. Chrome'un yeni gözetimsiz modu, Chrome'un bu gibi gözetimsiz ortamlarda çalıştırılmasına olanak tanır. --headless=new işaretini kullanarak Chrome'u başlatın
(başsız mod şu anda varsayılan olarak "eski" olarak ayarlanmıştır ve uzantıların yüklenmesini desteklemez). Seçtiğiniz otomasyon aracına bağlı olarak, işareti sizin için otomatik olarak ekleyen bir ayar olabilir.
Uzantı kimliği ayarlama
Testlerde genellikle sabit bir uzantı kimliğinin olması istenir. Bu sayede, uzantının kaynağını iletişim kurması gereken bir sunucuda izin verilenler listesine ekleme veya testlerde uzantı sayfalarını açma gibi birçok yaygın görev kolaylaşır. Bunun 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 kullanılarak erişilebilir (ör.chrome-extension://<id>/index.html). 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
Bazı kitaplıklarda, action.openPopup() API'sini kullanarak pop-up'ı açabilir ve ardından yeni bağlama referans alabilirsiniz. Örneğin, Puppeteer bu işlemin nasıl yapılacağını Chrome Uzantıları kılavuzunda açıklamaktadır.
Seçtiğiniz kitaplıkta bu mümkün değilse 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ça iletilebileceği bir geçersiz kılma işlemi uygulayabilirsiniz. Ö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 await chrome.tabs.get(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 genellikle entegrasyon testinde dahili duruma erişmekten kaçınmak en iyi uygulamadır. Bunun yerine, testlerinizi kullanıcının görebildiği öğelere göre yapmalısınız. Ancak bazen doğrudan uzantıdaki 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ı sonlandırmasını test etme
Service worker sonlandırmasını test etme hakkında bilgi edinmek için Puppeteer ile service worker sonlandırmasını test etme başlıklı makaleyi inceleyin. Ayrıca Puppeteer ve Selenium için de bir örneğimiz var.
Bazı test çerçeveleri kullanılırken hizmet çalışanlarının normal kullanımda olduğu gibi otomatik olarak sonlandırılmayabileceğini unutmayın. Selenium'da durum böyledir. Bu işlem, tüm hizmet çalışanlarına bir hata ayıklayıcı ekleyen ve bunların durdurulmasını engelleyen ChromeDriver'ı kullanır.