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

Java 使用页面对象模型时,是否绝对有必要为每个页面创建一个类?,java,selenium-webdriver,Java,Selenium Webdriver,例如,如果我有一个包含两个按钮的付款页面:支付给某人新的和支付现有的受益人。我是否创建了一个类,在这些按钮上执行相关操作,然后再创建另一个类,一旦我进入了这个类,就向新的用户付款,并向现有的受益人付款 付款页面应该是这样的吗 public class Payments { public void clickPaySomeoneNew(){} public void clickPayExistingBeneficiary(){} } public class PaySomeone

例如,如果我有一个包含两个按钮的付款页面:支付给某人新的和支付现有的受益人。我是否创建了一个类,在这些按钮上执行相关操作,然后再创建另一个类,一旦我进入了这个类,就向新的用户付款,并向现有的受益人付款

付款页面应该是这样的吗

public class Payments {
    public void clickPaySomeoneNew(){}
    public void clickPayExistingBeneficiary(){}
}
public class PaySomeoneNew {
    public void setAccountNumber(accountNumber) {}
    public void setAmountToPay(amountToPay) {}
    public void clickPayButton() {}
    public void makePayment(String accountNumber, String amountToPay) {
        this.setAccountNumber(accountNumber);
        this.setAmountToPay(amountToPay);
        this.clickPayButton();
    }
}
“付费用户”新页面应该是什么样子

public class Payments {
    public void clickPaySomeoneNew(){}
    public void clickPayExistingBeneficiary(){}
}
public class PaySomeoneNew {
    public void setAccountNumber(accountNumber) {}
    public void setAmountToPay(amountToPay) {}
    public void clickPayButton() {}
    public void makePayment(String accountNumber, String amountToPay) {
        this.setAccountNumber(accountNumber);
        this.setAmountToPay(amountToPay);
        this.clickPayButton();
    }
}

简短的回答是肯定的,您确实需要为(至少)每个页面创建一个类。有时,您应该为小于一页的内容创建一个类,让我们称之为组件。组件的示例可能是可以显示在任何页面或多个页面上的页眉、页脚或日历小部件。这些将分别是它们自己的类(页面对象)

在您在此询问的具体案例中,不清楚它的结构,因为您没有说明PaySomeoneNew是一个新页面还是仅仅是Payments页面的一部分。我通常会查看URL。如果payments页面是
payments.jsp
,PaySomeoneNew页面是
PaySomeoneNew.jsp
,那么我将为它们创建单独的类(页面对象)。如果它们不是独立的页面,那么答案就不那么清楚了。我已经为基本上包含向导的单个页面编写了页面对象。填写表格1,单击“下一步”,表格2显示,但URL没有更改。在这一点上,这是一个掷硬币。我认为可以提出将它们放在一起和分开的论点,两者(在某种程度上)同样有效。在这些情况下,我倾向于将它们放在同一页中,但如果不同的面板复杂或大(或两者都大),我会将它们分开


发布webapp评论:

我仍然会把它分解成逻辑部分。你可以根据你能看到的东西来做,称之为页面。你也可以把每个手风琴的内容当作一页。如果每个手风琴中没有太多内容,我会将它们作为较大页面的页面对象的一部分。只需制定一些规则(例如,手风琴内容是一个单独的页面对象)并遵守它们。如果在编写了一些页面对象之后不喜欢这些规则,请调整规则并重构

例如,如果所有accordion中都有2个字段,那么可能不值得将每个字段都设置为单独的页面,这样您就可以重构accordion内容并将其添加回更大的页面对象中

或者你可以走相反的路,规则是手风琴内容留在较大的页面对象中。然后,您发现一堆手风琴隐藏了50个字段,因此您决定将它们拆分为单独的页面对象


这里真的没有硬性规定。一定要制定一些你打算遵守的规则,这样下一个人(或几个月后你自己)才会明白。遵循这些规则直到你决定它们不再有效。编写新规则并重构。

简短的回答是肯定的,您确实需要为(至少)每个页面创建一个类。有时,您应该为小于一页的内容创建一个类,让我们称之为组件。组件的示例可能是可以显示在任何页面或多个页面上的页眉、页脚或日历小部件。这些将分别是它们自己的类(页面对象)

在您在此询问的具体案例中,不清楚它的结构,因为您没有说明PaySomeoneNew是一个新页面还是仅仅是Payments页面的一部分。我通常会查看URL。如果payments页面是
payments.jsp
,PaySomeoneNew页面是
PaySomeoneNew.jsp
,那么我将为它们创建单独的类(页面对象)。如果它们不是独立的页面,那么答案就不那么清楚了。我已经为基本上包含向导的单个页面编写了页面对象。填写表格1,单击“下一步”,表格2显示,但URL没有更改。在这一点上,这是一个掷硬币。我认为可以提出将它们放在一起和分开的论点,两者(在某种程度上)同样有效。在这些情况下,我倾向于将它们放在同一页中,但如果不同的面板复杂或大(或两者都大),我会将它们分开


发布webapp评论:

我仍然会把它分解成逻辑部分。你可以根据你能看到的东西来做,称之为页面。你也可以把每个手风琴的内容当作一页。如果每个手风琴中没有太多内容,我会将它们作为较大页面的页面对象的一部分。只需制定一些规则(例如,手风琴内容是一个单独的页面对象)并遵守它们。如果在编写了一些页面对象之后不喜欢这些规则,请调整规则并重构

例如,如果所有accordion中都有2个字段,那么可能不值得将每个字段都设置为单独的页面,这样您就可以重构accordion内容并将其添加回更大的页面对象中

或者你可以走相反的路,规则是手风琴内容留在较大的页面对象中。然后,您发现一堆手风琴隐藏了50个字段,因此您决定将它们拆分为单独的页面对象


这里真的没有硬性规定。一定要制定一些你打算遵守的规则,这样下一个人(或几个月后你自己)才会明白。遵循这些规则直到你决定它们不再有效。编写新规则并重构。

这是一个Web应用程序。没有单独的页面。只有在执行操作时才会检索元素。我相信它主要是基于Javascript构建的。对于像pay someone new这样的东西,它使用某种手风琴页面来捕获输入。根据您的评论更新答案没问题。很高兴这有帮助。我会让你的问题搁置一天左右,给其他人一个回答的机会,但别忘了回来接受其中一个答案,并投票支持任何回答