Асинхронное ожидание против разницы в подходе к браузеру. - PullRequest
0 голосов
/ 21 июня 2019

Доброе утро, я начал рефакторинг тестовых случаев в Protractor (приложение Angular).Я обнаружил, что тестовые случаи должны быть написаны с использованием подхода async await, но я также попытался browser.wait, что, я полагаю, эквивалентно упомянутому подходу.Это правильно?Ниже я добавляю примеры кода.

async function (msg) {
  await main.getMessagesFromConversation()
    .then((bodyMessage) => expect(bodyMessage).to.equal(msg));
}

и то же самое с browser.wait

function (msg) {
  return browser.wait(main.getMessagesFromConversation()
    .then((bodyMessage) => expect(bodyMessage).to.equal(msg)), 5000);
}

1 Ответ

0 голосов
/ 21 июня 2019

Нет async/await - это не то же самое, что browser.wait.

Async / await - это стиль обработки обещаний в javascript.Все взаимодействия браузера (и многие другие функции) в среде транспортира заключены в закулисные обещания.Это связано с тем, что webdriverJS, на который опирается Protractor, является полностью асинхронным.Protractor использует обещания, позволяющие выполнять код в той последовательности, в которой он написан проще.

Первоначально webdriverJS предоставлял функцию, называемую потоком управления, которая позволяла обрабатывать все эти обещания за кулисами.Начиная с версии 4 webdriverJS (я считаю) это устарело, и из транспортира версии 6.0+ транспортир теперь использует webdriverJS 4, так что поток управления также не рекомендуется использовать внутри транспортира.Async/await - это более простой и гораздо более простой способ справиться с этими обещаниями.

Внутри транспортира async/await может использоваться как альтернатива .then.catch().Так что для вашего примера вы должны просто написать вместо этого:

async function (msg) {
  let conversationMsgs = await main.getMessagesFromConversation()
  expect(conversationMsgs).to.equal(msg));
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...