故事
我们已经广泛使用了Protractor框架,并建立了一个相当大的测试代码库。我们还一直遵循Page Object pattern来组织测试。
最近,我们开始使用Galen framework来填补视觉/布局/响应式设计测试的空白。我们非常喜欢该框架,并希望继续使用它。
现在最大的问题是页面对象。两种框架都有其定义页面对象的方式。
这是一个示例 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 principle。并且,另一个后续问题是Galen目前仅支持“by css”,“by id”或“by xpath”定位技术-这意味着页面对象无法一对一映射。
问题
有没有一种方法可以避免重复将 Protractor 和Galen结合在一起的页面对象和元素定位器?

最佳答案

鉴于可获得的信息,我看不出将其组合的直接方法。

但是,Github上提供了GalenProtractor,我认为将它们根据您的需要进行对齐/ fork /修改没有更大的障碍。

我看到的最好的镜头是为Galen框架做出贡献,并使用到Protractor Page Objects的映射功能扩展其 GalenPages.js 。尽管该.js文件中有600余行代码,但在合理的努力下似乎是可行的。

至少在该方向上的to open an issue in the Galen GitHub project确实值得付出努力。

09-16 13:36