WebDriver BiDi: mise à jour du statut 2023

Cet article présente les nouveautés de WebDriver BiDi en 2023.

Qu'est-ce que WebDriver BiDi ?

WebDriver est un protocole d'automatisation de navigateur, défini comme une norme W3C, avec des implémentations dans ChromeDriver, GeckoDriver et WebKitDriver.

Chromium dispose également de son propre protocole d'automatisation de navigateur propriétaire: le protocole CDP (Chrome DevTools Protocol).

Il existe des différences fondamentales entre ces deux protocoles: WebDriver est une norme interopérable, mais le protocole est moins efficace et ne propose pas les fonctionnalités de la plate-forme de données client. En revanche, elle est plus efficace et puissante, mais elle est moins interopérable.

C'est pourquoi, en 2020, le groupe de travail sur les outils et les tests du navigateur du W3C a commencé à travailler sur WebDriver BiDi, un nouveau protocole standard d'automatisation des navigateurs qui fait le lien entre les protocoles WebDriver Classic et CDP. Le meilleur des deux mondes ! Pour en savoir plus, lisez les articles Revue dans le temps: l'évolution de l'automatisation des tests et WebDriver BiDi, l'avenir de l'automatisation multinavigateur.

L'initiative WebDriver BiDi implique un travail de standardisation, la création de tests de plate-forme Web et des implémentations pour différents moteurs de navigateur.

Où en sommes-nous maintenant ?

En 2022, Chrome/ChromeDriver 106 et Firefox 102 sont compatibles avec la norme WebDriver BiDi.

Depuis, WebDriver BiDi a été adopté dans les frameworks populaires et résout les principales difficultés rencontrées par les développeurs en profitant de fonctionnalités très demandées telles que la prise en charge de la journalisation.

Journalisation fournie par WebDriver BiDi

Un cas d'utilisation courant consiste à vérifier automatiquement qu'une page Web se charge sans journaux de la console, sans avertissement, sans erreur et sans exception JavaScript non interceptée. Autre cas d'utilisation : vous pouvez écrire un test automatisé pour vérifier qu'une page Web génère un avertissement ou génère une exception comme prévu. Ces problèmes ne peuvent pas être résolus à l'aide de la version classique de WebDriver, car elle n'est pas bidirectionnelle. C'est désormais possible grâce à WebDriver BiDi.

Voici un exemple d'implémentation du deuxième cas d'utilisation utilisant les liaisons en langage JavaScript de 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();

Voici un exemple utilisant la compatibilité expérimentale BiDi WebDriver de 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();

La même fonctionnalité est disponible via d'autres abstractions telles que WebdriverIO.

Une feuille de route publique partagée

Nous sommes encore en train d'étoffer la spécification WebDriver BiDi en collaboration avec d'autres éditeurs de navigateurs et des intervenants du secteur qui participent au groupe de travail du W3C. Le groupe a récemment convenu d'une feuille de route partagée, afin d'aligner le travail de spécification et d'implémentation à venir sur des cas d'utilisation clairs et de bout en bout.

Interopérabilité

Étant donné que le groupe de travail spécifie collectivement davantage de fonctionnalités, nous créons également des tests de plate-forme Web pour le protocole WebDriver BiDi. Cette suite de tests partagés nous aide à vérifier l'exactitude et l'interopérabilité des implémentations. Vous pouvez consulter les derniers résultats des tests pour différents navigateurs dans le tableau de bord WPT.

Compatibilité avec WebDriver BiDi: comment pouvez-vous aider ?

Êtes-vous impatient de découvrir l'avenir de l'automatisation des navigateurs avec WebDriver BiDi ? Voici comment vous pouvez manifester votre soutien:

  • Participez aux tests et utilisateurs de la première heure et contribuez à façonner l'avenir de WebDriver BiDi.
  • Parlez-en autour de vous ! Partagez le projet sur les réseaux sociaux à l'aide du hashtag #WebDriverBiDi.
  • Demandez de l'aide. Déposez une demande de fonctionnalité ou vérifiez auprès de vos outils préférés qu'ils envisagent d'adopter WebDriver BiDi.
  • Participez aux discussions sur les spécifications.