9

故事

我们一直在广泛使用 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 组合在一起的页面对象和元素定位器?

4

1 回答 1

4

鉴于可用的信息,我看不到将其组合的直接方法。

但是, Github 上提供了GalenProtractor,我认为将它们对齐/分叉/修改它们以满足您的需要没有任何更大的障碍。

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

至少在 Galen GitHub 项目中向这个方向打开一个问题肯定是值得的。

于 2017-12-07T08:55:32.217 回答