想象一下,有一个页面说http://google.com/AddUser,在这里输入记录的详细信息并单击保存。完成此操作后,页面将重定向到
您可以在其中查看用户列表,包括您刚刚输入的新记录。
如果我们按页面对象模型进行操作,则AddUser.java
上应该存在输入详细信息和保存记录的方法,并且验证记录是否实际保存和显示的方法应该在UserList.java
< / p>
如果我们认为addUser和userList是两个类的对应对象,它将如下所示:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
因此,在我的测试案例中,我需要调用两个单独的方法,一个用于操作,另一个用于验证。
AddUser.java
和UserList.java
都有BasePage.java
作为超类。
有没有办法将他们两种方式结合成一种方法,或者是否有一些我以错误的方式进行并且有更好的方法吗?
谢谢
答案 0 :(得分:1)
我认为你的方法没有任何问题,但是,我的方法通常是在逻辑上将功能交互与应用程序与测试功能分开。所以,我还是有
addUser.enterDetailsSaveRecord();
但对于userList,我会使用
UserItem foundUser = userList.findUser(targetUser);
其中UserItem是用户表中的一行。然后我的测试将验证foundUser是否正确。
虽然这最终会增加几行代码,但它会使对象模型干净利落,只需对测试对象进行建模,并在测试中找到测试代码。
答案 1 :(得分:1)
使用PageFactory
您有2个PageObjects AddUser.java
和UserList.java
。因此,假设您在调用方法时传递了适当的参数,以下内容适用于您:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
但最佳实践中的一句话Assertions should be done in a seperate utility/package/class
与@JeffC的评论相似:
Best practice is to keep the validation code out of the page objects
因此,您应该创建一个单独的公共实用程序/包/类来处理所有Assertions
。您也可以在class
课程中拨打包含Assertions
的{{1}}。
因此,您的整个测试环境将包含3个PageObject
。一个包含Packages
类的包,一个包含main()/@Test
的包PageObjects
和一个AddUser.java
个包,其中包含Utility
类,例如Assertions
。
答案 2 :(得分:0)
你的方法是正确的。这些方法应属于不同的页面。 请更新方法:
public UserList enterDetailsSaveRecord() {
// your code to save the details
return new UserList();
}
因此您可以将其用作:
addUser.enterDetailsSaveRecord().validateSavedRecord()