#automatyzacjaJava04 – adnotacje w TestNG plus refaktor

Hej wszystkim ostatni dzień roku … 🙁 😀
Dziś będziemy robić po pierwsze refaktor, a dokładniej wyodrębnienie kodu dotyczącego tylko i wyłącznie sterowników przeglądarek do metody oraz pobawimy się adnotacjami.
Właściwie adnotacje to oznaczenie metody jako takiej która ma się wykonać w określonym porządku do jakiegoś adnotacja jest przypisana
After lub Before. Adnotacją najczęściej towarzyszą asercje.
Asercja to w skrócie sprawdzenie zestawu danych czy jest on poprawny czy też nie, w ten sposób oznacza, się czy test przeszedł czy nie.
Ale o asercjach w następnych wpisach 🙂

Wracamy do naszej klasy testowej Test1.java i dodajemy drugi test.
Na podstawie kopiuj wklej pierwszego, ale zmienimy sobie wyszukiwarkę na duckduckgo (bo google mnie blokuje :D).
Widzimy pewną zależność między testami.
Otóż otwieramy dwa razy drivera i dwa razy go zamykamy, bez sensu ?
No bez sensu w pierwszym teście, moglibyśmy usunąć close drivera.
Zaś w drugim teście ify, odpowiedzialne za stworzenie drivera.
Z pomocą przychodzą nam adnotacje.

Nasza klasa zmieniła się dość mocno i jest dużo bardziej czytelna a więc :
Zmienna drivera wyniesiona, na samą górę, razem z logiczną zmienną dotyczącą wyboru przeglądarki.
Zastosowałem @BeforeSuite czyli adnotacje, określającą co się dzieje przed Suitem czyli Zestawem testów.
Ktoś się zapyta dlaczego nie @BeforeTest ? |
Before test robiłby nam setup na nowo Chrome/Firefox drivera po każdym teście 20 testów 20 razy odpalany jest driver ?
To samo zastosowałem @AfterSuite czyli po zestawie zabijaj driver.
Dlaczego nie @AfterTest ? Zabijało by nam to driver po pierwszym drugim i kolejnym teście, ma to sens jeśli to co dałem dalibyśmy w @BeforeTest otwieramy przeglądarke robimy test zamykamy, następny test otwieramy zamykamy bez sensu totalnie 🙂

Widzimy poprawność wykonania dwóch testów. Kod wygląda następująco :

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.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

public class Test1 {
    /**/
    public WebDriver driver;
    public boolean chrome = false;

    /*adnotacja przed zestawie testów suite to zestaw testów robimy metode ktora cos robi przed testami*/
    @BeforeSuite
    public void przedTestami() {
        if (chrome) {
            WebDriverManager.chromedriver().avoidAutoVersion();
            WebDriverManager.chromedriver().setup();
            driver = new ChromeDriver();
        } else {
            WebDriverManager.firefoxdriver().avoidAutoVersion();
            WebDriverManager.firefoxdriver().setup();
            driver = new FirefoxDriver();
        }
    }

    /*adnotacja po zestawie testów suite to zestaw testów robimy metode ktora cos robi po testach*/
    @AfterSuite
    public void poTestach() {
        driver.close();
    }

    /*właściwe testy*/
    @Test
    public void pierwszyTest() throws InterruptedException {
        boolean chrome = false;
        driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).sendKeys("pogoda warszawa");
        driver.findElement(By.id("sb_form_go")).click();
    }

    @Test
    public void drugiTest() throws InterruptedException {
        boolean chrome = false;
        if (chrome) {
            driver.get("http://duckduckgo.com/");
            driver.findElement(By.id("search_form_input_homepage")).sendKeys("pogoda gdańsk");
            driver.findElement(By.id("search_button_homepage")).click();
        }
    }
}

I tak oto testy nam przechodzą 🙂 mamy bardziej usystematyzowany kod przez co ogarniczyliśmy pewną powtarzalność kodu do metody opakowanej jako @After i @Before Suite

Mam nadzieje, że się podoba i do następnego !

Napisz komentarz