Using Serenity BDD +selenium+Junit for automation.i have experience in cucumber BDD where we can easily share steps.i want to achieve the same in serenity. For simplicity let's say we have a Login page and a subsequent page say Name Check Page. I have created individual POM for these two pages and then corresponding step definitions(@steps) and wanted to use @steps defined in these two step definition classes in single script. Can this be done?
I have tried using this but browser closes as soon the step in particular step class finishes so other steps do not get executed and gives exception
public class AA_NameCheck{ @Managed(driver="edge",clearCookies=ClearCookiesPolicy.BeforeEachTest) WebDriver driver; @Steps StepsLoginPage stepL; StepsNameCheckPage stepN; @Test public void NameCheck_ValidUser() throws InterruptedException{ stepL.Launch(); stepL.Login_ValidCredential(); stepN.Enter_NameDetails(); } }
After stepL.Login_validCredentials()
finishes browser gets close and thus exception occur on methods on Name_EnterDetails()
- I have tried instead of creating separate step definition keeping the @steps in POM ,it worked but the steps are then not visible in serenity report.
Just wanted to know any other approach is possible for sharing steps?
Sharing POM and Step Definition,Please have a look
POM for Name Check Page:
public class NameCheckPage extends PageObject {
public NameCheckPage(WebDriver driver) {
super(driver);
}
Actions action=new Actions(getDriver());
@FindBy(id="xx")
public WebElementFacade EngName;
@FindBy(id="xx")
public WebElementFacade SecondEngName;
@FindBy(id="xx")
public WebElementFacade ThirdEngName;
@FindBy(xpath="xx")
public List<WebElementFacade> NameCheckBtns;
@FindBy(id="xx")
public WebElementFacade PreliminaryStatusChk;
public void Enter_FirstEngName() {
EngName.isVisible();
EngName.sendKeys("xylon");
}
public void Enter_EnglishName(String name) {
EngName.isVisible();
EngName.sendKeys(name);
}
public void Enter_SecEngName() {
SecondEngName.isVisible();
SecondEngName.sendKeys("xylonone");
}
public void Enter_ThirdEngName() {
ThirdEngName.isVisible();
ThirdEngName.sendKeys("xylontwo");
}
public void Enter_FirstEngNameone() {
EngName.isVisible();
EngName.sendKeys("xylo");
}
public void Enter_SecEngNameone() {
SecondEngName.isVisible();
SecondEngName.sendKeys("xyloone");
}
public void Enter_ThirdEngNameone() {
ThirdEngName.isVisible();
ThirdEngName.sendKeys("xylotwo");
}
public void AddCompany() {
action.click(NameCheckBtns.get(1)).perform();
}
public void AddSecondCompany() {
action.click(NameCheckBtns.get(2)).perform();
}
public void PrelimCheck() throws InterruptedException {
for(WebElement btns:NameCheckBtns) {
System.out.println("Buttons :"+btns.getText());
}
System.out.println(NameCheckBtns.get(4).getText());
JavascriptExecutor js=(JavascriptExecutor)getDriver();
js.executeScript("arguments[0].scrollIntoView();", NameCheckBtns.get(4));
action.click(NameCheckBtns.get(4)).perform();
PreliminaryStatusChk.isVisible();
System.out.println(PreliminaryStatusChk.getText());
}
Step Definition for Login Page:
public class StepsLoginPage extends ScenarioSteps {
private static final long serialVersionUID = 1L;
LoginPage login;
@Step
public void Launch() {
login.Launch();
}
@Step
public void Login_ValidCredential() {
login.Launch();
login.Enter_Username();
login.Enter_Password();
login.Click_LoginBtn();
//tried using return but of no help the browser still closes
//return new NameCheckPage(login.getDriver());
}
Step Definition for Name Check Page:
public class StepsNameCheckPage extends ScenarioSteps{
private static final long serialVersionUID = 1L;
NameCheckPage namechk;
@Step
public void Enter_NameDetails() throws InterruptedException {
namechk.Enter_FirstEngName();
namechk.AddCompany();
namechk.Enter_SecEngName();
namechk.AddCompany();
namechk.Enter_ThirdEngName();
namechk.PrelimCheck();
}
Test:
public class AA_NameCheck{
@Managed(driver="edge",clearCookies=ClearCookiesPolicy.BeforeEachTest)
WebDriver driver;
@Steps
StepsLoginPage stepL;
StepsNameCheckPage stepN;
@Test
public void NameCheck_ValidUser() throws InterruptedException{
stepL.Launch();
stepL.Login_ValidCredential();
stepN.Enter_NameDetails();
}
}