Selenium WebDriverManager dla projektów w Java - pierwsze kroki

WebDriver API jest protokołem definiującym niezależny od technologii interfejs do kontrolowania przeglądarek. Producenci popularnych przeglądarek często dostarczają własną implementację WebDriver API, nazywaną sterownikiem (ang. driver), która do komunikacji z przeglądarką używa API dostarczonego przez jej producenta. Przykładami takich sterowników są geckodriver dla Mozilla Firefox oraz chromedriver dla Google Chrome.

Manualne zarządzanie wersjami sterowników w projektach jest czasochłonne i podatne na błędy, dlatego też zalecam używanie narzędzi automatyzujących ten proces. Najpopularniejszym narzędziem wykorzystywanym w projektach opartych o technologię Java jest WebDriverManager - biblioteka umożliwiająca automatyczne zarządzanie binariami sterowników wymaganymi przez Selenium WebDriver.

Działanie WebDriverManager

Biblioteka WebDriverManager rozwiązuje problem zarządzania sterownikami do przeglądarek poprzez automatyczne wykonanie następujących kroków:

  1. Sprawdzenie wersji zainstalowanej przeglądarki
  2. Znalezienie właściwej wersji sterownika dla zainstalowanej przeglądarki
  3. Pobranie sterownika i zapisanie go w lokalnym katalogu
  4. Eksport zmiennych środowiskowych wykorzystywanych przez Selenium

W wyniku tego otrzymujemy środowisko, które jest prawidłowo skonfigurowane i gotowe do automatycznego kontrolowania przeglądarki. Jak więc skorzystać z tej metody?

Dodanie zależności do projektu

Bibliotekę WebDriverManager znajdziesz w centralnym repozytorium Maven, dzieki czemu możesz ją wykorzystać jako zależność w projektach opartych zarówno o Maven, jak i Gradle.

Dla projektu wykorzystującego Gradle, do pliku build.gradle dodaj zależność:

1
2
3
4
dependencies {   
testCompile("io.github.bonigarcia:webdrivermanager:3.5.0")
}

Kompletny plik konfiguracyjny, z zależnościami JUnit 5, Selenium oraz WebDriverManager, będzie wówczas wyglądał następująco:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
apply plugin: 'java'

sourceCompatibility = 12

repositories {
mavenCentral()
}

dependencies {
testCompile("org.junit.jupiter:junit-jupiter-api:5.4.2")
testCompile("org.junit.jupiter:junit-jupiter-engine:5.4.2")
testCompile("org.seleniumhq.selenium:selenium-java:3.141.59")
testCompile("io.github.bonigarcia:webdrivermanager:3.5.0")
}

compileTestJava {
options.encoding = "UTF-8"
}

test {

useJUnitPlatform()

testLogging {
events "passed", "skipped", "failed"
}

reports {
html.enabled = true
}
}

wrapper {
gradleVersion = '5.4.1'
}

Tip: Aby łatwo skonfigurować środowisko do tworzenia testów w technologii Java z wykorzystaniem JUnit 5 oraz Selenium, możesz skorzystać z naszych artykułów zawierających instrukcje dla systemu Windows: https://blog.qalabs.pl/java/przygotowanie-srodowiska/ oraz macOS: https://blog.qalabs.pl/narzedzia/java-selenium-macos/

Podstawowe wykorzystanie biblioteki w testach

Automatyczne zarządzanie sterownikami przeglądarek jest możliwe przy pomocy statycznych metod klasy WebDriverManager, które pozwalają skonfigurować wspierany przez bibliotekę sterownik:

1
WebDriverManager.chromedriver().setup();

Można również zastosować bardziej ogólne rozwiązanie i sparametryzować typ przeglądarki:

1
WebDriverManager.getInstance(DriverManagerType.CHROME).setup()

WebDriverManager umożliwia zarządzenie sterownikami do przeglądarek Chrome, Firefox, Opera, PhantomJS, Microsoft Edge oraz Internet Explorer.

Przykładowy test wykorzystujący WebDriverManager jest następujący:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class WebDriverManagerTest {

private WebDriver driver;

@BeforeAll
static void setupChromeDriver() {
WebDriverManager.chromedriver().setup();
}

@BeforeEach
void chromeDefault() {
driver = new ChromeDriver();
}

@AfterEach
void tearDown() {
driver.quit();
}

@Test
void qaLabs() {
driver.get("https://qalabs.pl");

assertAll(
() -> assertEquals("QA Labs - Warsztaty dla Specjalistów IT", driver.getTitle()),
() -> assertNotNull(driver.findElement(By.cssSelector("#page-top > header div.intro-heading")).getText()),
() -> assertNotNull(driver.findElement(By.cssSelector("#page-top > header div.intro-lead-in")).getText())
);
}
}

Podsumowanie

WebDriverManager jest biblioteką, która rozwiązuje problem poprawnej konfiguracji środowiska dla testów z użyciem Selenium WebDriver. Ułatwia ona znacząco tworzenie jak i uruchamianie testów w różnych systemach operacyjnych, z użyciem przeglądarek (i sterowników) w różnych wersjach.

Zobacz również

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.