应该从PageObject还是测试类传递测试数据?

时间:2013-03-28 14:35:32

标签: selenium webdriver testng pageobjects

我正在使用Selenium Webdriver按照PageObject模式开发自动化框架,其中有2层:

  • 测试类(测试规范)
  • PageObject类(测试实现)

我的测试类包含TestNG注释方法(@Test@BeforeTest@AfterTest等),其中我正在创建PageObject类的对象并调用这些类中的方法,这将是实际上与AUT互动。

我将数据传递给测试的方式是包括:

  • 中所有元素的定位符(css / xpath / class / id locators) 应用
  • 所需的所有测试数据

在属性文件中(例如:testDataSet1.properties)。我正在创建属性文件的HashMap<String, String>并将其作为参数传递给所有页面对象,这些对象将从散列映射中读取数据并在脚本中使用它们。我根本没有从测试类中传递测试数据。

我的问题是什么,我不确定在PageObjects中读取测试数据是否合适。我觉得这种方法非常不灵活,因为我将测试数据绑定到PageObjects而不是将它绑定到测试中。因此,当我需要在多次迭代中执行数据驱动的测试/运行自动化套件时,这将无法工作。因为,目前如果我需要使用不同的数据,每次我需要手动去更改hashmap中指定的键,它将从属性文件中获取不同的值。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我个人喜欢让页面对象充当网页本身,为我提供执行操作和验证方法。例如,我将所有CSS,ID等选择器保留在页面对象本身中。这样,如果网页的更新中断了测试,我只需转到该网页的相应页面对象并在那里更新选择器。

就测试数据而言,我还有一些其他文件(类,属性等),用于从中提取测试数据。测试用户。测试类本身提取此测试数据并将其传递给Page Objects(需要时)或Page Object方法以进行验证。

测试数据类的一个例子(我的有点复杂,但这只是一个简单的例子):

public TestUser(){
    username = getUniqueUser();
    password = ""; 
    name = "Test User";
    email = getUniqueEmail(username);
}

TL;博士;

  • 我将html选择器保存在各自的Page Objects中(如果需要,可以使用子页面对象重新使用)。
  • 我将测试数据混合在类,属性文件和测试类之间。