Wyjątkowa okazja na szkolenie ISTQB online - teraz tylko 999 zł netto! (najtaniej na rynku - szkolenie dofinansowane!). Zapraszamy również na 2 dniowe szkolenie API teraz tylko 459 zł!

Asercje w Selenium

kw. 1, 2022

 

 

W załączonych fragmentach kodu z poprzednich lekcji, na pewno zauważyłeś instrukcje o nazwie Assert. Właśnie o szeroko pojętych asercjach będzie traktowała dzisiejsza lekcja. Rozłożymy sobie Asercje na czynniki pierwsze. Omówimy przykłady użycia, a na końcu sami napiszemy kilka instrukcji z wykorzystaniem zdobytej dzisiaj wiedzy.

 

Co to jest Asercja?

Asercja – jest to konstrukcja programistyczna, która umożliwia weryfikację poprawności dowolnej wartości. Mechanizm weryfikacji w najprostszej formie działa bardzo prosto: bierze dwie wartości – rzeczywisty wynik oraz spodziewany wynik i porównuje te wartości ze sobą, zwracając odpowiedni wynik.

 

 

 

 

Dlaczego Asercje są tak ważne w automatyzacji testów?

Przeprowadzanie testów bez możliwości weryfikacji wyników jest bezcelowe. Tylko mechanizmy weryfikacyjne mogą dać nam odpowiedz, czy dany przypadek testowy został zaliczony bądź nie.

Oczywiście wszelkie porównania czy weryfikacje, możemy również wykonywać ręcznie.. ale przecież uczymy się automatyzować:)

 

 

 

To właśnie na podstawie Asercji możemy dać ostateczny feedback, czy testowane oprogramowanie działa zgodnie z założeniami, czy też nie.

 

 

 

Asercje w Selenium WebDriver dzielą się na dwa rodzaje

• Asercje twarde (Hard Assertions)

• Asercje miękkie (Soft Assertions)

 

 

 

Przedstawię teraz oba rodzaje asercji, a na końcu wyciągniemy wnioski dotyczące ich głównej różnicy.

 

 

Asercja Twarda (Hard Assert)

Kiedy warunek weryfikacyjny twardej asercji nie zostanie spełniony, wówczas asercja bezwzględnie zakończy działanie całego skryptu, zwróci nam wyjątek, oraz oznaczy test jako nieudany (status FAILED).

 

Asercja twarda to asercja, która zgłasza wyjątek AssertException – w przypadku niepowodzenia weryfikacji. W takim przypadku można obsłużyć błąd, używając bloku try-catch.

Asercje twarde warto więc stosować wszędzie tam, gdzie aplikacja nie może pozwolić sobie na żadne kompromisy w kontekście rezultatu działania testowanej funkcjonalności.

 

 

 

 

Przykład:

