【问题标题】:Combining Galen and Protractor frameworks结合 Galen 和 Protractor 框架
【发布时间】:2018-05-01 18:16:48
【问题描述】:

故事

我们一直在广泛使用 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 结合在一起?

【问题讨论】:

  • 我面临一个有点类似的问题,并正在考虑将定位器完全与代码隔离(以 json/xml 格式),并为 getter 和 setter 提供接口。只是一个思考的食物。
  • @VishalAggarwal 是的,这听起来很合理。尽管存在一些挑战,例如 Galen 不支持特定于 Angular 的定位器。我们目前认为,考虑到情况,复制/重复定位器可能不是那么糟糕。谢谢。

标签: javascript selenium protractor pageobjects galen


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 2018-02-04
    • 2017-12-24
    • 2015-10-25
    • 2016-07-16
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多