Как исключить элементы ElementArrayFinder, которые существуют в другом ElementArrayFinder в Protractor? - PullRequest
0 голосов
/ 22 мая 2018

Я хотел бы получить элементы меню-интерфейса, по которым пользователь может щелкнуть.

К сожалению, метод 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 голосов
/ 22 мая 2018

Поскольку 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;
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...