0

我想获得用户可以点击的菜单 UI 项目。

不幸的是,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>)。我也想知道最简单的方法是什么。

4

1 回答 1

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;
    });
  });
});
于 2018-05-22T14:55:28.273 回答