транспортир, петля элементов - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в транспортире.Я делаю автоматические тесты, и в моем файле функций у меня есть это, чтобы проверить:

When('there are at least two ports loaded', function (next) { }

В моем HTML у меня есть это:

<div class="port-element ">
   <div class="image-loader" style="display: inline;">
      <picture> (...) </picture>

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

let port_element = element.all(by.css('port-element '));
      port_element.each(function (item) { 
        console.log('Port element count: ', item);
      });
      next();

, но я не понимаю, как.

По совету я использовал это в своем определении шага:

let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
  let selector = 'div.port-element div.image-loader:nth-child('+i+')');
  //selector is the element within each div to now check
}

и

ожидают (element.all (by.css ('div.port-item div.image-loader')). Count ()). To.be.above (2)

но теперь у меня есть эта ошибка:

AssertionError: expected ManagedPromise::4833 {[[PromiseStatus]]: "pending"} to be a number or a date

Теперь я попытался сделать так:

let img_loader_count = element.all(by.css('div.port-element div.image-loader'));
    console.log('img loader count: ', img_loader_count.count());                  

, но у меня это на консоли: img loader count:0

Существует 12 загрузчиков img, так что это невозможно.Почему на консоли он печатает 0?Кто-нибудь может мне помочь?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Единственный способ сделать это - использовать element.count () в качестве индекса для цикла, такого как:

let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
  let selector = 'div.port-element div.image-loader:nth-child('+i+')');
  //selector is the element within each div to now check
}

Однако, если вы только пытаетесь проверить, чтоопределенное количество изображений, которые находятся внутри элемента порта, тогда вы можете сделать

expect(element.all(by.css('div.port-element div.image-loader').count()).toBe(2);

Для редактирования вопроса:
Вы должны использовать expect() вместо console.log().Асинхронная природа js может вызвать странные вещи, когда вы пытаетесь регистрировать переменные, подобные этой, так как они не заключены в обещание.Использование expect(img_loader_count.count()).toBe(12); должно дать вам ожидаемый результат.Если вам необходимо использовать console.log() по какой-либо причине, вы должны правильно поставить его в очередь следующим образом:

element.all(by.css('div.port-element div.image-loader').count().then(function(value){
  console.log('The count is: '+value);
});

Здесь - документация для некоторых вещей обещания.

0 голосов
/ 11 июня 2018

Вы можете использовать count (), чтобы проверить, сколько классов загружено на текущей странице.

Я внес небольшие изменения в ваш код, надеюсь, это поможет вам.

    let port_element = element.all(by.css('.port-element'));
        expect(port_element.count()).toBe(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...