结合 Galen 和 Protractor 框架

Combining Galen and Protractor frameworks

故事

我们一直在广泛使用 Protractor 框架,并建立了相当大的测试代码库。我们也一直在关注 Page Object pattern 来组织我们的测试。

最近,我们开始使用 Galen framework 来填补 visual/layout/responsive 设计测试的空白。我们非常喜欢这个框架,并希望继续使用它。

目前最大的问题是页面对象。这两个框架都有自己定义页面对象的方式。

这是一个 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 结合在一起的重复页面对象和元素定位器?

鉴于现有信息,我看不到将其合并的直接方法。

但是,Galen and Protractor 在 Github 上可用,而且我认为 aligning/forking/modifying 对您的需求没有任何更大的障碍。

我看到的最好的机会是为 Galen 框架做出贡献,并将其 GalenPages.js 扩展为量角器页面对象的映射功能。尽管该 .js 文件中有 600 多行代码,但在合理的努力下似乎是可行的。

至少 to open an issue in the Galen GitHub project 在那个方向上的努力肯定是值得的。