Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该为具有页面对象模式的每个页面使用不同的类?_C#_Selenium - Fatal编程技术网

C# 我是否应该为具有页面对象模式的每个页面使用不同的类?

C# 我是否应该为具有页面对象模式的每个页面使用不同的类?,c#,selenium,C#,Selenium,我想对我的电子邮件地址(gmail)进行自动化,我使用教程实现了页面对象模式 因此,我想知道是否需要为每个页面创建不同的类,例如登录页面,收件箱页面等 或者最好使用一个classGmailMainPage,并从此类中执行用户可以执行的所有操作?最好每页创建一个类,这也是模式通常的实现方式 如果只使用一个类,它将很快变得非常大。您在不同页面上也会有名称相似的方法,这会使您感到困惑,并迫使您将单个页面对象上的所有方法都附加“真实”页面名称(即:SaveUserPreferences、SaveEmai

我想对我的电子邮件地址(gmail)进行自动化,我使用教程实现了
页面对象模式

因此,我想知道是否需要为每个
页面
创建不同的
,例如
登录页面
收件箱页面


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

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

如果只使用一个类,它将很快变得非常大。您在不同页面上也会有名称相似的方法,这会使您感到困惑,并迫使您将单个页面对象上的所有方法都附加“真实”页面名称(即:SaveUserPreferences、SaveEmailForwarding preferences等)

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

  • 这个页面非常大,我可以把它分成不同的逻辑单元
  • 页面的一部分在许多页面上重复,并将在整个测试套件中重用
  • 但如上所述,完整HTML页面和页面对象之间不一定存在一对一的映射。页面对象应该表示页面中有意义的上下文部分

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


    例如,带星号的/重要的/已发送的邮件所有这些页面共享许多相同的功能。如果按照每个类一页的规则,那么每个类都有自己的类。然而,事实上,除了电子邮件列表中的内容外,这三个页面几乎共享所有内容。所以你不会把所有的东西都编码三次,更好的选择是扩展其他东西,而不是pageobject。您可以有一个emailListObject,它具有这三个页面的所有功能,然后emailListObject可以扩展PageObject。这三个页面中的唯一区别可能只是其中哪一个页面在单击时以红色突出显示。

    当然是的,它显示在第一个图像插图上。因此,对于GmailLogInPage,我还需要GmailLogInPageElementMap和GmailLogInPageValidator??avery页面将有3个类?如果我通过此模式正确理解所有内容,则每个html页面必须有一个对象,其中包含用户可以对其执行的所有操作。链接教程中没有提到ElementMap或PageValidator。你可能应该花更多的时间阅读文章和玩示例代码。你的意思是每页3个类?@user979033我已经给出了我的答案,但在你的具体情况下,我只会创建一个类。例如,我想将Gmail拆分为几个类,我说的不是星号邮件/重要邮件/已发送邮件,而是GmailLoginPage、GmailBoxPage、GmailComposeMailPage和GmailReadEmailPage,所有这些都很不同,你不觉得吗?我的只是一个例子,但是的,这听起来是一个很好的开始。记住,你也可以向你的pageobject类中添加在你的页面之间共享的东西,比如gmail中的导航条?只需再次添加此对象?很抱歉,我指的是方法,例如clickGoogleAccount(),它始终位于所有页面的右上角,因此,将其放在pageobject类中,所有页面都会继承该方法。如果它有任何变化,你不必编辑20种不同的注销方法。