Невозможно создать экземпляр управляемого обещания - если функция написана с помощью async / await - PullRequest
0 голосов
/ 24 июня 2019

Транспортир отказывает с

Невозможно создать управляемый экземпляр обещания: менеджер обещаний имеет отключено переменной среды SELENIUM_PROMISE_MANAGER: не определен

Если какая-либо функция в тесте написана в асинхронном / ожидающем режиме. Если функция написана с использованием цепочек обещаний - все работает нормально.

Ниже код будет с ошибкой:

it('Inner', async function () {
    await browser.get(this.getRootPath());
    await asyncF(); // Fails here
});

async function asyncF (): promise.Promise<boolean> {
    const loginButton: ElementFinder = element(by.id('login-btn'));
    const res = await loginButton.isDisplayed();
    return res;
}

Ниже код будет работать ОК:

function asyncF (): promise.Promise<boolean> {
    const loginButton: ElementFinder = Utils.selectElementById('login-btn');
    return loginButton.isDisplayed();
}

Я ожидаю, что обе версии кода будут работать одинаково

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Нашел проблему. При использовании асинхронного / ожидающего синтаксиса asyncF () должен вернуть Promise<T>

В случае return мы на самом деле возвращаем promise.Promise<T>, и, похоже, именно поэтому он не работает для асинхронного режима / ожидания.

Подводя итог:

async function asyncF (): Promise<boolean> {
    const loginButton: ElementFinder = Utils.selectElementById('login-btn');
    const res = await loginButton.isDisplayed();
    return res;
}

отлично работает

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

Вы можете попробовать разрешить обещание другим способом, используя async/await

async function asyncF (): promise.Promise<boolean> {
    const loginButton: ElementFinder = Utils.selectElementById('login-btn');
    const res = await loginButton.isDisplayed();
    return res;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...