在使用 ProtractorJS 进行一些实验时,我注意到没有一种简单的方法可以扩展(继承)来自 protractor 的 ElementFinder 对象以添加自己的函数。
例如,我想要创建一个名为 Checkbox 的对象,它将拥有附加方法 check(),该方法应根据 isSelected() 的结果切换复选框。
我想到了以下代码 -
例如,我想要创建一个名为 Checkbox 的对象,它将拥有附加方法 check(),该方法应根据 isSelected() 的结果切换复选框。
我想到了以下代码 -
var ElementFinder = require('protractor/lib/element.js').ElementFinder;
var ElementArrayFinder = require('protractor/lib/element.js').ElementArrayFinder;
class CheckBox extends ElementFinder {
constructor(loc) {
var getWebElements = function () {
var ptor = browser;
var locator = loc;
return ptor.waitForAngular().then(function() {
if (locator.findElementsOverride) {
return locator.findElementsOverride(ptor.driver, null, ptor.rootEl);
} else {
return ptor.driver.findElements(locator);
}
});
}
var ArrayFinderFull = new ElementArrayFinder(browser, getWebElements, loc);
super(browser, ArrayFinderFull);
}
check() {
return this.isSelected().then(selected => selected? this.click() : null)
}
}
但是getWebElements是从protractor/element.js中复制粘贴的 - https://github.com/angular/protractor/blob/3.1.0/lib/element.js#L131
这个复制粘贴让我感到沮丧。我认为应该有更适当的方法来扩展ElementFinder。
有人在protractorJS中继承了ElementFinder吗?