清理大量的 PageObject 元素

Cleaning up massive amount of PageObject elements

我们的每个页面对象都定义了大约 80-100 个 PageObject 元素。这是一个非常以数据为中心的应用程序的副产品,我认为这种情况不会很快改变。我们有许多文本字段、select 列表、按钮和菜单。我想以某种方式清理这些并将它们放在某个地方,但是我想过的东西似乎不太干净

想法:

第一个解决方案有一个问题,如果有人不注意,每个模块都可以包含在其他classes中。它不限于单个 class

第二个解决方案似乎很慢而且不是很"rubular",而且对于那些新加入项目的人来说更新元素很混乱

第三个解决方案似乎是最好的,但与第一个解决方案一样,您可以将不属于它们的部分包含到 class 中。

还有什么其他方法可以将这些元素的定义从 class 中移出,以便我们的 class 更清晰、更短、更易于阅读,并定义为 Ruby 规范(即 Ruby 风格指南)。它们看起来真的只是配置数据而不是 ruby 代码,所以我觉得它们不属于 class。特别是当我们在每个 class 中有 80 多个元素时。

我不明白您为什么不将元素保留在页面对象中 class。这就是 class 的要点,对吧?如果它们在多个页面之间共享,那么我理解将它们放在一个模块中并混合在一起。但是为什么要从页面中抽象出该页面上的独特元素 class?

但如果你绝对要这样做,我认为这是最好的选择:

Move elements for each PageObject into a corresponding module and include that module into a single PageObject only

有一些方法可以确保这些模块仅包含在您期望的 classes 中。我想到了 Module#included。类似于:

module MyPageElements
  def self.included cls
    raise "Expected to be included on MyPage, got: #{cls}" unless cls == MyPage
  end

  # ... elements ...
end

create a YAML config file, with the mapping of element_type => element_name => element_id and then call the corresponding element methods using metaprogramming

似乎让不熟悉的新人快速了解代码会让人头疼。最终,我同意它太不像Ruby了。

Utilize the upcoming PageObject sections feature to create different "panels" within each page and then include those Panels into the page.

由于我几乎没有看过这个(感谢将我链接到 PR),所以我觉得我无法谈论它的功效。