Selenium Java - 页面对象模型查询

时间:2017-09-12 07:11:39

标签: java selenium selenium-webdriver webdriver pageobjects

想象一下,有一个页面说http://google.com/AddUser,在这里输入记录的详细信息并单击保存。完成此操作后,页面将重定向到

http://google.com/userList

您可以在其中查看用户列表,包括您刚刚输入的新记录。

如果我们按页面对象模型进行操作,则AddUser.java上应该存在输入详细信息和保存记录的方法,并且验证记录是否实际保存和显示的方法应该在UserList.java < / p>

如果我们认为addUser和userList是两个类的对应对象,它将如下所示:

addUser.enterDetailsSaveRecord();

userList.validateSavedRecord();

因此,在我的测试案例中,我需要调用两个单独的方法,一个用于操作,另一个用于验证。

AddUser.javaUserList.java都有BasePage.java作为超类。 有没有办法将他们两种方式结合成一种方法,或者是否有一些我以错误的方式进行并且有更好的方法吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我认为你的方法没有任何问题,但是,我的方法通常是在逻辑上将功能交互与应用程序与测试功能分开。所以,我还是有

addUser.enterDetailsSaveRecord();

但对于userList,我会使用

UserItem foundUser = userList.findUser(targetUser);

其中UserItem是用户表中的一行。然后我的测试将验证foundUser是否正确。

虽然这最终会增加几行代码,但它会使对象模型干净利落,只需对测试对象进行建模,并在测试中找到测试代码。

答案 1 :(得分: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。您也可以在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()