PageOne
和PageTwo
都需要使用MasterPage
方法(例如,单击“确定”)。我正在尝试初始化MasterPage
的构造函数中的两个页面。
IntelliJ告诉我要么将super(driver)添加到Page1
/ Page2
构造函数,要么将一个no arg构造函数添加到master。在两种情况下,测试均无法运行。使用super(driver)构造函数,页面将无法初始化,而在no arg构造函数中,clickOk()
方法从Page1 / Page2方法中调用时将失败。
母版页:
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%是否有解决此问题的最佳方法,因此任何指导都将不胜感激。
答案 0 :(得分:0)
首先,MasterPage
不应该了解page1
和page2
,这是它们的基类。您也不需要每个派生的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();
}
}
Page1Steps
public class Page1Steps {
public void testMethod() {
Page1 pageOne = new Page1(driver);
pageOne
.completePageAndGoToPageTwo()
.completePageTwo();
}
}