【问题标题】:How to handle inheritance on page objects如何处理页面对象的继承
【发布时间】:2020-09-23 16:00:55
【问题描述】:

我有以下问题:

我有一个主页,我在其中加载具有以下结构的 URL:

public class HomePage extends BasePage {

public HomePage(WebDriver driver) {
    super(driver);
    getDriver().get("URL");
}

然后我有另一个页面,它从主页延伸:

public class OptionsPage extends HomePage {

public OptionsPage(WebDriver driver) {
    super(driver);
}

现在,问题出在测试中,我想从操作中获取 OptionsPage(假设单击主页上的按钮)。一旦我调用它,页面似乎就会再次加载:

    // Open page
    HomePage home = getHomePage(); //loads URL from BasePage

    // click on some option which takes me to the OptionsPage
    OptionsPage options = home.clickOnRandomOption(); //this method right here loads the URL again, from there the assertion fails since the page just loads again.
    Assert.assertTrue(options.isRandomOptionSelected(), "Obviously it wasn't selected.");

在首页点击选项的方法如下:

public OptionsPage clickOnRandomOption() {
    getWait().until(ExpectedConditions.elementToBeClickable(RandomOption));
    RandomOption.click();
    return new FlightOptionsPage(getDriver());
}

谁能帮帮我?

【问题讨论】:

    标签: java selenium inheritance automation pageobjects


    【解决方案1】:

    您面临的挑战是,当您实例化您的 optionsPage 时,您正在执行链上的所有构造函数。

    从您的代码结构中,每次您想创建 optionsPage 时,您都在运行:OptionsPage -> HomePage -> BasePage。这是 Gorilla-banana-jungle 问题的测试 POM 等价物。

    我可以看到home.clickOnRandomOption() 的返回类型是OptionsPage,所以我假设这是您实例化选项页面的地方。

    两个建议 - 其中任何一个都可以解决您的问题,但我建议您考虑同时实施这两个建议:

    • 不要这样链接你的页面。将每个页面分开并仅扩展一次,即每个页面仅从 BasePage 扩展。如果有一个常用的方法需要一个以上的页面,放在你的BasePage中,不需要从其他页面扩展页面。

    • 不要在构造函数中执行影响测试上下文的代码 - 仅将构造函数用于初始化变量。我的意思是,当您创建 HomePage 时,不要在构造函数中导航 (driver.get("URL"))。当您运行测试时,这将为您带来未来的复杂性。例如,如果您想从pageX 开始并通过自动重定向导航到主页,然后在主页上执行更多操作,该怎么办? - 您的 POM 将不支持它,因为当您创建 homePage 时,您要将 URL 导航到那里。

    【讨论】:

    • 这样链式的构造函数肯定不是一个好的选择。我所做的是,在我的 BaseTest 类中,只需在 BeforeSuite 方法上获取 URL,这样我就可以在每次测试之前启动并运行页面,并将其从 HomePage 中取出。将来肯定会关注这一点,并且可能从现在开始将常用方法放在 BasePage 中。谢谢!
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多