代码之家  ›  专栏  ›  技术社区  ›  matandked

如何排除量角器中另一个elementrayfinder中存在的elementrayfinder项?

  •  0
  • matandked  · 技术社区  · 6 年前

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

    不幸的是, 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 .


    问题

    排除存在于其他elementrayfinder中的elementrayfinder项的最简单方法是什么?

    我正试图通过 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 回复  |  直到 6 年前
        1
  •  1
  •   yong    6 年前

    因为 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;
        });
      });
    });