Получение исключения Nullpointer при использовании класса pojo в огурце

Я пытаюсь передать данные через класс pojo в огурце, но получаю исключение нулевого указателя

Мой файл функций выглядит следующим образом -:

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

Мой класс pojo выглядит следующим образом -:

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;
    }




}

Мое определение шага выглядит следующим образом -:

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();
           }
    }


}

Моя ошибка Trace -:

 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

моя структура папок выглядит следующим образом -:

Получение исключения Nullpointer при использовании класса pojo в огурце

Любая помощь в решении этой проблемы будет оценена.

Также мой файл pom выглядит как -:

<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>

Я получаю ошибку для этой строки в -:

 @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());

Какая строка в вашем коде?

lexicore 18.03.2018 21:18

@lexicore строка: "@Then (" ^ Введите действительные данные для успешной регистрации pojo $ ") public void enter_valid_data_for_successful_registration_pojo (List <UserD‌ata> pojolist) выбрасывает Throwable {scene.write (" ввод данных регистрации пользователя ... ") ; System.out.println ("Всего пользователей ..." + pojolist.size ()); "

vikramaditya anand 18.03.2018 21:20

Итак, сам список - null.

lexicore 18.03.2018 21:24

да объект pojolist прибывает как нуль

vikramaditya anand 18.03.2018 21:26

1) См. Что такое трассировка стека и как ее использовать для отладки ошибок приложения? & Что такое исключение нулевого указателя и как его исправить? 2) Одна пустая строка пробела в исходном коде - это все, что требуется для Когда-либо. Пустые строки после { или перед } также обычно избыточны.

Andrew Thompson 19.03.2018 03:34

@AndrewThompson, я думаю, проблема в том, что файл функции огурца не может передавать данные

vikramaditya anand 19.03.2018 04:36

Вы угадаете? Я не уверен, что мне делать с этой гипотезой, поэтому я пойду и помогу другим людям, пока вы не разберетесь с этим.

Andrew Thompson 19.03.2018 04:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
647
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Может быть, NPE добавлен в метод enter_valid_data_for_successful_registration_pojo(...) в строке

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

Переменная scenario более новая, присвоенная любому объекту (по крайней мере, не в представленном коде)

Scenario scenario;

в методе i_ve_a_valid_set_of_data_and_access_pojo() у вас есть это назначение

this.scenario= scenario;

который назначает scenario самому себе, поэтому он остается null.

Чтобы разделить состояние между вашими шагами, рекомендуется использовать структуру Dependency Intjection (DI). Cucumber поддерживает несколько структур DI. Если в вашем проекте уже используется DI, используйте любую уже имеющуюся структуру DI. Если нет, используйте PicoContainer, так как он самый легкий и простой в использовании. Для получения дополнительной информации об использовании DI с Cucumber я бы порекомендовал книгу Cucumber для Java. К сожалению, документации не так много (но мы над этим работаем).

Другие вопросы по теме