我很难习惯 WebDriver PageObject 模式。请分享您使用 PageObjects 模式和 loadableComponents 的经验和方法。
由于 PageObject 通常代表一个组件或功能,所以我首先想到我应该使用它在 load() 中实际做一些事情,看看它是否在 isLoaded() 中完成了它应该做的事情。
然后我意识到它应该只用于“加载”对象(可能是初始化),因为它是在网站周围移动的情况下,每个对象都有自己的 url。并使用 isLoaded() 来测试对象是否已准备好进行测试。
但是如果你有一个复杂的 JavaScript 订单提交器来测试,即 JS 文件上传器、基于 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
文档说:
- 可加载组件
-
公共方法代表页面提供的服务
验证、上传、上传多个、取消、清除
尽量不要暴露页面的内部
我唯一想到的是将 Driver 实例隐藏到 UnitTests 并使用 Only PageObjects 来保留 PageObjects 中的所有字段名称、css 类名称 + 为 PageObjects 提供输入数据并断言服务/功能的布尔结果
方法返回其他 PageObjects
这是最难适应的。一个交互式表单有 4 个页面对象有点不自然。他们推荐 Form1、Form2(Form1)、Upload(Form2)、Submit(Upload),尽管我发现链接和移交对前面对象的引用非常混乱。在测试方法中对所有这些调用 get() 似乎更好。但我想它背后的想法不是将 Driver 实例暴露给测试,而是仅使用在内部使用 Driver 实例的 PageObjects
同一操作的不同结果被建模为不同的方法 我想这意味着不应该在页面对象端决定该操作的有效性,而是在测试端