Wyobraźmy sobie, że realizujemy scenariusz testowy, który weryfikuje cały proces zakupowy (od kliknięcia w przycisku 'KUP TERAZ’, po przejście na stronę zakupową, wypełnienie formularza zakupowego i zrobienie przelewu).

Po kliknięciu przycisku 'KUP TERAZ’, aplikacja powinna nas bezwzględnie przenosić do podstrony, na której możemy dokonać zakupu wybranego produktu. Jeśli biznes ma się kręcić, to z pewnością oczekujemy , że ten przycisk zawsze i bezproblemowo będzie nas przenosił do strony zakupowej.

I właśnie np. dla takiego testu przycisku 'KUP TERAZ’, powinniśmy zastosować weryfikację twardą, ponieważ, jeśli przycisk nie zadziała właściwie (nie przeniesie nas na stronę zakupową), wówczas cały dalszy test nie ma sensu i na pewno zakończy się niepowodzeniem. Asercja twarda zwróci nam od razu błąd i zakończy działanie testu z wynikiem FAILED.

 

 

Definicja:

 

Assert.assertEquals(AktualnaWartość, OczekiwanaWartość);

 

 

 

Przykład asercji twardej, której zadaniem jest weryfikacja czy tytuł strony, na której się znajdujemy, jest zgodny z oczekiwanym (zapewne kojarzycie tę konstrukcję z poprzednich lekcji).

@Test
public void verifyTitle()
{
driver.get(http://www.selenium-shop.pl/);
String ActualTitle = driver.getTitle();
String ExpectedTitle = “Selenium Shop Automatyzacja Testów”;
Assert.assertEquals(ActualTitle, ExpectedTitle);
System.out.println(“Weryfikacja POPRAWNA”);
}

 

 

Asercja miękka

 

Nawet w przypadku, gdy warunek weryfikacyjny miękkiej asercji nie zostanie spełniony , asercja  nie zatrzyma dalszego wykonywania programu.

Mechanizm miękkiej asercji nie zgłasza wyjątku, gdy warunek asercji nie zostanie spełniony.
Dlatego należy bardzo ostrożnie implementować do kodu tego typu asercję, gdyż może zdarzyć się sytuacja, w której „przepuścimy” jakieś niewłaściwie działanie aplikacji.

Asercje miękkie należy stosować np. wtedy kiedy  wykonujemy w obrębie jednego scenariusz testowego wiele testów, ale tylko niektóre wpływają bezpośrednio na ogólną decyzję o stanie przypadku testowego.

 

Definicja:

 

softassert.assertEquals(AktualnaWartość, OczekiwanaWartość);

 

 

Przykład asercji miękkiej, której zadaniem jest weryfikacja czy tytuł strony, na której się znajdujemy jest zgodny z oczekiwanym.

@Test
public void verifyTitle()
{
driver.get(http://www.selenium-shop.pl/);
String ActualTitle = driver.getTitle();
String ExpectedTitle = “Selenium Shop Automatyzacja Testów”;
softassert.assertEquals(ActualTitle, ExpectedTitle);

}

 


 

Twarda asercja vs miękka asercja

Oba rodzaje asercji służą do tego samego: ich głównym zadaniem jest zwrócenie informacji dotyczącej przebiegu testu (PASS lub FAIL).

Należy zwrócić jednak uwagę na kluczową różnicę:

 

 

Twarda asercja w przypadku negatywnej weryfikacji, od razu zatrzyma działanie aplikacji i oznaczy dany test statusem niepowodzenia (FAILED).

Asercja miękka w przypadku negatywnej weryfikacji zachowa się nieco inaczej, ponieważ nie zatrzyma działa programu. Pozwala skryptowi nadal kontynuować dalszą pracę.

 

 


 

Rodzaje Asercji

 

Selenium WebDriver udostępnia nam wiele gotowych wariantów asercji. Poniżej lista wraz z przykładami zastosowania.

 

 

Assert Equals

 

Podstawowa i chyba najczęściej stosowana asercja.

Asercja Equals skupia się na porównaniu wartości oczekiwanej z wartością rzeczywistą (sprawdzany jest typ i wartość przekazanego parametru).
Obie wartości przekazywane są do asercji jako parametry. Jeśli oba parametry są identyczne, wówczas asercja kończy się ze statusem PASS (powodzenie) , w przeciwnym wypadku przypadek testowy zostanie oznaczony jak FAILED (niepowodzenie).

 

 

Przykład:

public void weryfikacjaTytułuStrony() {
driver = new ChromeDriver();
driver.get("http://www.selenium-shop.pl/");
Assert.assertEquals(“Selenium Shop Automatyzacja Testów“, driver.getTitle());
}

 

 

 

 

Assert Not Equals

 

Jak łatwo można wydedukować Assert Not Equals jest niejako przeciwieństwem Assert Equals.
Również podajemy do porównania dwie wartości : wartość oczekiwaną oraz wartość rzeczywistą. (sprawdzany jest typ i wartość przekazanego parametru)

Tym razem jednak otrzymamy status PASS, jeśli wartości nie są sobie równe, a status FAILED w przypadku, gdy wartości są sobie równe.

 

Przykład:

public void testCaseVerifyDate () {
String ankietaMenu = driver.findElement(By.linkText("ANKIETA")).getText();
Assert.assertNotEquals(ankietaMenu , "Szkolenia");
}

 

 

 

 

 

 

Assert True

Sprawdzenie, czy wskazany warunek jest prawdą (TRUE). W przypadku, gdy warunek nie jest prawdą, asercja zakończy działanie całego skryptu.

 

Przykład: (checkbox o id= 'odbiorOsobisty’  jest zaznaczony’)

public void weryfikacjaPrzyciskZaloguj() {
WebElement odbiorOsobistyCheckbox = driver.findElement(By.id(“odbiorOsobisty”));
Assert.assertTrue(odbiorOsobistyCheckbox.isSelected());
System.out.print(“Asercja POPRAWNA“);
}

 

 

 

 

 

Assert False

 

Przeciwieństwo wcześniej omawianej instrukcji Assert True.
Teraz sprawdzamy czy warunek jest fałszywy (wartość FALSE)

 

 

Przykład: (checkbox o id= 'odbiorOsobisty’  nie jest zaznaczony’) 

public void weryfikacjaPrzyciskZaloguj() {
WebElement odbiorOsobistyCheckbox = driver.findElement(By.id(“odbiorOsobisty”));
Assert.assertFalse(odbiorOsobistyCheckbox.isSelected());
System.out.print(“Asercja POPRAWNA“);
}

 

 

 

 

 

Assert Null

 

Weryfikacja czy wskazany obiekt ma wartość NULL.

Jeśli  asercja zwróci  NULL , to wynik całej asercji będzie PASS. W przeciwnym wypadku wynik będzie FAILED.

 

Przykład:

Przyjmijmy, że: 'loginInput’ to pole w statusie włączony, czyli bez atrybutu disabled.

@Test
 public void test() {
 Assert.assertNull(loginInput.getAttribute("disabled"));  
 } 

 

Wynik asercji  = NULL , cała weryfikacja = PASS

 

 

 

 

 

Assert Not Null

 

Przeciwieństwo Assert Null. Zatem ta asercja sprawdza, czy testowany obiekt nie ma wartości NULL.

Jeśli asercja zwróci wynik inny od NULL, wówczas weryfikacja będzie w statusie PASS. W przeciwnym wypadku (gdy wynik będzie NULL) weryfikacja będzie miała status FAILED.

 

 

Przykład:

Przyjmijmy, że: 'passwordInput’ to pole w statusie wyłączony, czyli z atrybutem disabled.

 

@Test 
public void test() {
Assert.assertNotNull(passwordInput.getAttribute("disabled"));
 }

 

Wynik asercji  = NOT NULL , cała weryfikacja = PASS

 

 

 


ZAPAMIĘTAJ!

Asercja – jest to konstrukcja programistyczna, która umożliwia weryfikację poprawności dowolnej wartości. Mechanizm weryfikacji działa bardzo prosto: bierze dwie wartości – rzeczywisty wynik oraz spodziewany wynik i porównuje te wartości ze sobą zwracając odpowiedni wynik.

Asercje w Selenium WebDriver dzielą się na dwa rodzaje:

• Asercje twarde (Hard Assertions)

• Asercje miękkie (Soft Assertions)

Asercja twarda to asercja, która zgłasza wyjątek AssertException – w przypadku niepowodzenia weryfikacji. W takim przypadku można obsłużyć błąd, używając bloku try-catch.

Nawet w przypadku, gdy warunek weryfikacyjny miękkiej asercji nie zostanie spełniony , asercja  nie zatrzyma dalszego wykonywania programu.

Rodzaje Asercji:

  • Assert Equals
  • Assert Not Equals
  • Assert True
  • Assert False
  • Assert Null
  • Assert Not Null

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany.

Pozostałe:

Dobry tester oprogramowania, czyli kto?

Tester oprogramowania to osoba odpowiedzialna za weryfikowanie jakości tworzonej aplikacji - pod kątem poprawności działania, ale także spełniania przyjętych na początku projektu założeń. Odpowiada za poszukiwanie luk, sprawiających, że oprogramowanie nie spełnia...

Testowanie regresywne

Każde oprogramowanie jest co jakiś czas odświeżane, rozszerzane i zmieniane. Zmiany w kodzie mogą dotyczyć wielu aspektów, m. in.: dodawania, usuwania lub modyfikowania funkcji, adaptacji oprogramowania do nowych warunków, systemów czy umożliwienia wykorzystania...

Siedem zasad testowania oprogramowania

Testowanie oprogramowania jest nieodłączną częścią procesu tworzenia oprogramowania: pozwala znaleźć błędy, luki i defekty w produkcie, zbadać jakość i wydajność oprogramowania, a także ocenić, na ile testowany system jest zgodny z zadaną specyfikacją oraz wymaganiami...

Testowanie API – wprowadzenie

Aplikacje, systemy, elementy oprogramowania potrzebują się ze sobą komunikować. Dokładnie tak jak ludzie. Komunikujemy się, aby realizować pewne rzeczy lub wymieniać się informacjami. W tym celu wykorzystujemy różne sposoby komunikacji takiej jak: gesty, słowa, pismo,...

Lokalizowanie elementów. Selektory w Selenium wprowadzenie

  W dzisiejszym materiale nauczymy się korzystać z API Selenium WebDriver do lokalizowania elementów na stronach internetowych. Poznamy metody, strategie i podejścia do jednoznaczniej identyfikacji WebElementów.     DZISIEJSZA LEKCJA, NA...