2017-09-12 51 views
1

想象一下,有一个页面说http://google.com/AddUser,在这里输入记录的详细信息并单击保存。一旦你这样做的页面重定向到Selenium Java - 页面对象模型查询

http://google.com/userList

在这里你可以看到用户,包括您刚才输入的新记录列表。

如果我们通过页面的对象模型去的方法输入详细信息,并保存记录应该存在于AddUser.java和方法来验证,如果记录实际上保存并显示应在UserList.java

如果我们考虑ADDUSER和用户列表是这两个类将是类似下面相应的对象:

addUser.enterDetailsSaveRecord(); 

userList.validateSavedRecord(); 

所以在我的测试情况下,我需要调用2种独立的方法,一个动作等进行验证。

AddUser.javaUserList.java都有BasePage.java作为超类。 有没有办法将他们都归入单一方法,还是存在我正在以错误的方式进行的事情,并且有更好的方法吗?

谢谢

+0

目前的方法有什么问题。你描述的是你的实现,我发现没有错。 –

回答

1

使用PageFactory您有2个PageObjects为AddUser.javaUserList.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。您也可以从PageObject课中调用class,其中包含Assertions

所以你的整个测试环境将包含3 Packages。一个包含main()/@Test类的包,一个包含例如PageObjects的包, AddUser.java和一个Utility封装,包含Assertions例如validateSavedRecord()

0

您的方法是正确的。这些方法应该属于不同的页面。 请更新方法:

public UserList enterDetailsSaveRecord() { 
// your code to save the details 
return new UserList(); 
} 

因此,你可以使用它作为:

addUser.enterDetailsSaveRecord().validateSavedRecord() 
+0

在用户列表页面上,您无法验证保存的记录。您上面列出的代码没有清楚地表明。 – JeffC

+0

只要您输入详情并点击保存,网站就会自动将您重定向到新页面。上面的代码只是显示了在测试脚本中不是创建一个新对象,我们可以在方法本身(Factory方法)中创建一个新对象,并且可以在同一行中用作链接 –

+0

是的,但这会变成一团糟,因为如果你疯了这个,你可以使用'page1.dosomeThingOnPage2()。dosomeThingOnPage3()。dosomeThingOnPage4()。dosomeThingOnPage5();'你最终得到一个在整个站点上浏览的内存。这使得很难跟踪正在发生的事情。 – JeffC

1

我看不出有什么毛病你的做法要么,虽然,我的做法通常是逻辑上分离的功能互动与测试功能的应用程序。所以,我仍然有

addUser.enterDetailsSaveRecord(); 

但用户列表我会用

UserItem foundUser = userList.findUser(targetUser); 

其中UserItem是在用户表中的一行。然后我的测试将验证找到的用户是否正确。尽管这最后会有更多的代码行,但它会导致对象模型干净利落地模拟被测试对象,并在测试本身中找到测试代码。

+0

这也是我创建页面对象的方式。最佳做法是将验证代码保留在页面对象之外。解决这个问题的方法是让页面对象返回所需的数据,并让脚本本身在'Assert'中进行验证。 – JeffC

相关问题