在测试自动化的环境中,我正在使用页面对象模式的简单版本,并面临代码中存在冗余的问题。
那就是说,在一个类中,我有多个方法基本上做同样的事情但只返回不同的页面对象:
class Checkout {
gotoNextPageExpectCreditCardPage() {
clickSubmitButton();
return new CreditCardPage();
};
gotoNextPageExpectPaypalPage() {
clickSubmitButton();
return new PaypalPage();
};
...
gotoNextPageExpectErrorPage() {
clickSubmitButton();
return new ErrorPage();
};
}
我做过一些研究并想到了一些设计模式,比如状态模式,模板方法,责任链,但我也认为这些可能是过度的,我将不得不做一个巨大的重构。
有人想出一个更简单的解决方案吗?
PS:我正在使用node.js
答案 0 :(得分:1)
PageObjectModel有其优点和缺点,就像任何其他模式一样。也许您需要再次考虑您的情况以及为什么您正在使用它。在大多数教程中,您会发现,它实现起来非常简单易行,但这些解决并证明了玩具问题,而不是现实生活中的问题。我只在测试框架API支持设计的地方使用POM,例如pywinauto。这里的概念允许您链接元素,如下所示:
app.UntitledNotepad.Edit
没有必要在整个代码库中重复这样的屏幕结构,只需将UI细节放在POM中,并在需要交互时提供元素。
notepad.EditInput.type_keys("pywinauto Works!", with_spaces = True)
正如您所看到的 - 这离Selenium和Web自动化很远。但, 你可以找到很多其他的模式:
瞄准完整答案 - xUnit世界中其他模式的很好集合是xunitpatterns。但是,您正在构建的测试框架没有单一的模式解决方案。人们应该遵循并使用其他设计原则和概念。例如,您的域逻辑(特定于业务)应该在DSL中分层,不了解底层驱动程序或更高级别BDD规范。