Несовместимые результаты elementLocated и findElements - PullRequest
0 голосов
/ 01 июня 2018

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

it('has five items', async function(done) {
  try {
    await driver.wait(until.elementLocated(By.className('item-class')),5000);
    const items = await driver.findElements(By.className('item-class'));
    expect(items.length).toBe(5);
    done();
  }
  catch(err) {
    console.log(err)
  }
}

Этот тест будет проходить около 2/3 времени, но иногда не будет с:

Expected 0 to be 5.

Я думаю, что тамне должно быть способа получить этот ответ, так как первая строка должна заставить его ждать, пока некоторые из этих элементов не существуют.Я мог понять результат «Ожидается, что 1 равняется 5.», в случае, если один элемент был добавлен на страницу, а остальная часть теста завершена до того, как все они были там, но достиг вызова ожидаемого () с 0 элементами.на странице не имеет смысла для меня.

Вопросы, таким образом:

1) Что я упускаю / не понимаю, так что этот результат на самом деле возможен?
2) Есть ли другая конструкция / метод, который я должен использовать, чтобы заставить его ждать, пока ожидаемые элементы появятся на странице?

1 Ответ

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

Я проверил исходный код и elementLocatedBy использует findElements, см. здесь findElements может вернуть пустой массив элементов после тайм-аута, и, следовательно, ожидается 0 (узнал что-то новое сегодня).

Вы можете написать что-то нестандартное или использовать какой-нибудь готовый метод из здесь , который не использует findElements

driver.wait(async function() {
  const items = await driver.findElements(By.className('item-class'))
  return items.length > 0;
}, 5000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...