【发布时间】:2016-02-29 21:15:47
【问题描述】:
在使用 protractorJS 进行一些实验时,我注意到没有简单的方法可以从量角器扩展(继承)ElementFinder 对象以添加自己的函数。
例如,我想创建对象复选框,它会有额外的方法 - 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 吗?
【问题讨论】:
-
你能解决这个问题吗,我需要做同样的事情?
-
@shiva ,部分。请参阅下面关于我创建的 lib 的回答。您可以在那里找到代码示例。
标签: javascript angularjs protractor