Selenium Java - 页面对象模型查询
Selenium Java - Page Object Model Query
假设有一个页面显示 http://google.com/AddUser,您可以在此处输入记录的详细信息并单击保存。执行此操作后,页面将重定向到
在这里您可以看到用户列表,包括您刚刚输入的新记录。
如果我们使用页面对象模型,输入详细信息和保存记录的方法应该在 AddUser.java
上,验证记录是否实际保存和显示的方法应该在 UserList.java
如果我们认为 addUser 和 userList 是两者的对应对象 类 它将如下所示:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
所以在我的测试用例中,我需要调用 2 个单独的方法,一个用于操作,另一个用于验证。
AddUser.java
和 UserList.java
都有 BasePage.java
作为超类。
有没有一种方法可以将它们合并为一个方法,或者我做错了什么,有没有更好的方法?
谢谢
你的做法是正确的。这些方法应该属于不同的页面。
请将方法更新为:
public UserList enterDetailsSaveRecord() {
// your code to save the details
return new UserList();
}
因此您可以将其用作:
addUser.enterDetailsSaveRecord().validateSavedRecord()
我也没有发现您的方法有任何问题,尽管我的方法通常是在逻辑上将与应用程序的功能交互与测试功能分开。所以,我还是会
addUser.enterDetailsSaveRecord();
但对于 userList,我会使用
UserItem foundUser = userList.findUser(targetUser);
其中 UserItem 是 table 用户中的一行。然后我的测试将验证 foundUser 是否正确。
虽然这最终会增加几行代码,但它会导致对象模型干净、简单地对被测对象进行建模,并且在测试本身中可以找到测试代码。
使用 PageFactory
你有 2 个页面对象 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
因此,您应该创建一个单独的通用 utility/package/class 来处理所有 Assertions
。您也可以从 PageObject
class 调用包含 Assertions
的 class
。
因此您的整个测试环境将包含 3 Packages
。一包包含 main()/@Test
class,一包包含 PageObjects
例如AddUser.java
和一个带有 class 的 Utility
包用于包含 Assertions
例如 validateSavedRecord()
.
假设有一个页面显示 http://google.com/AddUser,您可以在此处输入记录的详细信息并单击保存。执行此操作后,页面将重定向到
在这里您可以看到用户列表,包括您刚刚输入的新记录。
如果我们使用页面对象模型,输入详细信息和保存记录的方法应该在 AddUser.java
上,验证记录是否实际保存和显示的方法应该在 UserList.java
如果我们认为 addUser 和 userList 是两者的对应对象 类 它将如下所示:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
所以在我的测试用例中,我需要调用 2 个单独的方法,一个用于操作,另一个用于验证。
AddUser.java
和 UserList.java
都有 BasePage.java
作为超类。
有没有一种方法可以将它们合并为一个方法,或者我做错了什么,有没有更好的方法?
谢谢
你的做法是正确的。这些方法应该属于不同的页面。 请将方法更新为:
public UserList enterDetailsSaveRecord() {
// your code to save the details
return new UserList();
}
因此您可以将其用作:
addUser.enterDetailsSaveRecord().validateSavedRecord()
我也没有发现您的方法有任何问题,尽管我的方法通常是在逻辑上将与应用程序的功能交互与测试功能分开。所以,我还是会
addUser.enterDetailsSaveRecord();
但对于 userList,我会使用
UserItem foundUser = userList.findUser(targetUser);
其中 UserItem 是 table 用户中的一行。然后我的测试将验证 foundUser 是否正确。
虽然这最终会增加几行代码,但它会导致对象模型干净、简单地对被测对象进行建模,并且在测试本身中可以找到测试代码。
使用 PageFactory
你有 2 个页面对象 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
因此,您应该创建一个单独的通用 utility/package/class 来处理所有 Assertions
。您也可以从 PageObject
class 调用包含 Assertions
的 class
。
因此您的整个测试环境将包含 3 Packages
。一包包含 main()/@Test
class,一包包含 PageObjects
例如AddUser.java
和一个带有 class 的 Utility
包用于包含 Assertions
例如 validateSavedRecord()
.