Ogórek - Haczyki
Ogórek hookpozwala nam lepiej zarządzać przepływem kodu i pomaga nam zredukować nadmiarowość kodu. Można powiedzieć, że jest to niewidoczny krok, który pozwala nam realizować nasze scenariusze czy testy.
Aby lepiej zrozumieć to pojęcie, weźmy przykład pliku funkcji i pliku definicji kroku.
Podświetlona część w podanym oświadczeniu faktycznie służy do skonfigurowania webdrivera i zakończenia sesji webdrivera. Tak więc w rzeczywistości nie ma to związku z istotą „danego stwierdzenia”, a bardziej przypomina układ do testu. Również jeśli myślimy z szerszą perspektywą, to w przypadku wielu scenariuszy dla tej funkcji ta konfiguracja i czyszczenie webdrivera będzie działać z każdym podanym poleceniem. Logicznie rzecz biorąc, sensowne jest wykonanie konfiguracji i czyszczenia tylko raz.
Aby zapewnić optymalizację, można wykorzystać haki. Częściej używamy dwóch rodzajów haków: haczyka „przed” i „po”. Metoda / funkcja / fragment kodu, zdefiniowane w hookach Before i After, zawsze działają, nawet jeśli scenariusz zostanie zaliczony lub zawiódł.
Jak sama nazwa wskazuje, zanim podpięcie zostanie wykonane na długo przed jakimikolwiek innymi scenariuszami testowymi, a po przechwyceniu zostanie wykonane po wykonaniu wszystkich scenariuszy.
Haki są definiowane tylko w pliku definicji kroku.
Zautomatyzujmy przykład przechwytywania przed i po.
Step 1 - Utwórz projekt Maven jako hookTest, dodaj niezbędną zależność w pom.xml.
Step 2 - Utwórz pakiet Java o nazwie hookTest pod src/test/java
Step 3 - Utwórz plik definicji kroku o nazwie jako hookTest.java pod pakietem.
package hookTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class hookTest {
WebDriver driver = null;
@Before public void setUp(){
driver = new FirefoxDriver();
}
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@After public void cleanUp(){
driver.close();
}
}
Step 4 - Utwórz plik funkcji o nazwie „hookTest.feature” pod pakietem.
Feature - Zarys scenariusza.
Scenario Outline - Test haka
Podany użytkownik przechodzi do Facebooka
Kiedy wpiszę nazwę użytkownika jako „<nazwa użytkownika>” i hasło jako „<hasło>”
Wtedy logowanie powinno zakończyć się niepowodzeniem
Przykłady
| username | password |
| username1 | password1 |
Step 5 - Utwórz plik klasy biegacza.
Utwórz klasę uruchamiającą jako runTest.java w pakiecie dataTable (zobacz opis scenariusza sekcji, aby uzyskać bardziej szczegółowe kroki).
Napisz następujący kod.
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
Zapisz plik.
Uruchom test za pomocą opcji -
Wybierz plik runTest.java z eksploratora pakietów.
Kliknij prawym przyciskiem myszy i wybierz opcję Uruchom jako.
Wybierz test JUnit.
Więc teraz, kiedy to uruchomimy, następna będzie sekwencja wykonania.
Przed podłączeniem - skonfiguruj sterownik sieciowy i inne wymagania wstępne, aby uruchomić test.
Podane oświadczenie
Kiedy oświadczenie
Następnie oświadczenie
Po podłączeniu - zamknij sterownik sieciowy i wykonaj proces czyszczenia.
Oznaczone haki
Możemy również wskazać, czy chcemy, aby przechwyty przed i po hakach były wykonywane tylko z określonym tagiem. Example- @Before („@ Web”). Ta sama koncepcja logiki tagów i / lub może być również zastosowana z hakami.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)