[英]Getting Nullpointer Exception while using pojo class in cucumber
I am trying to pass data through pojo class in cucumber but i am getting Null pointer Exception 我正在尝试通过黄瓜的pojo类传递数据,但是我得到了Null指针异常
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 -: 我的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;
}
}
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 -: 我的文件夹结构如下-:
Any help to solve this would be appreciated. 任何帮助解决此问题的方法将不胜感激。
Also my pom file is as -: 另外我的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>
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());
Maybe the NPE is thrown in method enter_valid_data_for_successful_registration_pojo(...)
at line 可能将NPE抛出到方法enter_valid_data_for_successful_registration_pojo(...)
scenario.write("entering user registeration details...");
The variable scenario
is newer assigned with any object (at least not in the presented code) 变量scenario
是较新分配的任何对象(至少不在显示的代码中)
Scenario scenario;
in method i_ve_a_valid_set_of_data_and_access_pojo()
you have this assignment 在方法i_ve_a_valid_set_of_data_and_access_pojo()
您具有此分配
this.scenario= scenario;
which assigns scenario
with itself, so it stays null
. 它本身分配scenario
,因此它保持null
。
In order to share state between your steps, it's recommended to use a Dependency Intjection (DI) framework. 为了在步骤之间共享状态,建议使用依赖注入(DI)框架。 Cucumber supports multiple DI frameworks. 黄瓜支持多个DI框架。 If your project is already using DI, use whichever DI framework you already have. 如果您的项目已经在使用DI,请使用现有的任何DI框架。 If not, use PicoContainer as it's the most lightweight and easy to use. 如果不是,请使用PicoContainer,因为它是最轻巧且易于使用的。 For more information on using DI with Cucumber I'd recommend The Cucumber for Java book. 有关将DI与Cucumber一起使用的更多信息,建议您阅读《 Cucumber for Java》一书。 Unfortunately there's not a lot of documentation out there (but we're working on it). 不幸的是,那里没有很多文档(但是我们正在努力)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.