gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:29:30 24 4
gpt4 key购买 nike

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

母版页:

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 不应该知道 page1page2,这是它们的基类。您也不需要在每个派生 Page 中都需要 driver,您可以将其保存在父 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();
}
}

关于Java (Selenium) - 用于初始化子类的父类(super class)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com