【发布时间】:2016-08-03 09:01:37
【问题描述】:
我遇到了 Protractor 的页面对象的不同类型的语法,我想知道它们的背景是什么,建议采用哪种方式。
这是 Protractor 教程中的官方 PageObject 语法。我最喜欢它,因为它清晰易读:
use strict;
var AngularHomepage = function() {
var nameInput = element(by.model('yourName'));
var greeting = element(by.binding('yourName'));
this.get = function() {
browser.get('http://www.angularjs.org');
};
this.setName = function(name) {
nameInput.sendKeys(name);
};
this.getGreeting = function() {
return greeting.getText();
};
};
module.exports = AngularHomepage;
不过,我也发现了这种:
'use strict';
var AngularPage = function () {
browser.get('http://www.angularjs.org');
};
AngularPage.prototype = Object.create({}, {
todoText: { get: function () { return element(by.model('todoText')); }},
addButton: { get: function () { return element(by.css('[value="add"]')); }},
yourName: { get: function () { return element(by.model('yourName')); }},
greeting: { get: function () { return element(by.binding('yourName')).getText(); }},
todoList: { get: function () { return element.all(by.repeater('todo in todos')); }},
typeName: { value: function (keys) { return this.yourName.sendKeys(keys); }} ,
todoAt: { value: function (idx) { return this.todoList.get(idx).getText(); }},
addTodo: { value: function (todo) {
this.todoText.sendKeys(todo);
this.addButton.click();
}}
});
module.exports = AngularPage;
这两种方法的优缺点是什么(除了可读性)?第二个是最新的吗?我已经看到 WebdriverIO 使用这种格式。
我还从 Gitter 上的一个人那里听说,第一个条目效率低下。谁能给我解释一下为什么?
【问题讨论】: