WebDriver BiDi: mise à jour du statut 2023

Cet article vous 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 du W3C, avec des implémentations dans ChromeDriver, GeckoDriver et WebKitDriver.

Chromium dispose également de son propre protocole propriétaire d'automatisation du navigateur: Chrome DevTools Protocol, ou CDP.

Il existe des différences fondamentales entre ces deux protocoles: WebDriver est une norme interopérable, mais le protocole est moins efficace et ne dispose pas des fonctionnalités CDP. En revanche, la CDP est plus efficace et puissante, mais moins interopérable.

C'est pourquoi, en 2020, le groupe de travail W3C Browser Testing and Tools 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, consultez Un retour en arrière : l'évolution de l'automatisation des tests et WebDriver BiDi : l'avenir de l'automatisation multinavigateur.

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

Où en sommes-nous ?

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

Depuis, WebDriver BiDi a été adopté dans les frameworks populaires, en répondant aux principaux problèmes des développeurs en débloquant des fonctionnalités très demandées, comme la prise en charge de la journalisation.

Journalisation optimisée par WebDriver BiDi

Un cas d'utilisation courant consiste à vérifier automatiquement qu'une page Web se charge sans aucun journal de console, avertissement ou erreur, et sans exception JavaScript non interceptée. Vous pouvez également écrire un test automatisé pour vérifier qu'une page Web consigne un avertissement ou génère une exception lorsque cela est prévu. Ces problèmes ne peuvent pas être résolus à l'aide de WebDriver Classic, car il n'est pas bidirectionnel. WebDriver BiDi le permet désormais.

Voici un exemple d'implémentation du deuxième cas d'utilisation avec les liaisons de 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 prise en charge expérimentale de WebDriver BiDi par 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 continuons à développer la spécification BiDi WebDriver en collaboration avec d'autres fournisseurs de navigateurs et des personnes concernées du secteur qui participent au groupe de travail du W3C. Le groupe s'est récemment mis d'accord sur une feuille de route partagée, qui harmonise les prochaines spécifications et le travail d'implémentation autour de cas d'utilisation de bout en bout visibles par les utilisateurs.

Interopérabilité

À mesure que le groupe de travail spécifie collectivement d'autres fonctionnalités, nous créons également des tests de plate-forme Web pour le protocole BiDi WebDriver. Cette suite de tests partagée 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.

Prise en charge de la bidirectionnalité WebDriver: comment pouvez-vous nous aider ?

L'avenir de l'automatisation des navigateurs avec WebDriver BiDi vous intéresse-t-il ? Voici comment vous pouvez montrer votre soutien:

  • Soyez pionnier en matière de test et d'adoption et contribuez à façonner l'avenir de WebDriver BiDi.
  • Faites-en la promotion ! Partagez le projet sur les réseaux sociaux avec le hashtag #WebDriverBiDi.
  • Demandez de l'aide. Déposez une demande de fonctionnalité ou renseignez-vous auprès de vos outils préférés concernant l'adoption de WebDriver BiDi.
  • Participez aux discussions sur les spécifications.