java - 如何在 PageObjects 模式中使用 WebDriver/Selenium 2 LoadComponents?

标签 java design-patterns webdriver selenium-webdriver pageobjects

我很难适应 WebDriver PageObject 模式。请分享您使用 PageObjects 模式和 loadableComponents 的经验和方法。

由于 PageObject 通常代表一个组件或功能,一开始我想到我应该用它在 load() 中实际做一些事情,看看它是否在 isLoaded() 中做它应该做的事情。

然后我意识到它应该只用于“加载”对象(可能是初始化),因为它是在网站上移动的情况,每个对象都有自己的 url。并使用 isLoaded() 来测试对象是否准备好进行测试。

但是如果你有一个复杂的 JavaScript 订单提交器来测试,它是 JS 文件 uploader 的复合体,基于 2 个独立部分的 JS 表单并且有三种订单,你不会移动任何地方(关于 URL) ,只是元素的状态在变化。

考虑 get() 方法。您进入带有交互式表单的页面。当页面上存在表单时加载它。然后你有 form1 和 form2 对象……它们的 load() 和 isLoaded() 方法应该是什么样子,它们可以立即执行操作,因为它们不需要任何加载,只需测试它们的服务。

一团乱麻,不知道isLoaded()方法是用来检查对象是否加载,还是对象加载和设置正确。但我想前一种方式是正确的,在测试中应该保证设置的有效性。

场景:

Testing first part of html form - test that field client side validation works
Testing the second one that depends on the first one
Testing the following file uploader - upload, canceling, clearing, order, fileIDs
Testing the overall html form submission - ServerSide validation errors, results

文档说:

  • LoadableComponent
  • PageObjects

    1. 公共(public)方法表示页面提供的服务

      验证、上传、上传多次、取消、清除

    2. 尽量不要暴露页面的内部结构

      我唯一想到的是将 Driver 实例隐藏到 UnitTests 并使用 Only PageObjects 保留所有字段名称,PageObjects 中的 css 类名称 + 为 PageObjects 提供输入数据并断言服务/功能的 boolean 结果

    3. 方法返回其他页面对象

      这是最难适应的事情。一个交互式表单有 4 个页面对象有点不自然。他们推荐Form1, Form2(Form1), Upload(Form2), Submit(Upload),虽然我觉得链接和传递对前面对象的引用非常困惑。在测试方法中对所有这些调用 get() 似乎更好。但我猜它背后的想法不是将 Driver 实例暴露给测试,而是仅使用内部使用 Driver 实例的 PageObjects

    4. 同一 Action 的不同结果被建模为不同的方法 我想这意味着不应在页面对象端决定该操作的有效性,而应在测试端决定该操作的有效性

最佳答案

我在编写页面对象时有一些不同的方法。翻译成您的术语 load() 方法以有条件的等待结束,以确保页面包含您想要的内容。然后我不需要任何 isLoaded() - 要么我在那里,要么抛出异常。

页面中的组件是包含它们的页面的属性,我在组件和页面之间设置双向关系。它们不是功能齐全的页面对象。也许您的表格也可以这样建模。

关于java - 如何在 PageObjects 模式中使用 WebDriver/Selenium 2 LoadComponents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250485/

相关文章:

javascript - 在 JavaScript 中重新定义方法

Java:从 GUI 获取值

java - Selenium : Handling Loading screens obscuring the web elements.(Java)

c# - 谷歌搜索按钮点击 Selenium

java - A*(A星)算法优化

java - 我的 PeriodFormatter 没有按预期运行 - 我做错了什么?

java - 在 Android 中,如何使用 VidEffects 的滤镜渲染视频

java - 在数据集合上运行流程的良好设计模式?

java - 无法使用 IEDriverServer 单击元素

java - Grails 2.3 数据库迁移不起作用?