
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 !