【发布时间】: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