将页面对象模型与 Pagefactory 一起使用的最佳方法是什么

What is the best way to use Page Object Model with Page Fatcory

我目前有一项任务是在 Java 中创建一个自动化框架,我与架构师就测试设计发生了争执。下面是我当前的框架,Maven、POM 和 PageFactory。

项目
- 实用程序包 - 包含所有实用程序 classes
- Locators - 仅包含网站的 WebElements(页面工厂)
- 操作 - 包含定位器的点击、发送键和其他操作
- Step - 调用和声明 Action class 方法(黄瓜步骤定义)
- 客户听众 - 听众class

架构师建议我删除操作 class 并在定位器 class 本身内添加所有操作,这将避免为每个定位器 class 创建额外的 class ].但我的想法是,随着项目规模的扩大,这看起来会更加混乱。因此,我尝试将定位器分离为不同的 class,并在不同的 class 中对其进行操作。所以想问一下最好的方法是什么,在定位器中添加动作 class 或分开 ?

是的,你的方法更好。所有常见操作都应该在一个 class 下,每个页面对象 class 都应该扩展它。通过这样做,这将使您的测试更加健壮,并阻止页面 classes 被驱动程序实现细节污染。

虽然这是一个自以为是的问题,但我建议使用您的软件架构师的方法并删除 Action classes。我不确定步骤 classes 的目的是什么,所以我也会删除它们。

  • 项目
    • 实用程序
    • 页面对象
    • 自定义监听器
    • WebDriver

您可以创建一个包含所有常用定位器和方法的 BasePageObject,例如处理一些导航栏或菜单。这个 class 然后应该由所有其他页面对象扩展。

除此之外,我建议您查看 答案。它显示了如何包装 RemoteWebDriver 以使其更健壮,这将有助于实施 UI 测试。

页面对象模型,您可以在其中将所有 Web 定位器分配到单个文件中。根据不同的场景、不同的网页或您定义的自定义实用程序(如果有),应该有不同的class。

您可以通过两种方法使用页面对象模型:-

-简单定义:(有很多规定可以不引用WebElement,直接使用By reference实现这样的东西,所以根本不需要给Web元素赋值。)

By demo_get_text=By.className("xyz");

-使用页面工厂:(从上面执行得更快)

@FindBy(className="xyz")  WebElement demo_get_text;