#automatyzacjaJava03 – drivery przeglądarek setProperty vs dependency maven z gita

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 ! 🙂

Napisz komentarz