ক্রোম এক্সটেনশনের জন্য এন্ড-টু-এন্ড টেস্টিং

এন্ড-টু-এন্ড টেস্টিং একটি এক্সটেনশন প্যাকেজ তৈরি এবং একটি ব্রাউজারে লোড করা জড়িত। একটি টেস্টিং টুল ব্রাউজারের সাথে মিথস্ক্রিয়া স্বয়ংক্রিয়ভাবে যোগাযোগ করে এবং একই প্রবাহ পরীক্ষা করে যা একজন ব্যবহারকারীর মধ্য দিয়ে যায়। একটি লাইব্রেরি যা এন্ড-টু-এন্ড টেস্টিং সমর্থন করে সাধারণত ব্রাউজার নিয়ন্ত্রণ করার উপায় প্রদান করে, ব্যবহারকারীর ইনপুট অনুকরণ করে এবং যেকোনো খোলা পৃষ্ঠার বর্তমান অবস্থা পর্যবেক্ষণ করে।

একটি টিউটোরিয়ালের জন্য পাপেটিয়ারের সাথে ক্রোম এক্সটেনশন পরীক্ষা করা এবং ক্রোম এক্সটেনশনের জন্য ইউনিট পরীক্ষা লেখার বিশদ বিবরণের জন্য ইউনিট পরীক্ষা দেখুন।

ব্রাউজার টেস্টিং লাইব্রেরি ব্যবহার করে

এক্সটেনশনগুলি পরীক্ষামূলক লাইব্রেরির একটি পরিসর দ্বারা সমর্থিত।

লাইব্রেরি নির্দেশনা
পুতুল/নাট্যকার ক্রোম এক্সটেনশন দেখুন ( পাপেটিয়ার / নাট্যকার )।
সেলেনিয়াম এক্সটেনশন লোড করতে ChromeOptions অবজেক্ট ব্যবহার করুন। আরও তথ্য এখানে পাওয়া যায়।
WebDriverIO ওয়েব এক্সটেনশন টেস্টিং দেখুন।

হেডলেস ক্রোমে পরীক্ষা চলছে

একটি স্বয়ংক্রিয় কর্মপ্রবাহের অংশ হিসাবে পরীক্ষা চালানোর সময়, আপনার এক্সটেনশনটি এমন একটি মেশিনে লোড করার প্রয়োজন হয় যার একটি স্ক্রীন নেই৷ ক্রোমের নতুন হেডলেস মোড ক্রোমকে এইরকম একটি অনুপস্থিত পরিবেশে চালানোর অনুমতি দেয়। --headless=new পতাকা ব্যবহার করে Chrome শুরু করুন (হেডলেস বর্তমানে ডিফল্ট "পুরানো", যা লোডিং এক্সটেনশন সমর্থন করে না)। আপনার বেছে নেওয়া অটোমেশন টুলের উপর নির্ভর করে, এমন একটি সেটিং থাকতে পারে যা আপনার জন্য স্বয়ংক্রিয়ভাবে পতাকা যোগ করে।

একটি এক্সটেনশন আইডি সেট করা হচ্ছে

প্রায়ই পরীক্ষায় একটি নির্দিষ্ট এক্সটেনশন আইডি থাকা বাঞ্ছনীয়। এটি অনেক সাধারণ কাজকে সহজ করে তোলে যেমন একটি সার্ভারে এক্সটেনশনের উত্সের অনুমতি-তালিকাভুক্ত করা যার সাথে যোগাযোগ করতে হবে, বা পরীক্ষার মধ্যে এক্সটেনশন পৃষ্ঠাগুলি খোলা। এটি করার জন্য, একটি সামঞ্জস্যপূর্ণ এক্সটেনশন আইডি রাখা এর অধীনে পদক্ষেপগুলি অনুসরণ করুন।

এক্সটেনশন পৃষ্ঠাগুলি পরীক্ষা করা হচ্ছে

এক্সটেনশন পৃষ্ঠাগুলি তাদের সংশ্লিষ্ট URL ব্যবহার করে অ্যাক্সেস করা যেতে পারে, যেমন chrome-extension://<id>/index.html । এই URLগুলিতে নেভিগেট করতে আপনার পছন্দের অটোমেশন টুলে উপলব্ধ সাধারণ নেভিগেশন পদ্ধতিগুলি ব্যবহার করুন৷

একটি এক্সটেনশন পপআপ পরীক্ষা করা হচ্ছে

অন্য পৃষ্ঠার প্রসঙ্গে একটি এক্সটেনশন পপআপ খোলা বর্তমানে সম্ভব নয়। পরিবর্তে, একটি নতুন ট্যাবে পপআপের URL খুলুন৷ যদি আপনার পপআপ সক্রিয় ট্যাব ব্যবহার করে, তাহলে একটি ওভাররাইড প্রয়োগ করার কথা বিবেচনা করুন যেখানে একটি ট্যাব আইডি আপনার পপআপে স্পষ্টভাবে পাস করা যেতে পারে। যেমন:

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

এক্সটেনশন অবস্থা পরিদর্শন করা হচ্ছে

আপনি যখন আপনার এক্সটেনশনের অভ্যন্তরীণ আচরণ পরিবর্তন করেন তখন পরীক্ষা ব্যর্থতা এড়াতে, একটি ইন্টিগ্রেশন পরীক্ষায় অভ্যন্তরীণ অবস্থা অ্যাক্সেস করা এড়াতে সাধারণত সর্বোত্তম অনুশীলন। পরিবর্তে, ব্যবহারকারীর কাছে যা দৃশ্যমান তার উপর আপনার পরীক্ষার ভিত্তি করা উচিত। যাইহোক, কখনও কখনও এক্সটেনশন থেকে সরাসরি ডেটা অ্যাক্সেস করা বাঞ্ছনীয় হতে পারে। এই ক্ষেত্রে, এক্সটেনশন পৃষ্ঠার প্রেক্ষাপটে কোড চালানোর কথা বিবেচনা করুন।

পুতুলে:

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-এর সাথে পরিক্ষা পরিসেবা কর্মী সমাপ্তি দেখুন। আমাদের কাছে পাপেটিয়ার এবং সেলেনিয়ামের জন্য একটি নমুনা রয়েছে।

নোট করুন যে কিছু পরীক্ষার কাঠামো ব্যবহার করার সময়, পরিষেবা কর্মীরা স্বাভাবিক ব্যবহারের মতো স্বয়ংক্রিয়ভাবে শেষ নাও হতে পারে। এটি সেলেনিয়ামের ক্ষেত্রে। এটি ChromeDriver-এর উপর নির্ভর করে যা সমস্ত পরিষেবা কর্মীদের একটি ডিবাগার সংযুক্ত করে যাতে তাদের থামানো থেকে বাধা দেয়।