我在量角器中编写了一个测试,我希望在相反的位置获得一个DOM元素列表。
这是我写的代码:
var buttons = element.all(by.js(() => {
var arr = document.querySelectorAll('.md-table-toolbar md-icon');
return Array.prototype.reverse.apply(arr);
}));
但是打字稿会引发以下错误
类型的参数'(WebDriver:WebDriver)=>诺'不能分配到"定位器"
我的代码有什么问题?
编辑:
同事编辑了一个名为custom.d.ts的文件,并插入了以下内容
declare namespace protractor {
interface IProtractorLocatorStrategy {
js: (script: any, ...var_args: any[]) => webdriver.Locator;
}
}
我对TS和编程很新,所以我不知道他做了什么,也许你们中的一个可以从这些信息中得到答案。
答案 0 :(得分:2)
我会扩展ElementArrayFinder
并添加reverse()
可重复使用的方法:
// for Protractor 4.0.0:
var elementLib = require('protractor/built/element');
var ElementArrayFinder = elementLib.ElementArrayFinder;
ElementArrayFinder.prototype.reverse = function() {
var self = this;
var getWebElements = function() {
return self.getWebElements().then(function(parentWebElements) {
parentWebElements.reverse();
return parentWebElements;
});
};
return new ElementArrayFinder(this.ptor_, getWebElements, this.locator_);
};
现在,你可以这样做:
var elements = $$(".md-table-toolbar md-icon");
var reversedElements = elements.reverse();
答案 1 :(得分:1)
您只需要使用element()方法中的任何元素定位器。如果要反转生成的webelement,则需要解析promise并应该反转数组值。请尝试以下代码
var buttons = element.all(by.css('.md-table-toolbar.md-icon')).then(
function(arrayOfWebElements)
{
return arrayOfWebElements.reverse()
})