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 du W3C, avec des implémentations dans ChromeDriver, GeckoDriver et WebKitDriver.
Chromium dispose également de son propre protocole d'automatisation du navigateur propriétaire: le protocole Chrome DevTools, 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 de CDP. En revanche, les CDP sont plus efficaces et plus puissants, mais moins interopérables.
C'est pourquoi, en 2020, le W3C Browser Testing and Tools Working Group a commencé à travailler sur WebDriver BiDi, un nouveau protocole d'automatisation de navigateur standard qui comble le fossé 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 journaux, avertissements ni erreurs de console, et sans exceptions JavaScript non détectées. 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 à l'aide des 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 accordé sur une feuille de route partagée, en alignant les futurs travaux de spécification et d'implémentation sur des cas d'utilisation clairs, de bout en bout, destinés aux 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:
- Devenez un testeur et un utilisateur précoce 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. Envoyez une demande de fonctionnalité ou renseignez-vous auprès de vos outils préférés sur leurs projets d'adoption de WebDriver BiDi.
- Participez aux discussions sur les spécifications.