我很难习惯WebDriver PageObject模式。请分享您使用PageObjects模式和loadableComponents的经验和方法。
由于PageObject通常代表一个组件或一部分功能,我起初想到我应该用它来实际执行load()中的一些事情,看看它是否在isLoaded()中做了它应该做的事情。
然后我意识到它应该仅用于“加载”对象(可能是初始化),就像在网站中移动一样,每个对象都有自己的URL。并使用isLoaded()来测试对象是否准备好进行测试。
但是如果你有一个复杂的JavaScript命令提交者来测试,那就是JS文件上传器的复合,JS表单基于2个独立的部分而且有三种Orders,你不会移动到任何地方(关于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()似乎更好。但我想它背后的想法不是将驱动程序实例暴露给测试,而是仅使用内部使用驱动程序实例的PageObjects
相同操作的不同结果被建模为不同的方法 我想这意味着不应该在页面对象方面确定该操作的有效性,而是在测试方面
答案 0 :(得分:0)
编写页面对象时我有一些不同的方法。翻译为您的术语 load()方法以条件等待结束,确保页面包含您想要的内容。然后我不需要任何isLoaded() - 要么我在那里,要么抛出异常。
页面中的组件是包含它们的页面的属性,我在组件和页面之间设置了双向关系。它们不是功能完整的页面对象。也许你的表格也可以用这种方式建模。
答案 1 :(得分:0)
可加载组件是页面对象模式的扩展。 WebDriver库中的LoadableComponent类将帮助测试用例开发人员确保成功加载页面或页面组件。它极大地减少了调试测试用例的工作量。页面对象应扩展此可装配组件抽象类,因此,它必须为以下两种方法提供实现:
protected abstract void load()
protected abstract void isLoaded()抛出java.lang.Error
必须在load()和isLoaded()方法中加载的页面或组件确定页面是否已完全加载。如果未完全加载,则会引发错误。