Chrome एक्सटेंशन के लिए एंड-टू-एंड टेस्टिंग

शुरू से आखिर तक की जाने वाली जांच में, ब्राउज़र में एक्सटेंशन पैकेज को बनाया और लोड किया जाता है. टेस्टिंग टूल, इंटरैक्शन को ऑटोमेट करने और उन फ़्लो की जांच करने के लिए ब्राउज़र से संपर्क करता है जिनसे उपयोगकर्ता गुज़रेगा. एंड-टू-एंड टेस्टिंग की सुविधा देने वाली लाइब्रेरी, आम तौर पर ब्राउज़र को कंट्रोल करने, उपयोगकर्ता के इनपुट को सिम्युलेट करने, और किसी भी खुले पेज की मौजूदा स्थिति को देखने के तरीके उपलब्ध कराती है.

ट्यूटोरियल के लिए, Puppeteer की मदद से Chrome एक्सटेंशन की जांच करना देखें. साथ ही, Chrome एक्सटेंशन के लिए यूनिट टेस्ट लिखने के बारे में जानने के लिए, यूनिट टेस्टिंग देखें.

ब्राउज़र टेस्टिंग लाइब्रेरी का इस्तेमाल करना

एक्सटेंशन, कई तरह की टेस्टिंग लाइब्रेरी के साथ काम करते हैं.

लाइब्रेरी दिशा-निर्देश
कठपुतली कलाकार / नाटककार Chrome एक्सटेंशन देखें (Puppeteer / Playwright).
सीलीनियम एक्सटेंशन लोड करने के लिए, ChromeOptions ऑब्जेक्ट का इस्तेमाल करें. ज़्यादा जानकारी के लिए यहां जाएं.
WebDriverIO वेब एक्सटेंशन टेस्टिंग देखें.

बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले Chrome में जांच की जा रही है

अपने-आप काम करने वाले वर्कफ़्लो के हिस्से के तौर पर टेस्ट चलाते समय, अक्सर अपने एक्सटेंशन को ऐसी मशीन पर लोड करना ज़रूरी होता है जिसमें स्क्रीन न हो. Chrome के नए हेडलेस मोड की मदद से, Chrome को इस तरह के बिना निगरानी वाले माहौल में चलाया जा सकता है. --headless=new फ़्लैग का इस्तेमाल करके Chrome को शुरू करें (फ़िलहाल, हेडलेस (सिर्फ़ बैक-एंड पर काम करने की सुविधा देने वाला ऐप्लिकेशन) डिफ़ॉल्ट रूप से "पुराने" पर सेट होता है, जो एक्सटेंशन लोड करने की सुविधा नहीं देता. आपके चुने गए ऑटोमेशन टूल के आधार पर, ऐसी सेटिंग हो सकती है जो आपके लिए अपने-आप फ़्लैग जुड़ जाती है.

एक्सटेंशन आईडी सेट करना

आम तौर पर, टेस्ट में एक तय एक्सटेंशन आईडी होना चाहिए. इससे कई सामान्य काम आसान हो जाते हैं, जैसे कि एक्सटेंशन के ऑरिजिन को उस सर्वर पर अनुमति देना जिसके साथ संपर्क करना ज़रूरी है या टेस्ट के अंदर एक्सटेंशन पेज खोलना. ऐसा करने के लिए, एक जैसा एक्सटेंशन आईडी रखना में दिया गया तरीका अपनाएं.

एक्सटेंशन पेजों की जांच करना

एक्सटेंशन पेजों को उनके यूआरएल का इस्तेमाल करके ऐक्सेस किया जा सकता है, जैसे कि chrome-extension://<id>/index.html. इन यूआरएल पर जाने के लिए, अपने पसंदीदा ऑटोमेशन टूल में मौजूद सामान्य नेविगेशन तरीकों का इस्तेमाल करें.

एक्सटेंशन के पॉप-अप की जांच करना

फ़िलहाल, किसी दूसरे पेज के संदर्भ में एक्सटेंशन पॉप-अप नहीं खोला जा सकता. इसके बजाय, पॉप-अप के यूआरएल को नए टैब में खोलें. अगर आपका पॉप-अप, ऐक्टिव टैब का इस्तेमाल करता है, तो ओवरराइड लागू करें. इससे, आपके पॉप-अप में टैब आईडी साफ़ तौर पर पास किया जा सकता है. उदाहरण के लिए:

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];
}

एक्सटेंशन की स्थिति की जांच करना

अपने एक्सटेंशन के इंटरनल व्यवहार में बदलाव करने पर, टेस्ट में आने वाली गड़बड़ियों से बचने के लिए, आम तौर पर इंटिग्रेशन टेस्ट में इंटरनल स्टेटस को ऐक्सेस करने से बचना सबसे सही तरीका है. इसके बजाय, आपको अपने जांचों को इस आधार पर करना चाहिए कि उपयोगकर्ता को क्या दिख रहा है. हालांकि, कभी-कभी एक्सटेंशन से डेटा को सीधे ऐक्सेस करने की ज़रूरत भी पड़ सकती है. ऐसे मामलों में, एक्सटेंशन पेज के संदर्भ में कोड चलाने पर विचार करें.

Puppeteer में:

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

सेवा वर्कर को बंद करने की जांच करना

सेवा वर्कर के बंद होने की जांच करने के बारे में जानने के लिए, Puppeteer की मदद से सेवा वर्कर के बंद होने की जांच करना लेख पढ़ें. हमारे पास Puppeteer और Selenium के लिए भी सैंपल है.

ध्यान दें कि कुछ टेस्टिंग फ़्रेमवर्क का इस्तेमाल करने पर, हो सकता है कि सेवा वर्कर अपने-आप बंद न हों, जैसा कि सामान्य इस्तेमाल में होता है. सेलेनियम में ऐसा ही होता है. यह ChromeDriver पर निर्भर करता है, जो सभी सर्विस वर्कर को एक डीबगर जोड़ता है जो उन्हें रुकने से रोकता है.