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

یک مورد معمول استفاده، تأیید خودکار این است که یک صفحه وب بدون هیچ گونه گزارش کنسول، هشدار یا خطا و بدون هیچ گونه استثنای جاوا اسکریپت ناشناخته بارگیری می شود. مورد استفاده دیگر این است که ممکن است بخواهید یک آزمایش خودکار بنویسید تا بررسی کنید که یک صفحه وب هشداری را ثبت می کند یا در صورت نیاز یک استثنا ایجاد می کند. این مشکلات را نمی توان با استفاده از WebDriver Classic حل کرد زیرا دو طرفه نیست . 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 کمک کنید.
  • انتشار دهید! پروژه را با استفاده از هشتگ #WebDriverBiDi در شبکه های اجتماعی به اشتراک بگذارید.
  • درخواست حمایت کنید. درخواست ویژگی را ارسال کنید یا با ابزارهای مورد علاقه خود در مورد برنامه های آنها برای پذیرش WebDriver BiDi بررسی کنید.
  • در بحث های مشخصات شرکت کنید.