我们的每个页面对象都定义了大约80-100个PageObject元素。这是一个以数据为中心的应用程序的副产品,我不会发现很快就会改变。我们有许多文本字段,选择列表,按钮和菜单。我想以某种方式清理它们并将它们放在某个地方,但我所想过的事情似乎并非如此 clean 。
想法:
第一个解决方案存在的问题是,如果某人没有注意,每个模块可以包含在其他类中。它不仅限于单一类
第二个解决方案看起来很慢而且不是非常“#34; rubular"”,同时又为那些刚接触项目的人更新元素而感到困惑
第三种解决方案似乎是最好的解决方案,但与第一种解决方案一样,您可以将章节纳入他们不属于的班级。
我还可以通过其他方式将这些元素的定义移出类,以便我们的类更清晰,更简单,更易于阅读,并定义为Ruby规范(即Ruby样式指南)。他们真的只是配置数据而不是ruby代码,所以我觉得他们不属于这个类。特别是当我们每班有80多个元素时。
答案 0 :(得分:1)
我不明白为什么你不会在页面对象类中保留元素。这是课堂上的一点,对吧?如果它们在多个页面之间共享,那么我理解将它们放在一个模块中并混合使用。但为什么要将该页面上的独特元素从页面类中抽象出来呢?
但如果你绝对会这样做,我认为这是最好的选择:
将每个PageObject的元素移动到相应的模块中,并将该模块包含在单个PageObject中
有些方法可以确保这些模块仅包含在您期望的类中。我记得Module#included。类似的东西:
module MyPageElements
def self.included cls
raise "Expected to be included on MyPage, got: #{cls}" unless cls == MyPage
end
# ... elements ...
end
创建一个YAML配置文件,其中包含element_type =>的映射element_name => element_id然后使用元编程调用相应的元素方法
这样看起来很难让新的,不熟悉的人快速掌握代码。最终,我同意它太像Ruby了。
利用即将推出的PageObject部分功能在每个页面中创建不同的“面板”,然后将这些面板包含在页面中。
由于我几乎没有看过这个(感谢我将我与PR联系起来),我觉得我不能说它的功效。