Транспортир — как проверить, что все экземпляры класса отсутствуют в DOM?

#javascript #protractor #automated-tests

#javascript #транспортир #автоматизированные тесты

Вопрос:

Мне нужно проверить, все ли элементы класса отсутствуют в DOM. Скажем, я хочу, чтобы все элементы с классом .loading не присутствовали в DOM. Я знаю, что могу это сделать:

 browser.wait(EC.stalenessOf($$('.loading')), 5000);
  

Мой вопрос в том, будет ли этот код ждать, пока весь loading класс исчезнет, или только первый? Если он ожидает только первого, как я заставлю его работать для всех из них? Заранее спасибо 🙂

Ответ №1:

да, это должно подождать, пока не появятся ВСЕ элементы, соответствующие локатору

Но на будущее, если вы сомневаетесь, вы можете написать свою функцию вместо использования ExtectedConditions библиотеки. В этом случае вы могли бы сделать

 let loading = $$('.loading');
await browser.wait(
  async () => (await loading.count()) === 0, 
  5000, 
  `message on failure`
);
  

На самом деле, это то, что я использую для обработки нескольких анимаций загрузки 😉

Комментарии:

1. дайте мне знать, если хотите, чтобы я объяснил, как работает функция

2. Спасибо @volunte_tear. В чем преимущество использования вашей собственной функции вместо ExtectedConditions?

3. как вы и просили, вы не были уверены, как ExpectedCondition работает за сценой, поэтому мы написали нашу собственную функцию. Также, если вам удобно кодировать, вы можете создать любые условия ожидания без ограничений. Некоторые из моих действий заключаются в следующем: подождите, пока не появится более 3 элементов, соответствующих локатору; подождите, пока не откроются 2 вкладки браузера, подождите, пока атрибут элемента не будет иметь substring . Вы также можете подождать, пока не будут выполнены несколько условий. итак, опять же, никаких ограничений, кроме воображения