当前位置: 首页 > 知识库问答 >
问题:

SeleniumJava-页面对象模型查询

公良鸿畅
2023-03-14

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

http://google.com/userList

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

如果我们按照页面对象模型,那么在AddUser上应该有输入详细信息和保存记录的方法。java和验证记录是否实际保存和显示的方法应该在用户列表中。java

如果我们认为addUser和userList是两个类的对应对象,它会像下面这样:

addUser.enterDetailsSaveRecord();

userList.validateSavedRecord();

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

AddUser。java用户列表。javahaveBasePage。java作为超类。有没有一种方法可以将它们合并成一个单一的方法,或者我有没有用一种错误的方法去做什么,有没有更好的方法?

非常感谢。

共有3个答案

杜高谊
2023-03-14

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

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

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

addUser.enterDetailsSaveRecord().validateSavedRecord()
松秦斩
2023-03-14

我也不认为你的方法有什么问题,尽管,我的方法通常是从逻辑上分离与应用程序的功能交互和测试功能。所以我还是会

addUser.enterDetailsSaveRecord();

但对于userList,我会使用

UserItem foundUser = userList.findUser(targetUser);

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

尽管这最终会产生更多的代码行,但它会使对象模型干净、简单地对被测对象建模,并在测试本身中找到测试代码。

羊舌高爽
2023-03-14

使用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元素引用:元素未附加到页面文档