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

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

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

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

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

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

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

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

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

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

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

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

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