WebDriver BiDi gotowy do wykorzystania w środowisku produkcyjnym w przeglądarkach Firefox, Chrome i Puppeteer

W ubiegłym tygodniu wspólnie z BrowserStack ogłosiliśmy, że WebDriver BiDi jest gotowy do wdrożenia w BrowserStack. W tym tygodniu kontynuujemy letnie testowanie WebDriver BiDi, wprowadzając do wersji produkcyjnej obsługę WebDriver BiDi w Firefox 129 i Puppeteer 23.

Od ponad 4 lat Mozilla współpracuje z nami w zakresie WebDriver BiDi. Początkowo pomagała w kształtowaniu nowego standardu, a potem stopniowo wdrażała go w Firefoxie, sumiennie dokumentując postępy w biuletynie WebDriver Firefoxa.

WebDriver BiDi jest teraz gotowy do wdrożenia w Firefoxie, a Puppeteer od wersji 23 zapewnia stabilną obsługę Firefoxa za pomocą WebDriver BiDi. Dzięki temu możesz automatyzować Firefoxa za pomocą tego samego zwięzłego interfejsu API co w Chrome. Obsługa protokołu Chrome DevTools (CDP) przez Puppeteer pozostaje niezmieniona.

Firefox, CDP i Puppeteer

Puppeteer to niezawodne narzędzie dla programistów, które umożliwia automatyzację przeglądarek opartych na Chromium za pomocą protokołu Chrome DevTools, znanego też jako CDP. W 2019 r. Puppeteer otrzymał obsługę eksperymentalną w Firefoksie.

Aby to umożliwić, Mozilla wdrożyła i utrzymywała podzbiór CDP w Firefox. To rozwiązanie umożliwia automatyzację przeglądarki Firefox za pomocą interfejsu Puppeteer API, ale wiąże się z pewnymi ograniczeniami:

  • Jak wskazuje nazwa, CDP jest używany przez Narzędzie deweloperskie w Chrome i musi być dostosowywany do wymagań tego narzędzia.
  • CDP nie jest ustandaryzowane w ramach wspólnej, publicznej specyfikacji, a jego utrzymanie w Firefoksie wymagało ciągłej komunikacji i wysiłku.
  • Firefox wdrożył tylko podzbiór interfejsu CDP, więc Puppeteer nie może zagwarantować, że jego pełny interfejs API będzie działać z Firefoxem, co może wprowadzać użytkowników w błąd.

Chociaż przez kilka ostatnich lat razem z Mozilla utrzymywaliśmy tę usługę, zawsze wiedzieliśmy, że nie jest to trwałe rozwiązanie. W ramach tego partnerstwa i w współpracy z innymi dużymi dostawcami przeglądarek i narzędzi opracowaliśmy WebDriver BiDi.

Współpraca to podstawa

Zespół Firefoxa chętnie pracuje nad implementacją WebDrivera BiDi w Firefoxie. Jednocześnie zespół Puppeteer rozszerza obsługę BiDi w WebDriverze w interfejsie Puppeteer API. Obydwa zespoły pracowały nad tym, aby udostępnić wszystkie interfejsy API wymagane do automatyzacji w produkcji za pomocą WebDriver BiDi w Puppeteer, zapewniając obsługę zarówno w Chrome, jak i w Firefox.

Panel zespołu udostępnionego, który pokazuje liczbę zaliczonych testów w ciągu ostatnich kilku miesięcy.
Panel informacyjny udostępnionego zespołu pokazujący liczbę zaliczonych testów w ciągu ostatnich kilku miesięcy.

Dzięki temu użytkownicy Puppeteer mogą wybrać Firefoxa lub Chrome do automatyzacji, podając klucz konfiguracji browser podczas uruchamiania instancji Puppeteer.

import puppeteer from 'puppeteer';

const firefoxBrowser = await puppeteer.launch({
  browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();

const chromeBrowser = await puppeteer.launch({
  browser: 'chrome',  
  protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();

Więcej informacji o nowościach w Firefox 129 i o działaniach Mozilli nad WebDriver BiDi znajdziesz w powiązanym poście na blogu Mozilla Hacks.

Wsparcie CDP w przyszłości

Powyższy fragment kodu pokazuje, że aby zautomatyzować Chrome za pomocą WebDriver BiDi w Puppeteer, musisz jawnie ustawić protocol na webDriverBiDi. Dzieje się tak, ponieważ w przypadku Chrome Puppeteer będzie domyślnie używać CDP, aby nie zakłócać dotychczasowych automatyzacji, ale też nadal obsługiwać automatyzacje specjalizowane pod kątem funkcji Chrome.

Obsługa CDP w Firefox została wycofana od wersji 129 i zostanie usunięta pod koniec 2024 roku. Jeśli masz automatyzacje, które korzystają z obsługi CDP w Firefox, zdecydowanie zalecamy migrację do WebDriver BiDi. Jeśli to niemożliwe, wyślij e-maila na adres dev-webdriver@mozilla.org, podając swój przypadek użycia.