
Cześć, trzymanie binarek na maszynie na której testy są uruchamiane jest kłopotliwe i moim zdaniem to, tak jak korzystanie z plików .jar zamiast korzystania z mavena. To samo myślę o binarkach. Ściągnij binarkę podawaj tą ścieżkę bez sensu. Albo zapychanie resourców plikami .exe, plikami bez rozszerzenia dla linuxa – też musicie wiedzieć, że binarka jest pod system więc mając 2 przeglądarki firefox, chrome i dwa systemy musimy już mieć i zaprzątać sobie głowę 4 plikami.
I oto jest rozwiązanie wyżej wymienionych problemów.

Ten człowiek stworzył coś wielkiego i jednocześnie małego i prostego.
https://github.com/bonigarcia/webdrivermanager
Wchodzimy tutaj po wszelkie informacje.
<!--https://github.com/bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.7.1</version>
<scope>test</scope>
</dependency>
Ok nasz nowy pom.xml wygląda tak :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>TestujemyAplikacjeWebowe</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
<scope>test</scope>
</dependency>
<!-- tutaj sobie wstawiamy kolejne rzeczy.exe-->
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!--https://github.com/bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.7.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
</project>
Wracamy do klasy Test1.java
Pozbywamy się getproperty lub komentujemy /*komentarz */
U mnie z jakiś powodów google blokuje mnie, twierdząc że mój ruch jest nietypowy. Zatem robię to samo tylko na bingu i tym razem zamiast xpath stosuje By.id – o tym w jaki sposób lokalizować w późniejszym wpisie na razie skupiamy się na podstawach 🙂
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; //poprawnie zaimprtowało nam to z mavena
import org.testng.annotations.Test;
public class Test1 {
@Test
public void pierwszyTest() {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.get("http://www.bing.com");
driver.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
driver.findElement(By.id("sb_form_go")).click();
driver.close();
}
}

Zmodyfikujmy kod i sprawdzmy jak wtyczka dependency radzi sobie z Firefoxem

Kod klasy Test1.java
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; //poprawnie zaimprtowało nam to z mavena
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class Test1 {
@Test
public void pierwszyTest() throws InterruptedException {
boolean chrome = false;
if(chrome) {
WebDriverManager.chromedriver().setup();
WebDriver driverchrome = new ChromeDriver();
driverchrome.get("http://www.bing.com");
driverchrome.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
driverchrome.findElement(By.id("sb_form_go")).click();
driverchrome.close();
}
else {
WebDriverManager.firefoxdriver().setup();
WebDriver driverfirefox = new FirefoxDriver();
driverfirefox.get("http://www.bing.com");
driverfirefox.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
driverfirefox.findElement(By.id("sb_form_go")).click();
driverfirefox.close();
}
}
}
Jak widać w kodzie pojawiły się powtórzenia, można je wynieść poza ifa i elsa 🙂 Dodatkowo w kolejnym wpisie pokaże wam jak wynieść definicje driverów do metody i czym właściwie jest metoda jakie cechy posiada itd.
Jak widzcie wpis dependency w maven + zastąpienie binarki linijką WebDriverManager setup. i import z dependency.
Co jeszcze potrafi WebDriverManager ?
Wszystko jest opisane na stronie GitHuba.
W javie po kropce widzimy pomieszania między tą wtyczką a selenium.

Ze strony githuba interesującą opcją jest bezkonfliktowość za pomocą

W skrócie dostosowuje pobieranie drivera do zainstalowanych przeglądarek, wykrytych w systemie.
Są też przykłady użycia innych dostępnych metod :

Z powodzeniem do naszego projektu nasza klasa testowa Test1.java może wyglądać tak :
import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; //poprawnie zaimprtowało nam to z mavena import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class Test1 { @Test public void pierwszyTest() throws InterruptedException { boolean chrome = false; if(chrome) { WebDriverManager.chromedriver().avoidAutoVersion(); WebDriverManager.chromedriver().setup(); WebDriver driverchrome = new ChromeDriver(); driverchrome.get("http://www.bing.com"); driverchrome.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa"); driverchrome.findElement(By.id("sb_form_go")).click(); driverchrome.close(); } else { WebDriverManager.firefoxdriver().avoidAutoVersion(); WebDriverManager.firefoxdriver().setup(); WebDriver driverfirefox = new FirefoxDriver(); driverfirefox.get("http://www.bing.com"); driverfirefox.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa"); driverfirefox.findElement(By.id("sb_form_go")).click(); driverfirefox.close(); } } }
I to by było na tyle, dzięki minimalnej pracy nie musimy już martwić się o binarki które są automatycznie cachowane.
A w następny wpisie zobaczycie czym są adnotacje w testng @Test już znacie, ale skupimy się na innych bardziej uniwersalnych.
Zaś później, poznamy co to są profile oraz capabillities.
Tymczasem dzięki za przeczytanie i do zo ba ! 🙂