在 ES6(量角器页面对象)中创建实例的正确方法
Correct approach to create instance in ES6 (protractor page objects)
刚开始学习ES6,我想使用量角器测试页面。首先,我想创建基本Web元素类,页面上的其他元素将从基类继承。
量角器具有选择器,您可以使用它们来选择元素并使用它们进行操作,例如单击:
var button = element(by.css('.button'));
button.click();
所以基本上我想创建这样的东西:
class BaseElement {
constructor(selector){
this._element = element(selector);
}
var button = new BaseElement(by.css('.button));
button.click();
由于某种原因它不起作用:
button.click();//button is an instance of base class BaseElement
它返回单击不是函数。
我可以在类中添加一些方法"单击"或"获取"方法,如下例所示,但我需要知道也许我错过了一些基本原则并且完全错误。在量角器中,有很多本机的,内置的元素函数,我不想在基类中为所有元素编写方法。
class BaseElement {
constructor(selector){
this._element = element(selector);
}
get element() {
return this._element;
}
}
var button = new BaseElement(by.css('.button));
button.element.click()//DON'T WANT TO USE THIS, LOOKING FOR USE of button.click() WITHOUT CREATING ANY METHODS IN CLASS IF POSSIBLE
如果量角器将ElementFinder
作为一个类公开,你可能已经能够使用以下语法实现你想要的:
class BaseElement extends ElementFinder {
constructor(selector){
super(selector);
// ...
}
// ...
}
但是由于量角器不是用类编写的,因此这是行不通的。
或者,您可以将BaseElement
定义为一个简单的函数,该函数使用您自己的一些自定义行为扩展给定元素(ElementFinder
实例):
function makeBaseElement(selector) {
// add some properties to the element for the given selector and return it:
return Object.defineProperties(element(selector), {
"property1": {
value: true,
writable: true
},
"property2": {
value: "Hello",
writable: false
}
// etc.
});
}
var button = makeBaseElement(by.css('.button));
button.click();
当然,这不是ES6,也不是类BaseElement
button
,但对于其余部分,它将元素行为与任何其他属性结合在一起。
您还可以查看创建代理的可能性,该代理将检测属性的 get/set 是否应转发到 _element
而不是主BaseElement
对象。
相关文章:
- 实例创建(JS)
- 如何基于数组值创建新实例
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- JavaScript:如果现有对象被实例化为具有特定值,如何创建警报
- 用javascript创建另一个对象的实例
- 单击按钮创建多实例jQuery UI对话框
- 如何确定 HTML 元素是使用哪个实例创建的
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- 调用函数和创建函数实例之间的Javascript差异
- setTimeout是否创建函数实例
- 基于分隔符/方括号的实例创建数组
- Ember.js:如何使用模型的单个实例创建路由/控制器
- 从继承的实例创建 JavaScript 基类对象
- 对象的等效实例.创建和原型链
- 这是正常的行为,为每一个Firefox窗口,我的插件的另一个实例创建
- Aurelia自定义元素实例创建
- 为多个实例创建一个jquery代码
- 是否更改构造函数's属性的实例创建后会影响实例吗?如果是,那么如何
- 实例创建
- 烬数据没有为新实例创建id