我很难适应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
文档中提到:
- LoadableComponent
-
公共方法代表页面提供的服务
验证、上传、批量上传、取消、清除
尽量不要暴露页面的内部细节
我能想到的唯一一件事就是将Driver实例隐藏到单元测试中,只使用PageObjects来保留所有字段名、CSS类名,并为PageObjects提供输入数据和断言服务/功能的布尔结果
方法返回其他的PageObjects
这是最难适应的。为一个交互式表单准备4个页面对象似乎不太自然。虽然他们推荐使用Form1、Form2(Form1)、Upload(Form2)、Submit(Upload)的链接方式,但我发现链接和引用前面的对象非常混乱。在测试方法中对它们全部调用get()似乎更好。但我想背后的思想并不是将Driver实例暴露给测试,而是仅使用内部使用Driver实例的PageObjects。
相同操作的不同结果被建模成不同的方法 我想这意味着在页面对象方面不能决定该操作的有效性,而是在测试方面进行决策。