【问题标题】:Selenium Page Object Model FrameworkSelenium 页面对象模型框架
【发布时间】:2022-01-09 23:02:02
【问题描述】:

我正在学习使用 selenium webdriver 的页面对象模型,有人可以就这些问题给我建议吗?

1 - 为什么POM中的每个页面都有构造函数来初始化webdriver对象? (如下图)如果webdriver没有初始化会怎样?

public class New_Register 
{
    WebDriver driver;

    public New_Register(WebDriver driver)
    {
        this.driver=driver;
    }

    @FindBy(xpath=".//input[@id='emailAdd']") WebElement EmailID;
}

2 - POM 是 Selenium Webdriver 中的框架还是设计模式?

【问题讨论】:

    标签: java selenium-webdriver webdriver


    【解决方案1】:

    如果您的 Page Object 继承自 LoadableComponent 类,迫使您重写 load 和 isloaded 方法,并且您使用 PageFactory.initElements 为您的 webelements 初始化代理(@Find...),我认为您将其用作框架。如果您处理所有这些事情并注意检查您的页面是否已加载、获取 web 元素、传递 pageobject 等,但您使用一个类来对页面或其部分功能进行建模,则它可能被视为一种设计模式。

    如果您不传入驱动程序,则必须自己初始化驱动程序。否则,当您在其上调用任何方法时,您将获得最喜欢的空指针异常。此外,当您调用 PageFactory.initElements 时,它首先会在页面对象上查找以驱动程序作为唯一参数的构造函数。然后如果它没有得到前一个,它只会寻找默认的,然后你将不得不自己处理驱动程序初始化。

    【讨论】:

      【解决方案2】:

      a) 我将首先回答您的第二个问题 - UI 测试自动化中的页面对象模型是一种设计模式而不是框架。 框架使您可以轻松访问通用方法/配置等,您可以在其之上构建应用程序(让它成为 Web 应用程序或测试自动化套件)并减少我们的大部分样板代码。一个好的框架应该利用现有的库和用户编写的代码,并且应该完成大部分繁重的工作。 例如,TestNG 库可以被视为一个测试框架,它为我们提供测试相关的功能(如运行测试、为我们的测试提供数据、定义运行测试的规则,如优先级等)。

      而设计模式为您的项目中常见或重复的设计问题提供了解决方案。
      例如,您可能需要实例化 Webdriver 的单个实例或任何数据库读取对象,以控制其在整个执行过程中的操作。现在要解决这个问题,您可以在代码中使用单例模式。阅读其他设计模式,如 Facade 和 Builder 会更清楚地说明这一点。 现在类似地,您拥有 POM,它有助于减少代码重复和改进测试用例维护,因为我们将各自的 Page 类与其测试分开。

      再一次不要将设计模式与 DRY 和 SOLID 等设计原则混淆。

      所以简而言之,所有答案都不同:)

      b) 对于您的第一个问题,请参阅下面提供的我已经存在的答案 - 正如@Grasshopper 正确提到的那样,如果你不实现构造函数,你会得到一个空指针异常。

      https://stackoverflow.com/a/70078344/6053575

      如果您有任何其他问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多