0

I am trying to pass data through pojo class in cucumber but i am getting Null pointer Exception

My feature file is as follows -:

Feature: Registeration in Mercuryflight site

  Background: 
    Given I've a valid set of data and access pojo

  @Registrationpojo
  Scenario: Multiple  user Registration process using pojo
    When Registeration page Display for pojo
    Then Enter valid data for successful registration pojo
      | username  | password | confirmpassword |
      | aditya91p | test123  | test123         |
      | rakesh90p | test123  | test123         |
      | preety18p | test123  | test123         |
    And close

My pojo class is as follows -:

package com.Cucumber_Maven.test;

public class UserData {

    private String username;
    private String password;
    private String confirmpassword;

public UserData(String username, String password, String confirmpassword) {

        this.username = username;
        this.password = password;
        this.confirmpassword = confirmpassword;
    }


    public String getUserName() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public String getConfirmPassword() {
        return confirmpassword;
    }




}

My Step definition is as follows -:

package com.Cucumber_Maven.test;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import cucumber.api.DataTable;
import cucumber.api.PendingException;
import cucumber.api.Scenario;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import junit.framework.Assert;

public class StepPojo {

    WebDriver driver;
    Scenario scenario;


    @Given("^I've a valid set of data and access pojo$")
    public void i_ve_a_valid_set_of_data_and_access_pojo() throws Throwable {
         System.out.println("Pojo class demo ");
            System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"/src/test/resource/driver/chromedriver.exe");
             driver = new ChromeDriver();
             this.scenario= scenario;
    }

    @When("^Registeration page Display for pojo$")
    public void registeration_page_Display_for_pojo() throws Throwable {
        driver.manage().window().maximize();
        driver.navigate().to("http://newtours.demoaut.com/");
        Thread.sleep(5000);
        WebElement register=driver.findElement(By.linkText("REGISTER"));
        register.click();
    }

    /*@Then("^Enter valid data for successful registration pojo$")
    public void enter_valid_data_for_successful_registration_pojo(List<UserData> pojolist) throws Throwable {
       scenario.write("entering user registeration details...");
       System.out.println("Total user..."+pojolist.size());

       for(UserData data :pojolist) {

           System.out.println(data.getUserName() +" with pswd is "+data.getPassword());
           driver.findElement(By.xpath(".//*[@id='email']")).sendKeys(data.getUserName());
           driver.findElement(By.xpath(".//*[@name='password']")).sendKeys(data.getPassword());
           driver.findElement(By.xpath("")).sendKeys(data.getConfirmPassword());


           driver.findElement(By.xpath(".//*[@name='register']")).click();


            //assertion
            Thread.sleep(3000);
            String msg=driver.findElement(By.xpath(".//*[contains(text(),'Dear')]")).getText();
            System.out.println(msg);
           Assert.assertTrue("text is getting displayed", msg.contains("Dear"));
            //clicking on register



            WebElement register=driver.findElement(By.linkText("REGISTER"));
            JavascriptExecutor js=(JavascriptExecutor) driver;
            js.executeScript("arguments[0].setAttribute('target','_self');", register);
            register.click();
       }



    }*/

    @Then("^Enter valid data for successful registration pojo$")
    public void enter_valid_data_for_successful_registration_pojo(List<UserData> pojolist) throws Throwable {
        scenario.write("entering user registeration details...");
           System.out.println("Total user..."+pojolist.size());

           for(UserData data :pojolist) {

               System.out.println(data.getUserName() +" with pswd is "+data.getPassword());
               driver.findElement(By.xpath(".//*[@id='email']")).sendKeys(data.getUserName());
               driver.findElement(By.xpath(".//*[@name='password']")).sendKeys(data.getPassword());
               driver.findElement(By.xpath("")).sendKeys(data.getConfirmPassword());


               driver.findElement(By.xpath(".//*[@name='register']")).click();


                //assertion
                Thread.sleep(3000);
                String msg=driver.findElement(By.xpath(".//*[contains(text(),'Dear')]")).getText();
                System.out.println(msg);
               Assert.assertTrue("text is getting displayed", msg.contains("Dear"));
                //clicking on register



                WebElement register=driver.findElement(By.linkText("REGISTER"));
                JavascriptExecutor js=(JavascriptExecutor) driver;
                js.executeScript("arguments[0].setAttribute('target','_self');", register);
                register.click();
           }
    }


}

