宁静BDD:如何重用测试步骤(@steps),因为我们做在黄瓜BDD(使用微微容器即)

问题描述 投票:0回答:2

用平静BDD +硒+的JUnit automation.i有黄瓜BDD的经验,我们可以轻松地共享steps.i要实现宁静一样。为简单起见,让我们说我们有一个登录页面,并在后面的页面说名称检查页面。我创建了个人POM这两个页面,然后相应的步骤定义(@steps),并想使用在一个脚本这两个步骤定义类定义@steps。可以这样做?

  1. 我一直在使用这种尝试,但浏览器关闭,一旦在特定步骤类步骤完成所以不要执行其它的步骤,并给出异常 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()方法

  1. 我曾尝试,而不是建立单独的步骤定义保持@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();

        }
}
bdd serenity-bdd
2个回答
0
投票

告诉你的代码应该可以正常工作,所以我怀疑问题是其他地方。


-1
投票

当您使用两个类与注释步骤@Steps你应该有:

@Steps
StepsLoginPage stepL; 
@Steps 
StepsNameCheckPage stepN;

在你的情况下第二类为null。

© www.soinside.com 2019 - 2024. All rights reserved.