Chrome DevTools Protocol (CDP)
dostarcza niskopoziomowy interfejs, który pozwala między innymi na inspekcję i kontrolę dokumentów, instrumentację przeglądarki, czy symulację interakcji użytkownika wykorzystywaną w automatyzacji. CDP
dostarcza również możliwość nasłuchiwania na określone zdarzenia, takie jak zdarzenia sieciowe czy zdarzenia związane z logami w konsoli.
Wiele bibliotek i rozszerzeń wykorzystuje ten protokół do orkiestracji akcji w przeglądarkach Chromium, Chrome czy Edge. Do grona tych narzędzi należy również Selenium
, które wraz z czwartym wydaniem wprowadziło wsparcie dla tego protokołu w sterownikach ChromeDriver
, EdgeDriver
, jak również FirefoxDriver
.
Dostęp do Chrome DevTools Protocol
w Selenium 4
Chrome DevTools Protocol
dostępny jest poprzez interfejs HasDevTools
, który implementowany jest przez sterowniki ChromeDriver
, EdgeDriver
i FirefoxDriver
. Interfejs ten pozwala na dostęp do obiektu DevTools
, który wykorzystany będzie do interakcji z protokołem CDP
przeglądarki:
1 | import org.openqa.selenium.chrome.ChromeDriver; |
Po utworzeniu sesji, obiekt DevTools
posłuży do wysyłania komend protokołu CDP
.
Wykonanie komendy
Metoda send
jako argument przyjmuje generyczny obiekt typu org.openqa.selenium.devtools.Command<X>
, który reprezentuje konkretną komendę protokołu CDP
:
1 | import org.openqa.selenium.devtools.v97.browser.Browser; |
W celu zlokalizowania dostępnych komend najlepiej użyć dokumentacji protokołu CDP
, a następnie zlokalizować odpowiednią klasę dostarczającą wybraną komendę.
Przykład:
- Komenda
Browser.getVersion
- dostępna jest w domenieBrowser
, która odpowiada za metody i zdarzenia związane z zarządzaniem przeglądarką - Klasa
org.openqa.selenium.devtools.{VERSION}.browser.Browser
udostępnia statyczne metody zwracające odpowiednie komendy w tej domenie:org.openqa.selenium.devtools.v97.browser.Browser#getVersion
- Odpowiedź, czyli
Browser.GetVersionResponse
, wynika z typu zwracanego przez metodęgetVersion
Nasłuchiwanie na wybrane zdarzenia
Poza wykonywaniem komend, CDP
umożliwa nasłuchiwanie na zdarzenia takie jak:
- Zdarzenia
console.log
- Wyjątki
JavaScript
- Zdarzenia sieciowe
- Metryki wydajnościowe
W celu obsługi wybranych zdarzeń należy włączyć obsługę zdarzeń dla danej domeny (metoda enable
) oraz zarejestrować obiekt nasłuchujący na zdarzenia za pomocą metody addListener
dostępnej w obiekcie DevTools
. Metoda addListener
przyjmuje dwa argumenty: typ zdarzenia oraz obiekt konsumujący dane zdarzenie będący implementacją standardowego interfejsu funkcyjnego Consumer
:
1 | import org.openqa.selenium.devtools.v97.log.Log; |
Typ zdarzenia reprezentowany jest przez generyczny obiekt org.openqa.selenium.devtools.Event<X>
i podobnie jak w przypadku komend, w celu zlokalizowania dostępnych zdarzeń najlepiej użyć dokumentacji protokołu CDP
, a następnie zlokalizować odpowiednią klasę dostarczającą wybrane zdarzenia.
Podsumowanie
Protokół Chrome DevTools Protocol
rozwija się i dostarcza coraz więcej możliwości inspekcji dokumentów, instrumentacji przeglądarki, czy symulacji interakcji użytkownika. Do ciekawych możliwości, które można wykorzystać w testach automatycznych, zaliczyłbym możliwość nasłuchiwania na zdarzenia protokołu HTTP
i możliwość modyfikacji żądań czy odpowiedzi, weryfikację logów z konsoli JavaScript
, czy w końcu możliwość emulacji urządzeń mobilnych w testach automatycznych opartych o Selenium
.
Dokumentacja
- https://www.selenium.dev/documentation/webdriver/bidirectional/chrome_devtools/
- https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/devtools/package-summary.html
- https://chromedevtools.github.io/devtools-protocol/
Repozytorium Git projektu
Jeżeli chcesz spróbować swoich sił z Selenium 4
, możesz użyć gotowego szablonu dla projektu, który znajduje się w repozytorium Git
: https://gitlab.com/qalabs/blog/junit5-selenium-gradle-template