java - Java (Selenium) - 用于初始化子类的超类构造函数
问题描述
PageOne
并且PageTwo
两者都需要使用MasterPage
方法(例如单击确定)。我正在尝试在MasterPage
. IntelliJ 告诉我要么将 super(driver) 添加到Page1
/Page2
构造函数,要么将无参数构造函数添加到 master。在这两种情况下,测试都无法运行。使用超级(驱动程序)构造函数,页面无法初始化,并且在无参数构造函数中,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% 确定解决此问题的最佳方法,因此我们将不胜感激任何指导。
解决方案
首先,MasterPage
不应该知道page1
and 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();
}
}
第1页步骤:
public class Page1Steps {
public void testMethod() {
Page1 pageOne = new Page1(driver);
pageOne
.completePageAndGoToPageTwo()
.completePageTwo();
}
}
推荐阅读
- wysiwyg - Jodit -> 初始化后隐藏工具栏
- excel - Excel 在公式中以不同的方式处理相同的日期格式?
- .net - 将字符串解析为具有不同字段名称(键值)的实体
- javascript - javascript悬停在TR上以在悬停时显示图像仅在悬停后显示
- sql-server - 如何在 SQL Server 中调用 sp_prepexecrpc?
- python-3.x - NLTK - 如何获取频率分布大于特定数字的项目
- python - 如何遍历 xml 并将其保存到 Python 中的数据框中?
- javascript - 可以用角度编写javascript代码吗
- mysql - 使用子查询选择时为空结果
- html - 通过 Internet 发送 HTML 时图像消失