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 כי שהיא לא דו-כיוונית. מעכשיו זה אפשרי באמצעות WebDriver BiDi.

הנה דוגמה להטמעה של התרחיש השני לדוגמה באמצעות קישורי השפות של 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.
  • להשתתף בדיונים בנושא המפרט.