My error Trace is -:

 Background:                                      # C:/Users/krsna/eclipse-workspace/Cucumber_Maven/src/test/resource/mercuryflight.feature:3
    Given I've a valid set of data and access pojo # StepPojo.i_ve_a_valid_set_of_data_and_access_pojo()

  @Registrationpojo
  Scenario: Multiple  user Registration process using pojo # C:/Users/krsna/eclipse-workspace/Cucumber_Maven/src/test/resource/mercuryflight.feature:7
    When Registeration page Display for pojo               # StepPojo.registeration_page_Display_for_pojo()
    Then Enter valid data for successful registration pojo # StepPojo.enter_valid_data_for_successful_registration_pojo(UserData>)
      java.lang.NullPointerException
        at com.Cucumber_Maven.test.StepPojo.enter_valid_data_for_successful_registration_pojo(StepPojo.java:79)
        at ✽.Then Enter valid data for successful registration pojo(C:/Users/krsna/eclipse-workspace/Cucumber_Maven/src/test/resource/mercuryflight.feature:9)

    And close                                              # StepDefinitionDemo.close()

Failed scenarios:
C:/Users/krsna/eclipse-workspace/Cucumber_Maven/src/test/resource/mercuryflight.feature:7 # Scenario: Multiple  user Registration process using pojo

1 Scenarios (1 failed)
4 Steps (1 failed, 1 skipped, 2 passed)
0m40.507s

my folder structure is as follows -:

enter image description here

Any help to solve this would be appreciated.

Also my pom file is as -:

<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>com</groupId>
    <artifactId>Cucumber_Maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Cucumber_Maven</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
             <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>1.2.5</version>
        </dependency>




        <!-- <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> 
            <version>1.2.5</version> <scope>test</scope> </dependency> <dependency> <groupId>info.cukes</groupId> 
            <artifactId>cucumber-junit</artifactId> <version>1.2.5</version> </dependency> -->


        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>1.2.0</version>
            <!-- <scope>test</scope> -->
        </dependency>

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>1.2.0</version>
        </dependency>







        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-jvm</artifactId>
            <version>1.2.5</version>
             <type>pom</type> 
        </dependency>







        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-jvm-deps</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.9.1</version>
        </dependency>


    </dependencies>
</project>

I am getting error for this line in -:

 @Then("^Enter valid data for successful registration pojo$")
    public void enter_valid_data_for_successful_registration_pojo(List<UserData> pojolist) throws Throwable {
        scenario.write("entering user registeration details...");
           System.out.println("Total user..."+pojolist.size());
7
  • Which line is it in your code? Commented Mar 18, 2018 at 20:18
  • @lexicore the line is " @Then("^Enter valid data for successful registration pojo$") public void enter_valid_data_for_successful_registration_pojo(List<UserData> pojolist) throws Throwable { scenario.write("entering user registeration details..."); System.out.println("Total user..."+pojolist.size());" Commented Mar 18, 2018 at 20:20
  • Ok, so the list itself is null. Commented Mar 18, 2018 at 20:24
  • yes pojolist object is coming as null Commented Mar 18, 2018 at 20:26
  • 1) See What is a stack trace, and how can I use it to debug my application errors? & What is a Null Pointer Exception, and how do I fix it? 2) A single blank line of white space in source code is all that is ever needed. Blank lines after { or before } are also typically redundant. Commented Mar 19, 2018 at 2:34

2 Answers 2

1

Maybe the NPE is thrown in method enter_valid_data_for_successful_registration_pojo(...) at line

scenario.write("entering user registeration details...");

The variable scenario is newer assigned with any object (at least not in the presented code)

Scenario scenario;

in method i_ve_a_valid_set_of_data_and_access_pojo() you have this assignment

this.scenario= scenario;

which assigns scenario with itself, so it stays null.

Sign up to request clarification or add additional context in comments.

Comments

1

In order to share state between your steps, it's recommended to use a Dependency Intjection (DI) framework. Cucumber supports multiple DI frameworks. If your project is already using DI, use whichever DI framework you already have. If not, use PicoContainer as it's the most lightweight and easy to use. For more information on using DI with Cucumber I'd recommend The Cucumber for Java book. Unfortunately there's not a lot of documentation out there (but we're working on it).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.