[英]Java (Selenium) - super class constructor to initialise sub classes
PageOne<\/code> and
PageTwo<\/code> both need to make use of
MasterPage<\/code> methods (eg click Ok).
PageOne<\/code>和
PageTwo<\/code>都需要使用
MasterPage<\/code>方法(例如单击确定)。
I'm trying to initialize both pages within the constructor of
MasterPage<\/code> .
我正在尝试在
MasterPage<\/code>的构造函数中初始化两个页面。
IntelliJ tells me to either add super(driver) to the
Page1<\/code> \/
Page2<\/code> constructors, or to add a no arg constructor to master.
IntelliJ 告诉我要么将 super(driver) 添加到
Page1<\/code> \/
Page2<\/code>构造函数,要么将无参数构造函数添加到 master。
In both cases, the tests can't run.
在这两种情况下,测试都无法运行。 with a super(driver) constructor, the pages fail to initialize, and in the no arg constructor, the
clickOk()<\/code> method fails when called from the Page1\/Page2 method.
使用超级(驱动程序)构造函数时,页面无法初始化,并且在无参数构造函数中,从 Page1\/Page2 方法调用时
clickOk()<\/code>方法失败。
MasterPage:<\/strong>母版页:<\/strong>
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();
}
}
First of all, MasterPage
shouldn't know about page1
and page2
, it's their base class. 首先,
MasterPage
不应该了解page1
和page2
,这是它们的基类。 You also don't need driver
in each one of the derived Page
, you can hold it in the parent MasterPage
. 您也不需要每个派生
Page
driver
,您可以将其保存在父MasterPage
。
The problem is MasterPage
constructor receives WebDriver
parameter, but you don't have call to super(driver)
in the derived classes constructors. 问题是
MasterPage
构造函数接收WebDriver
参数,但是在派生类构造函数中没有对super(driver)
调用。
I also suggest each method which navigates the test to the another page will return this new page 我还建议将测试导航到另一页的每种方法都将返回此新页
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: 第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);
}
}
Page2: 第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: Page1步骤:
public class Page1Steps {
public void testMethod() {
Page1 pageOne = new Page1(driver);
pageOne
.completePageAndGoToPageTwo()
.completePageTwo();
}
}
On page1, last line of code return new Page2(driver);在 page1 上,最后一行代码返回 new Page2(driver); it puts null instead of driver everytime i try to match arguments.
每次我尝试匹配参数时,它都会放置 null 而不是驱动程序。 Any quick fix?
有什么快速解决办法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.