המאמר הזה מכיל סקירה כללית של התכונות החדשות ב-WebDriver BiDi בשנת 2023.
מהו WebDriver BiDi?
WebDriver הוא פרוטוקול אוטומציה של דפדפן, שמוגדר כתקן W3C, עם הטמעות ב-ChromeDriver, GeckoDriver ו-WebKitDriver.
ל-Chromium יש גם פרוטוקול אוטומציה ייחודי לדפדפן: Chrome DevTools Protocol (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();
הנה דוגמה לשימוש בתמיכה הניסיונית של Puppeteer ב-WebDriver BiDi:
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.
- להשתתף בדיוני המפרט.