我使用相同的功能文件登录作为 2 个用户进行添加和批准.但是在运行时它会显示空指针异常



我刚刚开始使用黄瓜和硒。请忽略我这边是否有任何错误。 我有 2 种情况。 1. 以用户 A 身份登录并添加配置文件。 2. 以用户 B 身份登录并批准个人资料

对于这两种情况,我有一个相同的文件。 功能文件如下所示,

@Login 
Scenario Outline: Login into application with valid credentials
Given enter '<Username>' and '<Password>'   
When clicking submit button
Then System should logged into application 
Examples:
|Username|Password    |
|aaaa    |aaa@123     |
@LoginApprover 
Scenario Outline: Login as Approver application with valid credentials
Given enter approver credentials '<AppUsername>' and '<AppPassword>'    
When clicking login button
Then Approver should be logged into application 
Examples:
|AppUsername|AppPassword |
|bbb        |bbb@123   |

我的页面对象类

public class Login extends AllDetails {
public Login(WebDriver dr) {
driver = dr;
}
private final  By USERNAME = By.cssSelector("#wwww");
private final  By PASSWORD = By.cssSelector("#eeee");
private final  By SIGNIN_BUTTON = By.cssSelector("#login");
private final By ALERTMSG = By.xpath("//*[@class='alert alert-danger']/p");
public void enterUsername(String userName) {
waitUntilElementIsDisplayedOnScreen(USERNAME);
sendKeys(USERNAME, userName);
}
public void enterPassword(String password) {
waitUntilElementIsDisplayedOnScreen(PASSWORD);
sendKeys(PASSWORD, password);
}
public void clickSignInButton() {
click(SIGNIN_BUTTON);
}
public void alertmessageVerification(String msg) {
try {
String mesg = driver.findElement(ALERTMSG)
.getAttribute("innerText");
Assert.assertEquals("Following message prompted successfully", msg,
message);
} catch (Exception e) {
System.out.println(String.format(
"Following Message is not prompted ", msg));
}
}

我的步骤定义类,

public class LoginDefn extends details{
@Given("^enter '(.*)' and '(.*)'$")
public void enter_username_and_password(String username, String password)
throws Throwable {
lp=getPageFactoryObject(Login.class);
lp.enterUsername(username);
lp.enterPassword(password);
}
@When("^clicking submit button$")
public void clicking_submit_button() throws Throwable {
lp.clickSignInButton();     
}

@Then("^System should logged into application$")
public void system_should_logged_into_application() throws Throwable {
}
@Then("^System should not logged into application and prompt msg as(.*)$")
public void system_should_not_logged_into_application_and_prompt_msg_as_Invalid_username_and_password(String msg) throws Throwable {
Thread.sleep(2000);
lp.alertmessageVerification(msg);       
//lp.clearusernameandpassword();
}
@Given("^enter approver credentials '(.*)' and '(.*)'$")
public void enter_approver_credentials_and_(String appusername, String apppassword) throws Throwable {
lp.enterUsername(appusername);
lp.enterPassword(apppassword);
}
@When("^clicking login button$")
public void clicking_login_button() throws Throwable {
lp.clickSignInButton();
}
@Then("^Approver should be logged into application$")
public void approver_should_be_logged_into_application() throws Throwable {
//do nothing
}

} 我的测试运行程序类

@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@CucumberOptions(features = { "src\test\java\com\Features\" }, glue = 
{"definitions" }, plugin = {
"pretty", "json:target/cucumber.json" }, tags = 
{"@Login,@LoginApprover"}, monochrome = true)
@RunWith(Cucumber.class)

任何人请帮我解决这个问题。

我看不出您在哪里定义步骤类中使用的"lp"类型。 我看到您尝试在那里初始化它,但从未声明我可以看到。 您可能打算将其定义为类登录(您的页面对象)。 如果您打算在每个(或几乎每个)步骤中使用它,则应在steps类中将其定义为:

public class LoginDefn extends details{
Login lp;
@Given("^enter '(.*)' and '(.*)'$")
public void enter_username_and_password(String username, String password)
throws Throwable {
lp=getPageFactoryObject(Login.class);

然后,我认为其余的代码可以正常工作而不会出错,但是在发现这一点时,我没有深入研究。

最新更新