Ogórek - tabele danych
Pracując nad automatyzacją możemy spotkać się z różnymi scenariuszami. Każdy scenariusz ma inne znaczenie i ma inne potrzeby.
Od początku braliśmy przykład funkcjonalności logowania do serwisu społecznościowego, gdzie do przekazania mieliśmy tylko dwa parametry wejściowe. Pomyślmy o większej możliwości. A co z funkcją „Rejestracja nowego użytkownika”? Zazwyczaj, jakie mogą być parametry wejściowe podczas rejestracji nowego użytkownika w serwisie społecznościowym? Coś takiego jak następujące -
- Nazwa Użytkownika
- Adres e-mail
- Password
- Wprowadź ponownie hasło
- Birthdate
- Gender
- Numer telefonu
Feature - Rejestracja nowego użytkownika.
Sprawdź, czy rejestracja nowego użytkownika zakończyła się niepowodzeniem po wprowadzeniu nieprawidłowych danych wejściowych.
Biorąc pod uwagę, że jestem na nowej stronie rejestracji użytkownika.
Gdy podam nazwę użytkownika i adres e-mail jako adres e-mail i hasło jako, a następnie ponownie wprowadzę hasło jako i Data urodzenia jako oraz Płeć jako i numer telefonu, wówczas rejestracja użytkownika powinna zakończyć się niepowodzeniem.
Na pierwszy rzut oka wygląda to trochę niechlujnie. Czy jest więc lepszy sposób na zarządzanie taką porcją danych wejściowych? Odpowiedzią może być „Tabela danych”. Tabela danych to zestaw danych wejściowych, które należy zapewnić dla pojedynczego znacznika. Ten tag może mieć wartość GIVEN, WHEN lub THEN.
Napiszmy powyższy scenariusz za pomocą tabeli danych i będzie on wyglądał następująco -
Biorąc pod uwagę, że jestem na nowej stronie rejestracji użytkownika
Kiedy wprowadzam prawidłowe dane na stronie
| Fields | Values |
| First Name | Tom |
| Last Name | Kenny |
| Email Address | [email protected] |
| Re-enter Email Address | [email protected] |
| Password | Password1 |
| Birthdate | 01 |
Wtedy rejestracja użytkownika powinna zakończyć się sukcesem.
Przykład
Zautomatyzujmy przykład tabeli danych.
Step 1 - Utwórz projekt testowy Maven o nazwie „DataTableTest”.
Idź do Plik → Nowy → Inne → Maven → Projekt Maven → Dalej.
Zapewniać group Id (identyfikator grupy będzie jednoznacznie identyfikował Twój projekt we wszystkich projektach).
Zapewniać artifact Id (Identyfikator artefaktu to nazwa słoika bez wersji. Możesz wybrać dowolną nazwę zapisaną małymi literami).
Kliknij Zakończ.
Otwórz pom.xml -
Przejdź do eksploratora pakietów po lewej stronie Eclipse.
Rozwiń projekt CucumberTest.
Zlokalizuj plik pom.xml.
Kliknij prawym przyciskiem myszy i wybierz opcję Otwórz za pomocą „Edytora tekstu”.
Dodaj zależność dla Selenium: To wskaże Mavenowi, które pliki jar Selenium mają zostać pobrane z centralnego repozytorium do lokalnego repozytorium.
Otwórz pom.xml jest w trybie edycji, utwórz tag zależności (<dependencies> </dependencies>) wewnątrz tagu projektu.
Wewnątrz tagu zależności utwórz tag zależności. (<dependency> </dependency>).
Podaj następujące informacje w tagu zależności.
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
Dodaj zależność dla Cucumber-Java - To wskaże Maven, które pliki Cucumber mają zostać pobrane z centralnego repozytorium do lokalnego repozytorium.
Utwórz jeszcze jeden tag zależności.
Podaj następujące informacje w tagu zależności.
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Dodaj zależność dla Cucumber-JUnit - to wskaże Maven, które pliki Cucumber JUnit mają zostać pobrane z centralnego repozytorium do lokalnego repozytorium.
Utwórz jeszcze jeden tag zależności.
Podaj następujące informacje w tagu zależności.
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
Dodaj zależność dla JUnit - wskaże Maven, które pliki JUnit mają zostać pobrane z repozytorium centralnego do repozytorium lokalnego.
Utwórz jeszcze jeden tag zależności.
Podaj następujące informacje w tagu zależności
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
Sprawdź pliki binarne.
Po pomyślnej edycji pom.xml zapisz go.
Idź do Project → Clean - zajmie to kilka minut.
Step 2 - Utwórz pakiet o nazwie dataTable pod src/test/java
Step 3 - Utwórz plik funkcji.
Utwórz plik elementu o nazwie dataTable.feature w pakiecie dataTable (zobacz sekcję opis scenariusza po bardziej szczegółowe kroki).
Napisz następujący tekst.
Feature - Tabela danych
Sprawdź, czy rejestracja nowego użytkownika zakończyła się niepowodzeniem po przekazaniu nieprawidłowych danych wejściowych.
Scenario:
Biorąc pod uwagę, że jestem na nowej stronie rejestracji użytkownika
Kiedy wprowadzam nieprawidłowe dane na stronie
| Fields | Values |
| First Name | Tom |
| Last Name | Kenny |
| Email Address | [email protected] |
| Re-enter Email Address | [email protected] |
| Password | Password1 |
| Birthdate | 01 |
Wtedy rejestracja użytkownika powinna zakończyć się niepowodzeniem
Zapisz plik.
Step 4 - Utwórz plik definicji kroku.
Utwórz plik definicji kroku o nazwie „dataTable.java” wewnątrz pakietu dataTable (więcej szczegółowych kroków można znaleźć w opisie scenariusza sekcji).
Napisz następujący kod.
package dataTable;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
import cucumber.table.DataTable;
public class stepdefinition {
WebDriver driver = null;
@Given("^I am on new user registration page$")
public void goToFacebook() {
//Intiate web browser instance. driver = new FirefoxDriver();
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter invalid data on the page$")
public void enterData(DataTable table){
//Initialize data table
List<list> data = table.raw();
System.out.println(data.get(1).get(1));
//Enter data
driver.findElement(By.name("firstname")).sendKeys(data.get(1).get(1));
driver.findElement(By.name("lastname")).sendKeys(data.get(2).get(1));
driver.findElement(By.name("reg_email__")).sendKeys(data.get(3).get(1));
driver.findElement(By.name("reg_email_confirmation__")).
sendKeys(data.get(4).get(1));
driver.findElement(By.name("reg_passwd__")).sendKeys(data.get(5).get(1));
Select dropdownB = new Select(driver.findElement(By.name("birthday_day")));
dropdownB.selectByValue("15");
Select dropdownM = new Select(driver.findElement(By.name("birthday_month")));
dropdownM.selectByValue("6");
Select dropdownY = new Select(driver.findElement(By.name("birthday_year")));
dropdownY.selectByValue("1990");
driver.findElement(By.className("_58mt")).click();
// Click submit button driver.findElement(By.name("websubmit")).click();
}
@Then("^User registration should be unsuccessful$")
public void User_registration_should_be_unsuccessful() {
if(driver.getCurrentUrl().equalsIgnoreCase("https://www.facebook.com/")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
Zapisz plik.
Step 5 - Utwórz plik klasy biegacza.
Utwórz klasę uruchamiającą o nazwie runTest.java wewnątrz pakietu.
Napisz następujący kod.
package dataTable;
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, korzystając z opcji
Wybierz plik runTest.java z eksploratora pakietów.
Kliknij prawym przyciskiem myszy i wybierz opcję Uruchom jako.
Wybierz test JUnit.
Po pomyślnym wykonaniu możesz zaobserwować następujące rzeczy.
Strona Facebooka zostanie załadowana.
Dane zostaną wprowadzone na stronie rejestracji.
Kliknij przycisk Prześlij.
Zobaczymy, że strona główna nie zostanie wyświetlona, a na konsoli zostanie napisane „Test Pass”.