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

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

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

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

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

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

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

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

ضبط معرّف الإضافة

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

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

يمكن الوصول إلى صفحات الإضافات باستخدام عنوان URL الخاص بها، مثل chrome-extension://<id>/index.html. استخدِم طرق التنقّل العادية المتاحة في أداة التشغيل الآلي التي تختارها للانتقال إلى عناوين URL هذه.

اختبار نافذة منبثقة لإحدى الإضافات

باستخدام بعض المكتبات، قد تتمكّن من فتح النافذة المنبثقة باستخدام واجهة برمجة التطبيقات action.openPopup()، ثم الحصول على مرجع للسياق الجديد. على سبيل المثال، يوضّح Puppeteer كيفية إجراء ذلك في دليل إضافات Chrome.

إذا لم يكن ذلك ممكنًا في المكتبة التي اخترتها، افتح عنوان 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 await chrome.tabs.get(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:

// 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.

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