【问题标题】:Best practices for implementing Page Object model for pages with many elements为具有许多元素的页面实现页面对象模型的最佳实践
【发布时间】:2015-06-24 23:38:53
【问题描述】:

我正在使用页面对象工厂实现页面对象模型,并努力找出处理包含许多元素的页面的最佳方法。当您有多个复选框并希望为每个复选框创建多个方法时,页面对象会变得很难看。假设我有一个带有 checkbox1... checkboxN 的页面。对于这些元素中的每一个,我都希望使用 isEnabled、isDisplayed、isChecked 等方法。如果我按照建议实现它,我最终会得到 3xN 方法,例如 isCheckbox1Enabled 等。

这里的最佳做法是什么?我应该为这些元素提供简单的 get 方法吗?我应该像 isCheckboxEnabled(String checkboxName) 这样创建地图和每个方法的单个实例吗?

我不喜欢使用地图的方法,因为我必须知道测试中的复选框名称...

谢谢!

【问题讨论】:

  • 这不是解决此类问题的最佳论坛。也许是“程序员”
  • 其他方式可能是,创建一个枚举(复选框列表),并将枚举作为CheckboxEnabled(enum checkbox)?? 传递给方法
  • @RohitGupta 在引用其他网站时,指出cross-posting is frowned upon. 通常会有所帮助

标签: testing selenium-webdriver webdriver ui-automation pageobjects


【解决方案1】:

最好的方法是创建一个基类来继承(或混合等),这样您就可以在页面对象中声明元素时动态定义元素的方法。

我在 calabash + ruby​​ 中使用这种方法,并在我的页面对象中继承了一个基类,该基类定义了一个名为“元素”的方法,该方法为我声明的所有元素创建 get_text、is_enabled?、enter_text 等方法。我在我的页面对象的开头声明了这些,然后我可以在我的页面对象或我的步骤定义中使用这些方法。

您使用的语言中的语法可能有所不同,但该方法应该仍然有效。在这种情况下,定位器是 calabash 查询语法,用于查找我想要与之交互的元素。

例如在我的页面对象中,我继承了该方法

def self.element(element_name, locator)
  define_method("get_text_#{element_name}") do
  query("#{locator}", :text)[0]
end

然后在我定义的页面对象的开头

element(:username_textbox, "* id:'username'")

并且将能够使用它创建的方法,例如

get_text_username_textbox

一个更成熟的 Web 自动化等价物是页面对象 gem https://github.com/cheezy/page-object,它做同样的事情,但根据元素类型定义了不同的方法集。

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2020-06-19
    • 2013-02-01
    • 2017-08-09
    • 2010-09-19
    相关资源
    最近更新 更多