Попытка отфильтровать сгенерированную таблицу ng-repeat с помощью Protractor

У меня есть следующая структура, представляющая таблицу, и я пытаюсь фильтровать на основе текста <a href>, а затем текста <p>:

<tr ng-repeat = "a in apples" class = "ng-scope">
  <td>
    <p>
      <a href = "javascript::" ng-click = "openModal()" class = "ng-binding">Some text</a>
    </p>
  </td>
  <td>...</td>
  <td>
    <p class = "ng-binding">Some other text</p>
  </td>
  <td>...</td>
</tr>

До сих пор я пытался использовать element.all(by.repeater('a in apples'), но оттуда я не знаю, следует ли мне использовать .filter или следует цепочку element(by.css()), пока я не перейду к <a href> и <p>. Если тексты соответствуют определенному значению, я хотел бы вернуть true и оценить это с помощью expect().

Я также пытался просмотреть документацию, но большинство примеров показывают только следующее:

element.all(by.css('.items li')).filter(function(elem, index) {
  return elem.getText().then(function(text) {
    return text === 'Third';
  });
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете найти всю строку по element.all(), затем получить текст желаемого <a> и <p> внутри каждого tr, если оба текста соответствуют желаемому значению, вернуть true.

рекомендуем использовать await/async, чтобы упростить код.

# Use promise.then(), have to loop all rows, even matched row is not the last row

element.all(by.repeater('a in apples'))
    filter(function(tr){
        let linkText = tr.element(by.css('td:nth-child(1) a')).getText()
        let pText = tr.element(by.css('td:nth-child(3) p')).getText()

        return Promise.all([linkText, pText]).then(function(texts){
            return texts[0] === <link text> && texts[1] === <p text>
        });
    })

# Use await/async, end loop once find match row, not loop all rows

match = false
rows = element.all(by.repeater('a in apples'))
rowCount = await rows.count()

for(let i=0;i<rowCount;i++) {
  let linkText = await rows.get(i).element(by.css('td:nth-child(1) a')).getText()
  let pText = await rows.get(i).element(by.css('td:nth-child(3) p')).getText()
   
  if (linkText === <link text> && pText === <p text>) {
    match = true
    return
  }
}

Транспортир руководство по использованию await/async

Другие вопросы по теме