Selenium 4 - Basic Auth

Implementacja uwierzytelniania Basic Auth w testach automatycznych opartych o Selenium była zawsze możliwa, ale wymagała nieco gimnastyki. Selenium 4 wprowadziło ulepszony i prosty sposób na obsługę tego sposobu uwierzytelniania.

Konfiguracja sterownika

Kluczowy w obsłudze Basic Auth w Selenium 4 jest interfejs HasAuthentication. Pozwala on na szybkie zarejestrowanie obsługi uwierzytelniania za pomocą metody register. Istotne jest, aby sterownik, którego używamy w testach, implementował ten interfejs:

1
2
3
4
var driver = new ChromeDriver();

var authentication = (HasAuthentication) driver;
authentication.register(() -> new UsernameAndPassword("guest", "guest"));

Metoda register pozawala na zarejestrowanie obiektu Credentials (implementowanego przez klasę UsernameAndPassword), który zostanie wykorzystany w przypadku wykrycia konieczności uwierzytelniania. Innymi słowy, jeżeli Selenium wykryje konieczność uwierzytelniania Basic Auth dla adresu URL, użyje przekazanego obiektu UsernameAndPassword:

1
2
3
4
5
6
7
8
@Test
void authenticatesProperlyWithBasicAuth() {
var authentication = (HasAuthentication) driver;
authentication.register(() -> new UsernameAndPassword("guest", "guest"));

driver.get("https://jigsaw.w3.org/HTTP/Basic");
assertThat(driver.getPageSource()).contains("Your browser made it!");
}

Jeżeli istnieje konieczność wskazania, dla których adresów URL ma zostać wykonane uwierzytelnianie, należy użyć dwuargumentowej wersji metody register:

1
2
3
4
5
6
7
8
var driver = new ChromeDriver();


var authentication = (HasAuthentication) driver;
authentication.register(
uri -> uri.getHost().contains("jigsaw.w3.org"),
() -> new UsernameAndPassword("guest", "guest")
);

Po zarejestrowaniu obsługi uwierzytelniania, każde kolejne wywołanie metody driver.get(String url) wymagającej uwierzytelniania zadziała zgodnie z oczekiwaniami

Podsumowanie

Selenium 4 wprowadził nowy interfejs HasAthentication, który umożliwia prostą rejestrację obsługi uwierzytelniania typu Basic Auth oraz Digest.

Niestety, implementacja ogranicza się aktualnie do jedynie dwóch sterowników, ChromeDriver i EdgeDriver, co nie pozwala na wykorzystanie tego sposobu konfiguracji w testach zaimplementowanych w formie przenośnej i możliwej do wykonania na wielu różnych przeglądarkach.

Dokumentacja API

https://www.selenium.dev/selenium/docs/api/java/index.html?org/openqa/selenium/HasAuthentication.html

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

Rafał Borowiec

Nazywam się Rafał Borowiec. Jestem w branży IT od ponad 10 lat, przygodę rozpoczynałem jako tester oprogramowania. Oprócz testowania oprogramowania i zapewniania jakości, specjalizuję się w wytwarzaniu oprogramowania oraz zarządzaniu projektami i zespołami. Chętnie dzielę się wiedzą, prowadzę blog dotyczący programowania, jestem wykładowcą oraz trenerem IT.