How to use Datatable in Cucumber
In my previous post How to install and configure cucumber -java I have discussed how to install Cucumber and how to run cucumber program in java. In the previous post, I did not show how to parameterize the data. Means previously we passed parameters in the step line. Now we declared the variable in the feature file. So we are using Tables as arguments to Steps.
I have created one feature file named: dataDriven.feature under com.Cucumber.features package.
dataDriven.feature is almost same as the previous demo.feature . The only difference is the "when" .
previously it was " When I enter password and username" and now
When I provide password and username
| testname | [email protected] |
dataTable feature file
Feature: Login Application
As a user
I want to login to the application
Scenario: Valid user name and password
Given I launch the url "https://www.fb.com"
When I provide password and username
| testname | [email protected] |
And I click on login button
Then I should see the login page
Now we need to write down the step file. As you see there are very few changes in scenario/feature file so we can re use all the methods except the step written under "@when"
The implementation of the @when step
The implementation of the @when step
@When("^I provide password and username$")
public void i_enter_password_and_username(DataTable rawdata) throws Throwable {
// Write code here that turns the phrase above into concrete actions
List<List<String>> data = rawdata.raw();
driver.findElement(By.name("email")).sendKeys(data.get(0).get(0));
driver.findElement(By.name("pass")).sendKeys(data.get(0).get(1));
}
The complete steps
package com.Cucumber.steps; import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import cucumber.api.DataTable;
import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class DemoLoginSteps {
WebDriver driver;
@Given("^I launch the url \"([^\"]*)\"$")
public void i_launch_the_url(String arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
System.setProperty("webdriver.chrome.driver", "C:\\Users\\anjan\\Desktop\\cucmber\\chromedriver\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.fb.com");
}
@When("^I click on login button$")
public void i_click_on_login_button() throws Throwable {
// Write code here that turns the phrase above into concrete actions
driver.findElement(By.xpath("//*[@data-testid='royal_login_button']")).click();
}
@Then("^I should see the login page$")
public void i_should_see_the_Error_message() throws Throwable {
try{
// Write code here that turns the phrase above into concrete actions
if(driver.findElement(By.name("email")).isDisplayed()){
Assert.assertTrue(true);
}else
Assert.assertTrue(false);
}catch(Exception NoSuchElementException){
Assert.assertTrue(false);
}finally{
driver.quit();
}
}
@When("^I provide password and username$")
public void i_enter_password_and_username(DataTable rawdata) throws Throwable {
// Write code here that turns the phrase above into concrete actions
List<List<String>> data = rawdata.raw();
driver.findElement(By.name("email")).sendKeys(data.get(0).get(0));
driver.findElement(By.name("pass")).sendKeys(data.get(0).get(1));
}
}
If you want to execute cucumber test from testng xml or just left click on feature file and Run As Cucumber Feature.