我的页面对象模型类越来越长。

我应该创建与页面对象模型同名的其他类,并在末尾添加2。还是这违背了页面对象模型?

评论

它取决于意见,品味和环境,恕不给出客观答案,恕我直言

该应用程序只有一页?我希望每个页面只有几个项目和一些动作,也许您可​​以解释为什么将所有内容都放在一个类中。

@NielsvanReijmersdal不确定您的意思吗?假设我有一个主页类,那么该主页上的所有内容都将在我们的主页类中。

我想我的意思是我不明白为什么您的页面有这么多元素和动作。页面具有导航,一些内容,可能还有一两个表格。您正在为导航中的每个页面拆分类,诸如此类? :)

@NielsvanReijmersdal很长一段时间,因为我们编写了与每个特定故事相对应的方法。也许我们应该使用更多通用方法。

#1 楼

不。不要只将pageObject拆分为pageObject2、3、4等。这适用于所有编程-按功能而不是任意地按逻辑拆分类!

您的页面对象应该是事实的源头该特定页面。当您开始尝试与页面进行交互时,在尝试查找提交按钮时应该在MyForm.java和MyForm2.java之间进行搜索真的有意义吗?

请注意Martin Fowler,其中之一PageObject模式的普及者指出,Page Object不必是完整的网页。它们只是将相关元素链接在一起:


“这里有一个论点,名称“页面对象”具有误导性,因为它使您认为每页应该只有一个页面对象。就像“面板对象”会更好-但是术语“页面对象”已被人们接受。另一个为什么命名是TwoHardThings之一的说明。”


因此,您可以破坏将您的pageObject分解为离散的,可重用的块。例如,在我从事的一个项目中,我们有一个用于按需搜索的类似小部件,该小部件已在多个页面上使用。有很多不同的元素可以交互,并且可以针对页面的这一小部分使用方法(输入搜索,选择第一个答案,计算答案数量等)。此搜索元素出现在很多页面上。我们没有在不同页面上重复完全相同的代码,而是为该对象创建了一个单独的类,并将其作为公共对象包含在它出现的每个PageObject上。在页面上调用搜索非常容易:

myDashboardPage.searchWidget.enterSearch("search text");
myUserPage.searchWidget.selectFirstAnswer();


pageObjects上没有代码重复,并且页面的逻辑层次结构->小部件-> html元素。

#2 楼

我认为您应该为网站的每个页面创建一个页面对象类。

如果您只有一个页面站点,则可以创建页面小部件而不是页面对象。

页面小部件将与网页的组件相对应(例如:页脚,页眉等)。

当页面对象类的数量增加时,您应该创建一个基类,所有页面对象类将继承。

这将为您提供3层:


测试脚本:使用页面对象
页面对象:使用基类用于与网站进行交互的方法
基类

在本文上查看有关如何创建页面对象的示例项目:
http://test-able.blogspot.com/2015 /09/how-to-to-write-better-automation-code-with-TDD.html

Alex

评论


不客气,罗本。如果您需要帮助,请与我联系。您可以在我的博客上找到联系方式。

– Alex Siminiuc
2015年9月30日在16:43



我们本周面临这个决定,我的选择是所有页面都使用一个页面对象。我的夫妇并没有说服我维持上述结构会增加足够的价值,或者说新手将能够立即正确地遵循并应用它。创建结构很令人欣慰,但请仔细查看它所增加的价值。

–迈克尔·杜兰特(Michael Durrant)
2015年11月7日12:14