PageOnePageTwo都需要使用MasterPage方法(例如,单击“确定”)。我正在尝试在MasterPage的构造函数中初始化两个页面。
IntelliJ告诉我要么将super(driver)添加到Page1 / Page2构造函数,要么将一个no arg构造函数添加到master。在两种情况下,测试都无法运行。使用super(driver)构造函数,页面将无法初始化,在no arg构造函数中,当从Page1 / Page2方法调用时,clickOk()方法将失败。

母版页:

public class MasterPage {

    private WebDriver driver;
    public Page1 p1;
    public Page2 p2;

    public MasterPage(WebDriver driver) {
        this.driver = driver;
        p1 = new Page1(driver);
        p2 = new Page2(driver);
        PageFactory.initElements(driver, this);
    }

    @FindBy(id = "OkBtn")
    private WebElement okBtn;

    public void clickOk() {
        okBtn.click();
    }
}


第1页:

public class Page1 extends MasterPage {

    private WebDriver driver;

    public Page1(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(id="field")
    private WebElement elementOne;

    public void completePage() {
        elementOne.click();
        clickOk();
    }
}


第2页:

public class Page2 extends MasterPage {

    private WebDriver driver;

    public Page2(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy (id="field")
    private WebElement elementTwo;

    public void completePageTwo() {
        elementTwo.click();
        clickOk();
    }
}


我的意图是像这样利用它们:

public class Page1Steps {

    MasterPage master;
    WebDriver driver;

    public void testMethod() {
        master = new MasterPage(driver);
        master.p1.completePage();
        master.p2.completePageTwo();
    }
}


您也许可以说,我不是100%确定解决此问题的最佳方法,所以任何指导都将不胜感激。

最佳答案

首先,MasterPage不应该了解page1page2,这是它们的基类。您也不需要每个派生的driver中的Page,可以将其保存在父级MasterPage中。

问题是MasterPage构造函数接收到WebDriver参数,但是您没有在派生类构造函数中调用super(driver)的情况。

我还建议将测试导航到另一页的每种方法都将返回此新页

母版页:

public class MasterPage { // can be abstract

    protected WebDriver driver;

    public MasterPage(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(id = "OkBtn")
    private WebElement okBtn;

    protected void clickOk() {
        okBtn.click();
    }
}


第1页:

public class Page1 extends MasterPage {

    public Page1(WebDriver driver) {
        super(driver);
    }

    @FindBy(id="field")
    private WebElement elementOne;

    public Page2 completePageAndGoToPageTwo() {
        elementOne.click();
        clickOk();
        return new Page2(driver);
    }
}


第2页:

public class Page2 extends MasterPage {

    public Page2(WebDriver driver) {
        super(driver);
    }

    @FindBy (id="field")
    private WebElement elementTwo;

    public void completePageTwo() {
        elementTwo.click();
        clickOk();
    }
}


Page1步骤:

public class Page1Steps {

    public void testMethod() {
        Page1 pageOne = new Page1(driver);
        pageOne
            .completePageAndGoToPageTwo()
            .completePageTwo();
    }
}

07-24 09:45
查看更多