使用页面对象模型时,是否绝对有必要为每个页面创建一个类?

时间:2017-11-07 12:23:08

标签: java selenium-webdriver

例如,如果我的付款页面包含2个按钮:向新用户付款并向现有受益人付款。我是否创建了一个对这些按钮执行相关操作的课程,然后在我内部的另一个课程中支付新的费用并支付现有的受益人费用?

这是支付页面的外观吗?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/llRegister2"
        android:orientation="horizontal"
        android:weightSum="2"
        android:padding="10dp"
        android:layout_above="@+id/btnRegister2Next"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="27dp">

            <EditText
                android:id="@+id/etRegister2StartTime"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Start Time"
                android:textColorHint="#311D3F"
                android:textColor="#311D3F"
                android:layout_marginRight="10dp"
                android:layout_weight="1"/>



            <EditText
                android:id="@+id/etRegister2EndTime"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="End Time"
                android:layout_marginLeft="10dp"
                android:textColorHint="#311D3F"
                android:textColor="#311D3F"
                android:layout_weight="1"/>

    </LinearLayout>

    <Button
        android:id="@+id/btnRegister2Next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NEXT"
        android:textSize="18sp"
        android:textColor="@android:color/white"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="223dp" />

</RelativeLayout>

付费新人页面的外观如何?

public class Payments {
    public void clickPaySomeoneNew(){}
    public void clickPayExistingBeneficiary(){}
}

1 个答案:

答案 0 :(得分:2)

简短回答是,您需要为(至少)每个页面创建一个类。有时你应该为一个小于一页的东西创建一个类,让我们称之为一个组件。组件的示例可以是页眉或页脚或日历小部件,它们可以显示在任何页面或多个页面上。这些都是他们自己的类(页面对象)。

在您要询问的具体案例中,目前尚不清楚如何构建,因为您尚未说明PaySomeoneNew是新页面还是仅仅是付款页面的一部分。我通常会查看URL。如果付款页面为payments.jsp且PaySomeoneNew页面为paysomeonenew.jsp,那么我将为它们创建单独的类(页面对象)。如果它们不是单独的页面,则答案不太清楚。我为单个页面编写了页面对象,其中包含一个向导。填写表单1,单击“下一步”,然后显示表单2,但URL未更改。在那一点上它是一个折腾。我认为可以将它们保持在一起并将它们分开,并且两者都(在某种程度上)同样有效。在这些情况下,我倾向于尝试将它们保持在同一页面中,但如果不同的面板是复杂的或大的(或两者),我会将它们分开。

发布webapp评论:

我仍然会把它分解成逻辑段。您可以根据您可以看到的内容进行操作并将其称为页面。您还可以将每个手风琴的内容视为一个页面。如果每个手风琴中的内容不多,我会将它们作为较大页面页面对象的一部分。只需制定一些规则(例如手风琴内容是一个单独的页面对象)并坚持下去。如果在编写几个页面对象后不喜欢这些规则,请调整规则并重构。

例如,如果所有的手风琴都有2个字段,那么可能不值得将每个手风琴作为一个单独的页面,这样你就可以重构并将手风琴内容添加回更大的页面对象。

或者你可以采取相反的方式,规则是手风琴内容留在更大的页面对象内。然后你会发现一堆手风琴隐藏了50个字段,所以你决定将它们分成不同的页面对象。

这里真的没有硬性规定。做一些你打算遵循的规则,以便它对下一个人(或几个月内你自己)有意义。遵循这些规则,直到您决定他们不再工作。编写新规则并重构。