WebDriver BiDi: آخر أخبار الحالة لعام 2023

تقدّم هذه المقالة نظرة عامة على الميزات الجديدة في WebDriver BiDi في عام 2023.

ما هو WebDriver BiDi؟

WebDriver هو بروتوكول آليًا في المتصفِّح، ويُعرَّف كمعيار W3C، ويتم تنفيذه في ChromeDriver وGeckoDriver وWebKitDriver.

يتضمّن Chromium أيضًا بروتوكولاً خاصًا به لأتمتة المتصفِّح، وهو "بروتوكول أدوات مطوّري البرامج في Chrome" أو CDP.

هناك بعض الاختلافات الأساسية بين هذين البروتوكولين: WebDriver هو معيار قابل للتشغيل التفاعلي، لكن البروتوكول أقل كفاءة ويفتقر إلى الميزات الموجودة لدى CDP. وفي المقابل، تعد CDP أكثر كفاءة وفعالية، ولكنها أقل قابلية للتشغيل التفاعلي.

لهذا السبب في عام 2020، بدأ فريق W3C Browser Testing and Tools Working Group في العمل على WebDriver BiDi، وهو بروتوكول آلي عادي جديد على المتصفِّح يعمل على سد الفجوة بين بروتوكولَي WebDriver Classic وCDP. وأفضل ما في الميزتين! يمكنك الاطّلاع على مقالة نظرة على الماضي: تطوير التشغيل الآلي للاختبار وWebDriver BiDi: مستقبل التشغيل الآلي على المتصفحات المتعددة للحصول على مزيد من المعلومات.

تتضمن جهود WebDriver BiDi أعمال توحيد وإنشاء اختبارات منصة Web Platform وعمليات تنفيذ لمحرّكات متصفّح مختلفة.

أين نحن الآن؟

في عام 2022، وفّر كل من Chrome/ChromeDriver 106 وFirefox 102 دعمًا لمعيار WebDriver BiDi.

ومنذ ذلك الحين، اعتمدت WebDriver BiDi على أطر العمل الرائجة، وعالجت هذه التحديات الصعبة التي واجهت أهمّ المشاكل لدى المطوّرين من خلال إتاحة الميزات المطلوبة كثيرًا، مثل إتاحة التسجيل.

التسجيل بواسطة WebDriver BiDi

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

في ما يلي مثال لتنفيذ حالة الاستخدام الثانية باستخدام روابط لغة JavaScript في Selenium:

import * as assert from 'node:assert';
import { Builder, LogInspector } from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome.js';

const driver = new Builder()
  .forBrowser('chrome')
  .setChromeOptions(new chrome.Options().enableBidi())
  .build();

const inspector = await LogInspector(driver);
await inspector.onConsoleEntry((entry) => {
  console.log(`Console message received: [${
    entry.type}][${entry.level}] ${entry.text}`);
});

await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html');
await driver.findElement({ id: 'consoleLog' }).click();

await driver.quit();

في ما يلي مثال على استخدام دعم WebDriver BiDi التجريبي من Puppeteer:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
  headless: 'new',
});

const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

page.on('console', (message) => {
  console.log(`Console message received: [${
    message.type()
  }] ${message.text()}`);
});

await page.goto(`https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html`);
await page.evaluate(() => {
  document.querySelector('#consoleLog').click();
});

await browser.close();

تتوفر الوظيفة نفسها من خلال التجريدات الأخرى، مثل WebdriverIO.

خارطة طريق عامة مشتركة

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

التوافقية

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

دعم WebDriver BiDi: كيف يمكنك المساعدة؟

هل أنت متحمّس بشأن مستقبل التشغيل الآلي للمتصفِّح باستخدام WebDriver BiDi؟ في ما يلي كيفية إظهار الدعم:

  • يمكنك أن تكون من أوائل إلى المختبِرين والمستخدِمين في مرحلة مبكرة وساعِد في تشكيل مستقبل WebDriver BiDi.
  • يُرجى نشر الخبر. مشاركة المشروع على وسائل التواصل الاجتماعي باستخدام الهاشتاغ #WebDriverBiDi
  • طلب الدعم: قدِّم طلب ميزة أو تحقّق من أدواتك المفضّلة بشأن خططها لاستخدام WebDriver BiDi.
  • شارِك في المناقشات حول المواصفات.