首页 文章

Java(Selenium) - 用于初始化子类的超类构造函数

提问于
浏览
0

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

MasterPage:

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();
    }
}

Page1:

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();
    }
}

Page2:

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%确定解决此问题的最佳方法,因此任何指导都会非常感激 .

1 回答

  • 0

    首先, MasterPage 应该不知道 page1page2 ,它在每个派生的 Page 中需要 driver ,你可以在父 MasterPage 中保存它 .

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

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

    MasterPage:

    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();
        }
    }
    

    Page1:

    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);
        }
    }
    

    Page2:

    public class Page2 extends MasterPage {
    
        public Page2(WebDriver driver) {
            super(driver);
        }
    
        @FindBy (id="field")
        private WebElement elementTwo;
    
        public void completePageTwo() {
            elementTwo.click();
            clickOk();
        }
    }
    

    Page1Steps:

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

相关问题