Typescript Can';t以ElementArrayFinder作为参数解析承诺

Typescript Can';t以ElementArrayFinder作为参数解析承诺,typescript,protractor,Typescript,Protractor,我正在用量角器编写一个函数,它获取列表中的所有行元素。该函数检查多种类型的列表。它使用方法isPresent()检查是否存在一种类型的列表。如果不是,则转到下一种类型。由于isPresent()方法是异步的,因此我必须通过承诺返回我的行数组。我正在尝试将其作为ElementArrayFinder返回。 public getAllListElements(listName: string): Promise<ElementArrayFinder> { return new

我正在用量角器编写一个函数,它获取列表中的所有行元素。该函数检查多种类型的列表。它使用方法
isPresent()
检查是否存在一种类型的列表。如果不是,则转到下一种类型。由于
isPresent()
方法是异步的,因此我必须通过承诺返回我的行数组。我正在尝试将其作为
ElementArrayFinder返回。

  public getAllListElements(listName: string): Promise<ElementArrayFinder> {

    return new Promise<ElementArrayFinder>((resolve) => {
      element(by.css('.list-title')).isPresent().then((result) => {
        let elems: ElementArrayFinder;
        if (result === true) {
          elems = element(by.cssContainingText('.list-title', listName)).element(by.xpath('../..')).all(by.css('mat-row'));
          resolve(elems);
        } else {
          elems = element(by.cssContainingText('.mat-header-cell', listName)).element(by.xpath('../..')).all(by.css('mat-row'));
          resolve(elems);
        }
      });
    });
  }
因此,由于我希望联系人是一个
ElementArrayFinder
,所以我尝试调用它的
count()
方法。此操作失败,因为
联系人
的类型错误

我找到了解决这个问题的办法。我将我的
ElementArrayFinder
封装在父对象中,并用它来解决我的承诺。这样,数据类型就不会改变。但我必须在回调中访问对象的成员,这并不理想

以下是解决方法:

  public getAllListElements(listName: string): Promise<any> {

    return new Promise<any>((resolve) => {
      element(by.css('.list-title')).isPresent().then((result) => {
        let elems = { eaf : null};
        if (result === true) {
          elems.eaf = element(by.cssContainingText('.list-title', listName)).element(by.xpath('../..')).all(by.css('mat-row'));
          resolve(elems);
        } else {
          elems.eaf = element(by.cssContainingText('.mat-header-cell', listName)).element(by.xpath('../..')).all(by.css('mat-row'));
          resolve(elems);
        }
      });
    });
  }

您知道为什么会发生这种数据更改吗?

请尝试以下代码

navigateAllContacts() {
    this.helpers.getAllListElements('Contacts').then(function(contacts) => {
      contacts.count().then(function(size) => {
        console.log('Navigating trough ' + size + ' contacts');
      });
    });
  }

如果您尝试
,那么((contacts:ElementArrayFinder)=>{//do stuff})
navigateAllContacts()
中是否有效?我尝试键入回调参数,但遗憾的是,它不起作用!谢谢,但是运气不好!
  navigateAllContacts() {
    this.helpers.getAllListElements('Contacts').then((contacts) => {
      contacts.eaf.count().then((size) => {
        console.log('Navigating trough ' + size + ' contacts');
      });
    });
  }
navigateAllContacts() {
    this.helpers.getAllListElements('Contacts').then(function(contacts) => {
      contacts.count().then(function(size) => {
        console.log('Navigating trough ' + size + ' contacts');
      });
    });
  }