1

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

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

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

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

  • 应用程序中元素的所有定位器(css​​/xpath/class/id 定位器)。
  • 所需的所有测试数据

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

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

有什么建议么?

4

1 回答 1

3

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

就测试数据而言,我还有一些其他文件(类、属性等)可用于从中提取测试数据。测试用户。测试类本身提取此测试数据并将其传递到页面对象(需要时)或用于验证目的的页面对象方法。

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

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

tl;博士;

  • 我将 html 选择器保留在它们各自的页面对象中(如果需要,可以使用子页面对象进行重用)。
  • 我将测试数据混合在类、属性文件和测试类之间。
于 2013-03-28T14:49:45.387 回答