如何排除Protractor中另一个ElementArrayFinder中存在的ElementArrayFinder项?

时间:2018-05-22 11:16:48

标签: protractor

我想获取用户可以点击的菜单项。

不幸的是,isEnabled方法始终为我的所有项目返回true。 这就是我尝试另一种方法的原因。我注意到残疾人,总是有'ui-state-disabled'类。因此,我可以使用以下功能获取所有已禁用的项目:

function getDisabledMenuItems() {
  return getCustomGrid().all(by.className('menu-ui')).all(by.className('ui-state-disabled')).all(by.className('menu-item-text'));
}

然后使用以下所有菜单项:

function getAllMenuItems() {
  return getCustomGrid().all(by.className('menu-ui')).all(by.className('menu-item-text'));
}

现在我想从getDisabledMenuItems返回的项目中排除getAllMenuItems返回的项目。

问题

排除另一个ElementArrayFinder中存在的ElementArrayFinder项的最简单方法是什么?

我试图通过filter方法做到这一点,如下所示:

const disabledText = getDisabledMenuItems().getText();
const allItems = getAllMenuItems();

  allItems.filter(function(elem, index) {
    return elem.getText().then(function(text) {
      return disabledText.indexOf(text) < 0 ;
    });
  });

但我的代码不起作用(indexOf does not exists on type Promise<string>)。 我也想知道最简单的方法是什么。

1 个答案:

答案 0 :(得分:1)

由于getDisabledMenuItems().getText()会返回一个承诺,您必须在then()中使用其最终值:

const disabledText = getDisabledMenuItems().getText();
const allItems = getAllMenuItems();

const enableItems = allItems.filter(function(elem, index) {
  return elem.getText().then(function(text) {
    return disabledText.then(function(txts){
      return txts.includes(text) === false;
      // or use  return txts.indexOf(text) < 0;
    });
  });
});