【问题标题】:Should test data be passed from PageObject or test classes?测试数据应该从 PageObject 还是测试类传递?
【发布时间】:2013-03-28 14:35:31
【问题描述】:

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

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

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

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

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

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

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

有什么建议吗?

【问题讨论】:

    标签: selenium webdriver testng pageobjects


    【解决方案1】:

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

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

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

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

    tl;博士;

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

    【讨论】:

    • 您能否举个例子,您使用类从什么方式中提取测试数据?你是说TestNG类吗?另外,我可以从您的回答中得出 test-data 是要从测试类传递的吗?
    • 有时我会在页面对象中包含测试数据,但这是针对非常特殊的情况。否则,我将测试数据从测试类传递到页面对象。
    • 谢谢!会根据您的建议尝试更改!
    • 另外,您是仅将测试数据存储在属性文件还是数据库中?我发现管理属性文件中的测试数据很麻烦。但我现在正在使用它们,因为我需要尽快推出一个工作框架。
    • 目前,我使用的测试数据集有限(例如测试用户)。所以我将它存储在文件/类中。我可以看到使用数据库,但这与使用我的 TestUser 类之类的东西相比,并不是一个重大转变。具体来说,您将使用数据库访问替换硬编码字符串。
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2018-02-21
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多