WebDriver BiDi: statusupdate 2023

Dit artikel geeft een overzicht van wat er nieuw is in WebDriver BiDi in 2023.

Wat is WebDriver BiDi?

WebDriver is een browserautomatiseringsprotocol, gedefinieerd als een W3C-standaard, met implementaties in ChromeDriver, GeckoDriver en WebKitDriver.

Chromium heeft ook zijn eigen eigen browserautomatiseringsprotocol: het Chrome DevTools Protocol of CDP.

Er zijn enkele fundamentele verschillen tussen deze twee protocollen: WebDriver is een interoperabele standaard, maar het protocol is minder efficiënt en mist de functies die CDP wel heeft. CDP is daarentegen efficiënter en krachtiger, maar minder interoperabel.

Daarom begon de W3C Browser Testing and Tools Working Group in 2020 te werken aan WebDriver BiDi , een nieuw standaard browserautomatiseringsprotocol dat de kloof overbrugt tussen de WebDriver Classic- en CDP-protocollen. Het beste van beide werelden! Lees Een terugblik in de tijd: de evolutie van testautomatisering en WebDriver BiDi — de toekomst van cross-browser automatisering voor meer achtergrondinformatie.

De inspanning van WebDriver BiDi omvat standaardisatiewerk, het creëren van webplatformtests en implementaties voor verschillende browsermotoren.

Waar zijn we nu?

In 2022 hebben zowel Chrome/ChromeDriver 106 als Firefox 102 ondersteuning geleverd voor de WebDriver BiDi-standaard.

Sindsdien heeft WebDriver BiDi ingang gevonden in populaire raamwerken, waarbij de pijnpunten van de belangrijkste ontwikkelaars worden aangepakt door veelgevraagde functies te ontgrendelen, zoals ondersteuning voor logboekregistratie .

Logboekregistratie mogelijk gemaakt door WebDriver BiDi

Een veelvoorkomend gebruiksscenario is het automatisch verifiëren dat een webpagina wordt geladen zonder consolelogboeken, waarschuwingen of fouten en zonder niet-afgevangen JavaScript-uitzonderingen. Een ander gebruiksscenario is dat u misschien een geautomatiseerde test wilt schrijven om te controleren of een webpagina een waarschuwing registreert of een uitzondering genereert wanneer dat bedoeld is. Deze problemen kunnen niet worden opgelost met WebDriver Classic omdat het niet bidirectioneel is . WebDriver BiDi maakt dit nu mogelijk.

Hier is een voorbeeldimplementatie van de tweede use case met behulp van de JavaScript-taalbindingen van 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();

Hier is een voorbeeld waarbij gebruik wordt gemaakt van de experimentele WebDriver BiDi-ondersteuning van 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();

Dezelfde functionaliteit is beschikbaar via andere abstracties zoals WebdriverIO .

Een gedeelde publieke roadmap

We zijn nog steeds bezig met het uitwerken van de WebDriver BiDi-specificatie in samenwerking met andere browserleveranciers en belanghebbenden uit de sector die deelnemen aan de W3C-werkgroep. De groep heeft onlangs overeenstemming bereikt over een gedeelde routekaart , waarin de komende specificatie- en implementatiewerkzaamheden op één lijn worden gebracht rond duidelijke, gebruikersgerichte end-to-end gebruiksscenario's.

Interoperabiliteit

Naarmate de werkgroep gezamenlijk meer functies specificeert, creëren we ook webplatformtests voor het WebDriver BiDi-protocol. Deze gedeelde testsuite helpt ons de juistheid en interoperabiliteit van implementaties te verifiëren. U kunt de nieuwste testresultaten voor verschillende browsers bekijken op het WPT Dashboard .

Ondersteuning van WebDriver BiDi: hoe kunt u helpen?

Bent u enthousiast over de toekomst van browserautomatisering met WebDriver BiDi? Zo kunt u uw steun betuigen:

  • Wees een early tester en adopter en help mee de toekomst van WebDriver BiDi vorm te geven.
  • Vertel het verder! Deel het project op sociale media met de hashtag #WebDriverBiDi .
  • Vraag om ondersteuning. Dien een functieverzoek in of vraag bij uw favoriete tools naar hun plannen voor het adopteren van WebDriver BiDi.
  • Neem deel aan de specificatiebesprekingen .