java - 在 cucumber 中使用 pojo 类时出现空指针异常

标签 java selenium-webdriver nullpointerexception cucumber-java cucumber-junit

我试图通过 cucumber 中的 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();
           }
    }


}

我的错误跟踪是-:

 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

我的文件夹结构如下-:

enter image description here

任何解决此问题的帮助将不胜感激。

我的 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());

最佳答案

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

关于java - 在 cucumber 中使用 pojo 类时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352326/

相关文章:

java - jar执行期间资源路径改变

java - CCombo 中的文本选择

java - 获取2个表中的每个最新数据以及其他表中的数据

selenium-webdriver - 用于两个不同系统相互集成的 Selenium 框架

python - Selenium-调试 : Element is not clickable at point (X, Y)

Java - GUI (swing) - 空指针异常

java - Java 中修复捕获转换的正确方法

java - Selenium ChromeDriver 给出 "InitializeSandbox() called with multiple threads in process gpu-process"错误

java - SQLite 数据库中第 71 行的 NullPointerException

java - 空指针异常,无法解决