我们一直在广泛使用Protractor框架,并建立了一个相当大的测试代码库.我们也一直在关注Page Object模式来组织我们的测试.
最近,我们开始使用Galen框架填补视觉/布局/响应式设计测试的空白.我们非常喜欢这个框架,并希望继续使用它.
现在最大的问题是Page Objects.两个框架都有自己的定义页面对象的方法.
这是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();
Run Code Online (Sandbox Code Playgroud)
而且,这是一个示例Galen页面对象:
this.LoginPage = $page("Login page", {
username: '#username',
password: '#password',
loginButton: 'button[ng-click*=login]'
});
Run Code Online (Sandbox Code Playgroud)
目前,我们正在复制定位器并重复自己 - 违反DRY原则.而且,另一个后续问题是Galen目前仅支持"by css","by id"或"by xpath"定位技术 - 这意味着页面对象不会一对一地映射.
有没有办法避免重复将Protractor和Galen结合在一起的页面对象和元素定位器?
我在代码中使用 Stripe 元素付款表单。在Galen中进行测试时,我们必须切换到iframe来填充支付信息并测试整个流程。但是,由于 iOS 的 CORS 政策,它不允许我们切换 iframe。
有什么方法可以预先填写付款表单中的信息,以便我们可以在 iOS 中测试我们的代码吗?