WebDriver BiDi: עדכון סטטוס ל-2023

המאמר הזה מכיל סקירה כללית של התכונות החדשות ב-WebDriver BiDi בשנת 2023.

מהו WebDriver BiDi?

WebDriver הוא פרוטוקול אוטומציה של דפדפן, שמוגדר כתקן W3C, עם הטמעות ב-ChromeDriver,‏ GeckoDriver ו-WebKitDriver.

ל-Chromium יש גם פרוטוקול קנייני לאוטומציה של דפדפנים: פרוטוקול Chrome DevTools או CDP.

יש כמה הבדלים מהותיים בין שני הפרוטוקולים האלה: WebDriver הוא תקן עם יכולת פעולה הדדית, אבל הפרוטוקול פחות יעיל וחסרות לו תכונות שיש ל-CDP. לעומת זאת, פלטפורמת CDP יעילה וחזקה יותר, אבל פחות ניתנת לפעולה הדדית.

לכן, בשנת 2020, קבוצת העבודה של W3C לבדיקת דפדפנים וכלים התחילה לעבוד על WebDriver BiDi, פרוטוקול אוטומציה סטנדרטי חדש לדפדפנים שמגשר על הפער בין הפרוטוקולים WebDriver Classic ו-CDP. שתי ציפורים במכה! כדי לקבל רקע נוסף, כדאי לקרוא את המאמרים מבט לאחור בזמן: ההתפתחות של אוטומציה של בדיקות ואת WebDriver BiDi – העתיד של האוטומציה בדפדפנים שונים.

מאמץ WebDriver BiDi כולל עבודת סטנדרטיזציה, יצירת בדיקות של פלטפורמת אינטרנט והטמעות למנועי דפדפנים שונים.

איפה אנחנו נמצאים עכשיו?

בשנת 2022, גם Chrome/ChromeDriver 106 וגם Firefox 102 סיפקו תמיכה בתקן WebDriver BiDi.

מאז, WebDriver BiDi נכנס לשימוש במסגרות פופולריות, ומטפל בבעיות הנפוצות ביותר של המפתחים על ידי שימוש בתכונות מבוקשות במיוחד, כמו תמיכה ברישום ביומן.

רישום ביומן באמצעות WebDriver BiDi

תרחיש לדוגמה: אימות אוטומטי של טעינת דף אינטרנט ללא יומני מסוף, אזהרות או שגיאות, וללא חריגות JavaScript שלא נלכדו. תרחיש לדוגמה נוסף הוא כאשר רוצים לכתוב בדיקה אוטומטית כדי לבדוק שדף אינטרנט מתעד אזהרה ביומן או גורם להפעלת חריגה כמתוכנן. אי אפשר לפתור את הבעיות האלה באמצעות WebDriver Classic כי הוא לא דו-כיווני. עכשיו אפשר לעשות זאת באמצעות 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.
  • הפיצו את הבשורה! משתפים את הפרויקט ברשתות החברתיות באמצעות ה-hashtag #WebDriverBiDi.
  • בקשת תמיכה אתם יכולים לשלוח בקשה להוספת תכונה או לבדוק אצל היוצרים של הכלים המועדפים עליכם מהם התוכניות שלהם לגבי אימוץ WebDriver BiDi.
  • להשתתף בדיוני המפרט.