Как переписать функцию закрытия текущей вкладки с помощью «async / await» вместо «.then»?

#protractor

#транспортир

Вопрос:

Для закрытия текущей вкладки в моем тесте я использую следующую функцию:

 browser.getAllWindowHandles().then((handles) => {
    browser.driver.switchTo().window(handles[1]);
    browser.driver.close();
    browser.driver.switchTo().window(handles[0]);
});
 

И это хорошо работает. Но я должен переписать на «async / await» вместо «.then». Я пробую следующий код:

 async function goBackToPreviousTab () {
    let handles = await browser.getAllWindowHandles();
    browser.driver.switchTo().window(handles[1]);
        browser.driver.close();
        browser.driver.switchTo().window(handles[0]);
}
 

но в результате получаю следующую ошибку:

нет такого окна: целевое окно уже закрыто из-за неизвестной ошибки: веб-просмотр не найден

Ответ №1:

Прежде всего, поймите, что .then или await — это способ решения Обещаний. Поэтому все, что возвращает обещание, должно быть явно разрешено. Например, .close() также возвращает обещание и нуждается в любом из синтаксисов

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

 async function goBackToPreviousTab () {
    let handles = await browser.getAllWindowHandles();
    await browser.driver.switchTo().window(handles[1]);
    await browser.driver.close();
    await browser.driver.switchTo().window(handles[0]);
}
 

потому что каждая из твоих заповедей — это Обещание