
Cześć dzisiaj na tapecie framework, o którym mówią ‘podrasowane’ Selenium WebDriver czyli Selenide zapraszam do wpisu!
Wstęp – o czym mowa?
Po pierwsze jeśli śledzicie tego bloga, można użyć Selenide z powodzeniem w projekcie, który już opisywałem tutaj – > https://gregkaqa.pl/index.php/category/automatyzacja/automatyzacja-java/
Dlatego można go użyć ?
Ano dlatego, że konfiguracja to dodanie dependancy mavena do pliku pom.xml i nasza biblioteka / framework jest gotowy do używania.
No dobra ale czym jest Selenide ?
Czytelniejszy zapis selektorów, konfiguracja robiona za nas (drivery).
Na stronie https://selenide.org/documentation/selenide-vs-selenium.html jest też porównanie selenium i nie trudno się niezgodzić, że selenium nie jest narzędziem do testowania a jedynie do manipulacji przeglądarki gdyż tak czy siak musimy posiłkować się innym frameworkiem np. TestNG. Twórcy w owym porównaniu chwalą się też ‘inteligentnym czekaniem’, metodami typu shouldBe, val czy selectradio.
Sprawdzimy jak to wygląda w praktyce.
Inteljii – tworzymy nowy projekt typu maven


Po stworzeniu domyślnie wrzuca nas do pliku pom.xml, jeśli to pierwszy raz czekamy na indexowanie i zakończenie innych operacji związanych z projektem.

<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>5.13.0</version>
<scope>test</scope>
</dependency>
Bierzmy poniższe dependancy ze strony quick start – > https://selenide.org/quick-start.html
I odświeżamy maven skrótem – > ctrl + shift + o


<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.1.0</version>
<scope>test</scope>
</dependency>

Pierwszy test który coś robi 🙂
Jeśli zrobione tworzymy nowy plik .java w src->test->java nazwywamy go jak chcemy.
Za wkleje tu kod narazie pokaże, że dość łatwo zrobiłem pierwszy test.

Zastosowałem tu pierwsze lepsze rozwiązanie ze stackoverflow timeunita do tego aby poczekał 10 sekund abym mógł zrobić screenshota.
Nie trzeba robić żadnego aftertests i tam ręcznie ubijać przeglądarki, framework robi to sam.
Kod na tę chwilę wygląda następująco :
import org.openqa.selenium.By; import org.testng.annotations.Test; import java.util.concurrent.TimeUnit; import static com.codeborne.selenide.Selenide.$; import static com.codeborne.selenide.Selenide.open; public class PierwszyTest { @Test(description = "Pierwszy test selenide") public void pierwszyTest() throws InterruptedException { open("https://duckduckgo.com/"); $(By.id("search_form_input_homepage")).setValue("pogoda lublin"); $(By.id("search_button_homepage")).click(); TimeUnit.SECONDS.sleep(10); } }
Tip jest taki, że jak wklejacie taki kod wciskacie ctrl+shift+alt+l i zatwierdzacie formatowanie, formatowanie i dbanie o przejrzystość jest ważne.
Inteligentny screenshot ?
W sumie tu nie ma się co rozpisywać, jeśli test się wywali framework zrobi sam screena, raport oraz logi.

Lokalizacja to projekt folder -> build -> reports -> tests
ShouldBe czyli taka niby asercja.
Przykładowo sprawdzam czy zawilgocenie jest 67%

Teraz zmieniam specjalnie na 77%

SelenideElement – czyli po prostu element jako obiekt

Inne przykłady podstawowych działań

Podsumowanie
Selenide to świetny framework, który dedykowany jest na początek przygody, dla tych, którzy mają np. problemy konfiguracyjne.
‘Robi dużo’ za użytkownika. Zaletą są metody should sprawdzające stronę pod różnym kątem. Kolejną zaletą jest to, że właściwie dodając mavena, możemy to dodać do już istniejącego projektu i nie będzie z tym żadnych problemów.
Na pewno jest to fajne narzędzie do polecania zarówno z osobami, które miały już doświadczenie z java + selenium webdriver, jak i osoby totalnie początkujące jak widać pare linijek i już mamy jakieś testy.
W kontynuacji tego wpisu spróbuję porobić coś więcej z naszymi testami.
Być może raporty, sprawdzę też czy i jak działa wykonywanie tych testów na RemoteWebDriver np. w Selenoid i zobaczymy co jeszcze wymyślę.
Dzięki za przeczytanie – jeśli lubisz dostawać emaile z nowymi wpisami to koniecznie zapisz się do newslettera ->
https://gregkaqa.pl/index.php/newsletter/
Na koniec zostawiam Kod :
PierwszyTest.java :
import com.codeborne.selenide.SelenideElement;
import org.openqa.selenium.By;
import org.testng.annotations.Test;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.open;
public class PierwszyTest {
@Test(description = "Pierwszy test selenide")
public void pierwszyTest() throws InterruptedException, IOException {
open("https://duckduckgo.com/");
$(By.id("search_form_input_homepage")).setValue("pogoda lublin");
$(By.id("search_button_homepage")).click();
$(By.className("module__humidity")).shouldBe(text("Humidity: 68%"));
TimeUnit.SECONDS.sleep(30);
}
@Test(description = "drugi test")
public void drugiTest() throws InterruptedException {
{
open("https://duckduckgo.com/");
SelenideElement duckduckinput = $(By.id("search_form_input_homepage"));
SelenideElement duckducksearch = $(By.id("search_button_homepage"));
SelenideElement duckduckhumidity = $(By.className("module__humidity"));
duckduckinput.setValue("pogoda lublin");
duckducksearch.click();
duckduckhumidity.shouldBe(text("Humidity: 68%"));
TimeUnit.SECONDS.sleep(30);
}
}
@Test(description = "Trzeci test")
public void trzeciTest() throws InterruptedException {
open("https://www.busradar.pl/");
SelenideElement BusRadarFrom = $(By.id("from-input"));
SelenideElement BusRadarTo = $(By.id("to-input"));
SelenideElement BusRadarWhen = $(By.id("When"));
SelenideElement BusRadarWhenReturn = $(By.id("WhenReturn"));
SelenideElement BusRadarAddPerson = $(By.className("icon-plus"));
SelenideElement BusRadarSearch = $(By.className("icon-search"));
SelenideElement BusRadarSearch2 = $(By.name("Szukaj połączenia"));
BusRadarFrom.val("Lublin");
BusRadarTo.val("Zakopane");
BusRadarWhen.val("Pt 31 Lip");
BusRadarWhenReturn.val("Cz 06 Sie");
BusRadarAddPerson.click();
BusRadarSearch.click();
TimeUnit.SECONDS.sleep(30);
}
}
Pom.xml
<?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>selenidesampleproject</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>5.13.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>