#Selenide01-SeleniumWebDriver(for Java) na sterydach czyli o ciekawym frameworku do testów UI. Jak zacząć, co daje nam Selenide, przykładowe użycie.

selenide java automating java automating maven inteljii junit testng dependency should location
Reading Time: 5 minutes
Nieodłączna sekcja muzyczna 😀

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

Instalacja,konfiguracja, tworzenie projektu jest też w moim poprzednim wpisie.
selenide java automating java automating maven inteljii junit testng dependency should location
Tworzymy zwykły projekt mavenowy.
selenide java automating java automating maven inteljii junit testng dependency should location

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.

selenide java automating java automating maven inteljii junit testng dependency should location
Dodajemy linijke <dependencies> enter i doda zamknięcie </dependencies> automatycznie.
<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

selenide java automating java automating maven inteljii junit testng dependency should location
W zależności od łącza i obciążenia trzeba czekać parę minut na synchronizacje.
selenide java automating java automating maven inteljii junit testng dependency should location
Gotowe potrzebny nam jeszcze framework dot adnotacji, że to są testy @Test ja wybrałem testng też dodajemy go do maven i też odświeżamy mavena.
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.1.0</version>
<scope>test</scope>
</dependency>
selenide java automating java automating maven inteljii junit testng dependency should location

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.

selenide java automating java automating maven inteljii junit testng dependency should location

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.

selenide java automating java automating maven inteljii junit testng dependency should location

Lokalizacja to projekt folder -> build -> reports -> tests

ShouldBe czyli taka niby asercja.

Przykładowo sprawdzam czy zawilgocenie jest 67%

selenide java automating java automating maven inteljii junit testng dependency should location
Tutaj nie pokazałem do końca ale test był na zielono i poprawnie rozpoznało 67%.

Teraz zmieniam specjalnie na 77%

selenide java automating java automating maven inteljii junit testng dependency should location
Jak widzimy asercja wypluła, że wartość wpisana dla danego elementu nie zgadza się z tym co jest na stronie vs w kodzie.

SelenideElement – czyli po prostu element jako obiekt

selenide java automating java automating maven inteljii junit testng dependency should location
Można też wynosić elementy na obiekt co jest wskazane np. aby obiekty strony trzymać w osobnej klasie. Pora na śmieszki co chwile asercja się wywala i wilgotność jest większa więc może padać w Lublinie 😀

Inne przykłady podstawowych działań

selenide java automating java automating maven inteljii junit testng dependency should location
Jak widzimy całość działa całkiem sprawnie.

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>

Napisz komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.