我应该为页面对象模式的每个页面使用不同的类吗?

时间:2017-05-08 18:08:10

标签: c# selenium

我想为我的电子邮件地址(gmail)进行自动化,并使用this教程实现了Page Object Pattern

所以我想知道我是否需要为每个class创建不同的page,例如Login pageInbox page等。

或者最好使用一个class GmailMainPage并从此class实现用户可以执行的所有操作?

2 个答案:

答案 0 :(得分:0)

最好每页创建一个类,这也恰好是模式的正常实现方式。

如果你只使用一个课程,它会很快变得非常大。您还将在具有相似名称的不同页面上使用方法,这将使您感到困惑,并强制您使用" real"对单页对象的所有方法进行后缀。页面名称(即:SaveUserPreferences,SaveEmailForwarding首选项等)。

我每页创建一个类,除非:

  1. 页面非常大,我可以将其拆分为不同的逻辑单元。
  2. 页面的一部分在许多页面上重复,并将在整个测试套件中重复使用。

答案 1 :(得分:0)

  

但如上所述,完整的HTML页面和页面对象之间不一定存在一对一的映射。页面对象应该代表页面的有意义的上下文部分。

实际上,您几乎不应将页面对象视为特定页面,而是将应用程序的特定部分共享功能。目标是尽可能减少重用代码的数量。其中一种方法是将每个页面转换为自己的类。这可能适用于普通网站,但像gmail这样的东西你可以进一步将功能分解为特定的类。

例如,Starred / Important / Sent Mail所有这些页面共享许多相同的功能。如果你按照每个类规则去一页,那么每个都有自己的类。然而,实际上这三个页面几乎共享除电子邮件列表中的内容之外的所有内容。因此,您最终不会对所有内容进行3次编码,而更好的选择是将页面对象扩展为其他内容。你可以拥有一个拥有这三个页面所有功能的emailListObject,然后emailListObject可以扩展PageObject。这三个页面中每个页面的唯一区别可能是它们中的哪一个在被点击时以红色突出显示。