故事
我们一直在广泛使用 Protractor 框架,并建立了一个相当大的测试代码库。我们也一直在遵循页面对象模式来组织我们的测试。
最近,我们开始使用Galen 框架来填补视觉/布局/响应式设计测试的空白。我们真的很喜欢这个框架,并希望继续更多地使用它。
现在最大的问题是页面对象。两个框架都有自己定义页面对象的方法。
这是一个 Protractor 页面对象示例:
var LoginPage = function () {
this.username = element(by.id("username"));
this.password = element(by.id("password"));
this.loginButton = element(by.binding("buttonText"));
};
module.exports = new LoginPage();
而且,这是一个示例 Galen 页面对象:
this.LoginPage = $page("Login page", {
username: '#username',
password: '#password',
loginButton: 'button[ng-click*=login]'
});
目前,我们正在复制定位器并重复自己 - 违反DRY 原则。而且,另一个后续问题是 Galen 目前仅支持“by css”、“by id”或“by xpath”定位技术——这意味着页面对象不会一对一映射。
问题
有没有办法避免重复将 Protractor 和 Galen 组合在一起的页面对象和元素定位器?