Duplicate Step Definition between two feature files.
First Feature File For Registeration:
@smoke
Feature: Register | User enter his data in Registration Form
Scenario: User Enter Valid Data in Registration Form
Given Navigate To Registration Form
When Fill Required Fields With Valid Data
And Click Register Button
Then Verify Success Registration
Scenario: User Enter Invalid Data in Registration Form
Given Navigate To Registration Form
When Fill Required Fields With Invalid Data
And Click Register Button
Then Verify Unsuccessful Registration
Second Feature File For Login:
@smoke
Feature: Login | User enter his data in Login Form
Scenario: User Enter Valid Data in Login Form
Given Navigate To Login Form
When Fill Required Fields With Valid Data
And Click Login Button
Then Verify Success Login
Scenario: User Enter Data in Login Form
Given Navigate To Login Form
When Fill Required Fields With Valid Email & Invalid Password
And Click Login Button
Then Verify Unsuccessful Login
Scenario: User Enter Data in Login Form
Given Navigate To Login Form
When Fill Required Fields With Invalid Email & Valid Password
And Click Login Button
Then Verify Unsuccessful Login
Scenario: User Enter Data in Login Form
Given Navigate To Login Form
When Leave Email & Password Field Empty
And Click Login Button
Then Verify Unsuccessful Login Empty
Class Called TestRunner in Runner Package is main class for Running:
@CucumberOptions(
features ="src/main/resources",
glue={"org/example/Step_Definition"},
tags = "@smoke",
monochrome = true,
plugin = {"pretty",
"html:target/cucumber.html",
"json:target/cucumber.json",
"junit:target/cukes.xml",
"rerun:target/rerun.txt"},
dryRun = false
)
//extends Object. [AbstractTestNGCucumberTests] Runs cucumber every detected feature as separated test.
public class TestRunner extends AbstractTestNGCucumberTests {
}
Registeration and login Test Cases are in package called Step_Definition
Registeration Test Case:
P01_nopRegister Register = new P01_nopRegister();
//First Scenario
@Given("Navigate To Registration Form")
public void RegisterForm(){
Register.Registerform().click();
}
@When("Fill Required Fields With Valid Data")
public void Valid_Register(){
Register.GenderMale().click();
Register.FirstName().sendKeys("Youssef");
Register.LastName().sendKeys("Benyameen");
Select DayDrpList = new Select(Register.DayDropDownList());
DayDrpList.selectByIndex(23);
Select MonthDrpList = new Select(Register.MonthDropDownList());
MonthDrpList.selectByVisibleText("October");
Select YearDrpList = new Select(Register.YearDropDownList());
YearDrpList.selectByValue("1999");
Register.Email().sendKeys("[email protected]");
Register.Password().sendKeys("Beny/000");
Register.ConfirmPassword().sendKeys("Beny/000");
}
@And("Click Register Button")
public void Register_button(){
Register.RegisterButton().click();
}
@Then("Verify Success Registration")
public void SuccessRegister(){
Assert.assertTrue(Register.ContinueButton().isDisplayed());
}
//Second Scenario
@When("Fill Required Fields With Invalid Data")
public void InvalidData(){
Register.GenderMale().click();
Register.FirstName().sendKeys("Youssef");
Register.LastName().sendKeys("Benyameen");
Select DayDrpList = new Select(Register.DayDropDownList());
DayDrpList.selectByIndex(23);
Select MonthDrpList = new Select(Register.MonthDropDownList());
MonthDrpList.selectByVisibleText("October");
Select YearDrpList = new Select(Register.YearDropDownList());
YearDrpList.selectByValue("1999");
Register.Email().sendKeys("[email protected]");
Register.Password().sendKeys("Beny/000");
Register.ConfirmPassword().sendKeys("Beny/020");
}
@Then("Verify Unsuccessful Registration")
public void Unsuccessful_Register(){
String PasswordError = Register.ErrorMessage().getText();
Assert.assertEquals(PasswordError,"The password and confirmation password do not match.");
}
Login Test Case:
P02_nopLogin Login = new P02_nopLogin();
//First Scenario
@Given("Navigate To Login Form")
public void Login_form(){
Login.LoginForm().click();
}
@When("Fill Required Fields With Valid Data")
public void ValidLogin(){
Login.Email().sendKeys("[email protected]");
Login.Password().sendKeys("Beny/000");
}
@And("Click Login Button")
public void Loginbutton(){
Login.LoginButton().click();
}
@Then("Verify Success Login")
public void SuccessLogin(){
String LogoutText = Login.LogoutButton().getText();
Assert.assertTrue(LogoutText.contains("Log out"));
}
//Second Scenario
@When("Fill Required Fields With Valid Email & Invalid Password")
public void Invalid_login_1(){
Login.Email().sendKeys("[email protected]");
Login.Password().sendKeys("Beny/77");
}
@Then("Verify Unsuccessful Login")
public void UnsuccessLogin(){
String ErrorMsg = Login.ErrorMessage().getText();
Assert.assertTrue(ErrorMsg.contains("Login was unsuccessful."));
}
//Third Scenario
@Then("Fill Required Fields With Invalid Email & Valid Password")
public void Unsuccess_Login_2(){
Login.Email().sendKeys("[email protected]");
Login.Password().sendKeys("Beny/000");
}
//Fourth Scenario
@When("Leave Email & Password Field Empty")
public void Empty_Login(){
Login.Email().sendKeys(" ");
Login.Email().sendKeys(Keys.ENTER);
Login.Password().sendKeys("");
}
@Then("Verify Unsuccessful Login Empty")
public void AssertEmptyLogin(){
String errMessage = Login.emptyErrorMessage().getText();
Assert.assertEquals(errMessage,"Please enter your email");
}
I have Changed the Methods' names and data used in sendkeys in both test cases but the error still appears.
Does Anyone have a suggestion or recommendation for this issue ?
is this issue could be from version of cucumber testng used or something like that ?