lis*_*sak 5 java design-patterns webdriver pageobjects selenium-webdriver
我很难习惯WebDriver PageObject模式.请分享您使用PageObjects模式和loadableComponents的经验和方法.
由于PageObject通常代表一个组件或一部分功能,我起初想到我应该使用它来实际执行load()中的一些事情,看看它是否在isLoaded()中做了它应该做的事情.
然后我意识到它应该仅用于"加载"对象(可能是初始化),就像在网站中移动一样,每个对象都有自己的URL.并使用isLoaded()来测试对象是否为READY进行测试.
但是如果你有一个复杂的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
Run Code Online (Sandbox Code Playgroud)
文件说:
公共方法表示页面提供的服务
验证,上传,上传多个,取消,清除
尽量不要暴露页面的内部
我唯一想到的就是将Driver实例隐藏到UnitTests并使用Only PageObjects来保存所有字段名,在PageObjects中的css类名+提供带有输入数据的PageObjects并断言服务/功能的布尔结果
方法返回其他PageObjects
这是最难以习惯的事情.对于一个交互式表单有4个页面对象有点不自然.他们推荐Form1,Form2(Form1),Upload(Form2),Submit(Upload),虽然我发现链接并将前一个对象的引用非常混乱.在测试方法中对所有这些调用get()似乎更好.但我想它背后的想法不是将驱动程序实例暴露给测试,而只使用内部使用驱动程序实例的PageObjects
对于同一个动作的不同结果被建模为不同的方法 我认为这意味着不应该在Page对象侧决定该动作的有效性,而是在Test侧
在编写页面对象时,我有一些不同的方法。转换为您的条款load() 方法以条件等待结束,确保页面包含您想要的内容。然后我不需要任何 isLoaded() - 要么我在那里,要么抛出异常。
页面中的组件是包含它们的页面的属性,我在组件和页面之间设置了双向关系。它们不是功能齐全的页面对象。也许你的表单也可以这样建模。
归档时间: |
|
查看次数: |
3626 次 |
最近记录: |