Использование Serenity BDD + селен + Junit для автоматизации. У меня есть опыт в BDD огурцов, где мы можем легко делиться шагами. Я хочу достичь того же в безмятежности.
Для простоты, скажем, у нас есть Страница входа в систему , а на следующей странице написано Страница проверки имени . Я создал отдельное POM для этих двух страниц и затем соответствующие определения шагов (@steps) и хотел использовать @steps, определенные в этих двух классах определения шагов, в одном сценарии. Можно ли это сделать?
Я пытался использовать это, но браузер закрывается, как только завершается шаг в определенном классе шагов, поэтому другие шаги не выполняются и выдают исключение
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();
}
}
После того, как stepL.Login_validCredentials()
завершит работу, браузер закроется, и, таким образом, произойдет исключение в методах Name_EnterDetails()
.
- Я попытался вместо того, чтобы создать отдельное определение шага, сохраняя @steps в POM, это сработало, но тогда шаги не видны в отчете спокойствия.
Просто хотел узнать, возможен ли какой-либо другой подход для обмена шагами?
Совместное использование POM и определение шага, пожалуйста, посмотрите
POM для страницы проверки имени:
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());
}
Определение шага для страницы входа в систему:
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());
}
Определение шага для страницы проверки имени:
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();
}
Тест:
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();
}
}