Benut de kracht van WebDriver BiDi: Chrome- en Firefox-automatisering met Puppeteer

Poppenspeler praat nu met Firefox! 🎉 Maar wacht, was dat niet al zo? 🤔 Laten we duiken in WebDriver BiDi, het nieuwe protocol in Puppeteer, en ontdekken wat deze opwindende ontwikkeling betekent voor de Firefox-automatiseringsworkflow.

WebDriver BiDi is een nieuw gestandaardiseerd automatiseringsprotocol voor meerdere browsers dat het beste van WebDriver Classic en Chrome DevTools Protocol (CDP) combineert. Het belooft bidirectionele communicatie, waardoor efficiëntere en capabelere automatisering en gedetailleerde controle mogelijk worden. U kunt de voortgang volgen op de officiële routekaart .

Sinds onze vorige statusupdate zijn we nauw blijven samenwerken met de W3C Browser Testing and Tools Working Group . Puppeteer implementeert nu functies zoals logboekregistratie , netwerkgebeurtenissen en formulierinzendingen, dankzij de verbeteringen in WebDriver BiDi.

Laat me de code zien

Het volgende Puppeteer-script toont WebDriver BiDi in actie en werkt naadloos op Chrome en Firefox:

  1. Start de door u gekozen browser met de protocolinstelling.
  2. Controleer consoleberichten op fouten.
  3. Navigeer naar een webpagina, stel de afmetingen van de viewport in en klik op een knop.
  4. Verifieer de tekstinhoud en beweer gelijkheid.
import * as assert from 'node:assert'; 
import puppeteer from 'puppeteer';

// Arrange: Launch browser with WebDriver BiDi
const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
     product: 'firefox', // or 'chrome'
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

// Arrange: Monitor console messages
page.on('console', message => {
  if (message.type() != 'error') return;
  console.log('RECEIVED: %s', message.text());
});

// Action
await page.setViewport({width: 600, height: 1041});
await page.goto('https://coffee-cart.app/?breakable=1');

const coffee = await page.waitForSelector('[data-test="Espresso"]');
await coffee.click();

// Assert 
const checkout = await page.$('[data-test="checkout"]');
const total = await checkout.evaluate(el => el.textContent);
assert.equal(total, 'Total: $10.00');

browser.close();

Voortgang van WebDriver BiDi in Puppeteer

Om de mogelijkheden van WebDriver BiDi in Puppeteer te meten, hebben we de uitgebreide Puppeteer-testsuite gebruikt. Hoewel de implementatie van Puppeteer en WebDriver BiDi nog in uitvoering is en nog niet over alle toeters en bellen van Puppeteer met Chrome en CDP beschikt, willen we u een duidelijk beeld geven van de stand van zaken.

Firefox:

  • WebDriver BiDi heeft een kwaliteitsniveau bereikt dat geschikt is voor praktische automatiseringstaken. Mozilla heeft de Puppeteer-tests voor pdf.js met succes overgezet van Firefox en CDP naar Firefox en WebDriver BiDi.
  • Meer dan 55% van de tests met WebDriver BiDi slaagt met succes, wat de groeiende functionaliteit ervan aantoont.
  • Opvallend is dat meer dan 82 nieuwe tests WebDriver BiDi efficiënt gebruiken, wat de weg vrijmaakt voor verdere verbeteringen.

Chroom:

  • Chrome behaalt momenteel een slagingspercentage van 68% met WebDriver BiDi, wat een betrouwbare functionaliteit aantoont. Hoewel er ruimte is voor verdere optimalisatie vergeleken met de op CDP gebaseerde aanpak, belooft dit spannende toekomstige ontwikkelingen.

Bepaalde functies, zoals cookietoegang, onderschepping van netwerkverzoeken, specifieke emulatiefuncties en machtigingen, worden nog steeds actief gestandaardiseerd. Zodra ze klaar zijn, worden ze in Puppeteer geïntegreerd. Bekijk in de tussentijd de volledige lijst met Puppeteer-functies die worden ondersteund door WebDriver BiDi .

Ondersteunde Puppeteer Firefox niet al?

Hoewel Puppeteer eerder experimentele ondersteuning voor Firefox aanbood met behulp van een beperkte en niet-cross-browser implementatie van CDP, had het last van beperkingen en was het geen duurzame oplossing.

De nieuwe experimentele Firefox- en WebDriver BiDi-implementatie lost deze problemen op.

We kunnen ons voorstellen dat u nog vragen heeft, zoals:

  • Gaat de CDP-ondersteuning van Firefox verdwijnen?
  • Worden alle Puppeteer-functies ondersteund?

Voor gedetailleerde antwoorden en meer informatie, bekijk de speciale aankondiging van Firefox !

Spannende tijden in het verschiet

Cross-browser testen is een van de belangrijkste behoeften van ontwikkelaars , dus we zijn blij dat we leiding kunnen geven aan de integratie van WebDriver BiDi in Puppeteer, wat een keerpunt markeert in de richting van een meer naadloze en efficiënte cross-browser automatiseringservaring. We moedigen u aan om WebDriver BiDi met Puppeteer te verkennen.

In de toekomst zal WebDriver BiDi uiteindelijk het standaardprotocol voor Puppeteer worden, wat de weg vrijmaakt voor een consistente en krachtige automatiseringservaring.

Voor eventuele problemen die u ondervindt bij het uitvoeren van Puppeteer-tests met WebDriver BiDi, kunt u problemen openen in onze Puppeteer issue tracker .