#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