PageOne
和 PageTwo
都需要使用 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 回答
首先,
MasterPage
应该不知道page1
和page2
,它在每个派生的Page
中需要driver
,你可以在父MasterPage
中保存它 .问题是
MasterPage
构造函数接收WebDriver
参数,但您没有在派生类构造函数中调用super(driver)
.我还建议将测试导航到另一个页面的每个方法都将返回此新页面
MasterPage:
Page1:
Page2:
Page1Steps: