量角器错误"不能分配到类型"定位器" "

时间:2016-07-26 13:49:00

标签: typescript webdriver protractor

我在量角器中编写了一个测试,我希望在相反的位置获得一个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和编程很新,所以我不知道他做了什么,也许你们中的一个可以从这些信息中得到答案。

2 个答案:

答案 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()
  })