SeleniumJava-页面对象模型查询
假设有一个页面,在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到 您可以在其中查看用户列表,包括您刚刚输入的新记录 如果我们使用页面对象模型,输入详细信息和保存记录的方法应该存在于SeleniumJava-页面对象模型查询,java,selenium,selenium-webdriver,webdriver,pageobjects,Java,Selenium,Selenium Webdriver,Webdriver,Pageobjects,假设有一个页面,在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到 您可以在其中查看用户列表,包括您刚刚输入的新记录 如果我们使用页面对象模型,输入详细信息和保存记录的方法应该存在于AddUser.java上,验证记录是否实际保存和显示的方法应该存在于UserList.java 如果我们考虑AdvUsand和UsRead是这两个类的对应对象,它将类似于下面的内容: addUser.enterDetailsSaveRecord(); userList.validateSave
AddUser.java
上,验证记录是否实际保存和显示的方法应该存在于UserList.java
如果我们考虑AdvUsand和UsRead是这两个类的对应对象,它将类似于下面的内容:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
因此,在我的测试用例中,我需要调用两个单独的方法,一个用于操作,另一个用于验证
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是用户表中的一行。然后,我的测试将验证foundUser是否正确
尽管这最终会产生更多的代码行,但它会使对象模型干净、简单地对被测对象建模,并在测试本身中找到测试代码 使用
PageFactory
您将拥有两个页面对象,分别为AddUser.java
和UserList.java
。因此,假设您在调用这些方法时传递了适当的参数,以下方法对您有效:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
但从最佳实践中可以看出,断言应该在单独的实用程序/包/类中进行,这与@JeffC comment类似:
最佳做法是将验证代码保留在页面对象之外
因此,您应该创建一个单独的公共实用程序/包/类,它将处理所有的断言。您也可以从PageObject
类调用包含断言的类
因此,您的整个测试环境将包含3个包
。一个包包含main()/@Test
类,一个包包含PageObjects
类,例如AddUser.java
,还有一个Utility
包,其中类包含断言,例如validateSavedRecord()
当前方法有什么问题。您描述的是您的实现,我没有发现任何错误。这也是我创建页面对象的方式。最佳实践是将验证代码保留在页面对象之外。解决这个问题的方法是让页面对象返回所需的数据,并让脚本本身在Assert
中进行验证。只有在用户列表页面上才能验证保存的记录。上面列出的代码并没有清楚地说明这一点。只要您输入详细信息并单击“保存”,网站就会自动将您重定向到新页面。上面的代码只是显示了,而不是在测试脚本中创建一个新对象,我们可以在方法本身(工厂方法)中创建新对象,并可以在同一行中用作链接是的,但这会变成一团混乱,因为如果你对此发疯,你可能会有page1.dosomeThingOnPage2().dosomeThingOnPage3().dosomeThingOnPage4().dosomeThingOnPage5()代码>和你结束了一个单一的班轮是通过整个网站导航。这会让你很难理解到底发生了什么。是的,你是对的,你最终只会得到一行代码,你会知道这是内存管理中必要且重要的一步。这肯定会降低它的可读性,为什么你认为它在内存管理中有优势?在链接时,仍然可以像不进行链接一样创建每个页面对象。