想象有一个页面在说http://google.com/AddUser在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到
http://google.com/userList
您可以在其中查看用户列表,包括您刚刚输入的新记录。
如果我们按照页面对象模型,那么在AddUser上应该有输入详细信息和保存记录的方法。java
和验证记录是否实际保存和显示的方法应该在用户列表中。java
如果我们认为addUser和userList是两个类的对应对象,它会像下面这样:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
因此,在我的测试用例中,我需要调用两个单独的方法,一个用于操作,另一个用于验证。
都AddUser。java
和用户列表。java
haveBasePage。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
和用户列表。java
。因此,假设您在调用这些方法时传递了适当的参数,以下方法对您有效:
addUser.enterDetailsSaveRecord();
userList.validateSavedRecord();
但是最佳实践中的一句话,断言应该在一个单独的实用程序/包/类中完成,这与@JeffC注释相似:
最佳做法是将验证代码保留在页面对象之外
因此,您应该创建一个单独的公共实用程序/包/类,它将处理所有的断言。您也可以从
PageObject
类调用包含断言的
类。
因此,您的整个测试环境将包含3个
包
。一个包含main()/@Test
类的包,一个包含PageObjects
的包,例如AddUser。java
和一个实用程序
包,其中包含用于包含断言的类,例如
ValidateSaveRecord()
。
我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题
是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢
我正在使用Perl和Selenium构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定Selenium驱动程序将适合页面对象模型的实现。 每个页面对象是否应该“有”一个驱动程序?我的想法是,每个页面对象代表页面向用户提供的一组服务。考虑到这个概念,页面对象与驱动程序没有“has-a”关系。页面对象与驱动程序交互。不过,我仍在寻求建议。我应该将驱动程序作为web应用程序中每个页面对象的一部
我想在我的页面对象中使用剧作家的定位器。我找到了一个Javascript示例(为了简洁起见,将其剥离): 试图在我的Java代码中做同样的事情: 引发空指针异常,因为初始化登录按钮时,尚未启动。 我可以 但是对于大型页面对象类来说,这将变得有点冗长/混乱。 有没有关于如何在Java中实现这一点的想法? 谢谢
在Java页面对象模型中创建步骤时实例化对象的最佳方法是什么? 有人知道Cucumber脚本是如何编译的吗? 我想,如果一切都建成并符合要求,下面的第二个或第三个选项可能是最好的方法。 如果只编译与正在执行的测试相关的步骤,那么我想这将是第一个。 我举了以下例子: 以上所有步骤(在同一个LoginSteps.java类中加上更多)从以下开始 这是最好的方法,还是创建单个实例更好? 或者在Login
我试图使用Xpath立即从活动元素获取数据,但当我运行该项目时,我遇到了这个错误 线程“main”组织中出现异常。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档