الاختبار الشامل لإضافات Chrome

يتضمن الاختبار الشامل حزمة إضافة يتم إنشاؤها وتحميلها في المتصفّح. تتواصل أداة الاختبار مع المتصفح لأتمتة التفاعلات واختبار التدفقات نفسها التي قد يمر بها المستخدم. فالمكتبة التي تتيح إجراء الاختبار الشامل توفير طرق للتحكّم في المتصفّح ومحاكاة البيانات التي أدخلها المستخدم وملاحظة الحالة الراهنة لأي صفحات مفتوحة.

يمكنك الاطّلاع على اختبار إضافات Chrome باستخدام Puppeteer للاطّلاع على برنامج تعليمي واختبار الوحدات للحصول على تفاصيل حول كتابة اختبارات الوحدات لإضافات Chrome.

استخدام مكتبات اختبار المتصفّحات

تتوافق الإضافات مع مجموعة من مكتبات الاختبار.

المكتبة الإرشادات
محرك العرائس / كاتب مسرحي الاطّلاع على إضافات Chrome (Puppeteer / Playwright)
سيلينيوم استخدِم الكائن ChromeOptions لتحميل الإضافات. يمكنك الاطّلاع على مزيد من المعلومات هنا.
WebDriverIO راجِع اختبار إضافات الويب.

إجراء الاختبارات في Chrome بلا واجهة مستخدم رسومية

عند إجراء الاختبارات كجزء من سير العمل الآلي، غالبًا ما يكون من الضروري تحميل الإضافة على جهاز لا يتضمّن شاشة. يتيح وضع التشغيل بلا واجهة مستخدم رسومية في Chrome تشغيل Chrome في بيئة غير خاضعة للمراقبة كهذه. ابدأ تشغيل Chrome باستخدام العلامة --headless=new (يتم حاليًا ضبط الإعدادات التلقائية بلا واجهة مستخدم رسومية على "القديمة"، والتي لا تتيح تحميل الإضافات). اعتمادًا على أداة التشغيل الآلي التي تختارها، قد يكون هناك إعداد يضيف العلامة تلقائيًا.

إعداد رقم تعريف إضافة

غالبًا ما يكون من المستحسن استخدام رقم تعريف إضافة ثابت في الاختبارات. ويسهِّل ذلك تنفيذ العديد من المهام الشائعة، مثل السماح بإدراج مصدر الإضافة على الخادم الذي تحتاج إلى الاتصال به، أو فتح صفحات الإضافات ضمن الاختبارات. ولإجراء ذلك، اتّبِع الخطوات الواردة ضمن الاحتفاظ بمعرّف إضافة متّسق.

اختبار صفحات الإضافات

يمكن الوصول إلى صفحات الإضافات باستخدام عنوان 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];
}

فحص حالة الإضافة

لتجنّب حالات تعذُّر الاختبار عند تغيير السلوك الداخلي للإضافة، من الأفضل عمومًا تجنُّب الوصول إلى الحالة الداخلية خلال اختبار الدمج. بدلاً من ذلك، يجب أن تبني اختباراتك على ما هو مرئي للمستخدم. ومع ذلك، قد يكون من المستحسن أحيانًا الوصول مباشرةً إلى البيانات من الإضافة. وفي هذه الحالات، ننصحك بتنفيذ الرمز في سياق صفحة الإضافة.

في 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 الذي يرفق برنامج تصحيح الأخطاء بجميع العاملين في الخدمة لمنع توقفهم.