Как напечатать внутренний текст обещания, используя testcafe? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь сделать утверждение, которое печатает текстовый контекст баннера предупреждения.Баннер виден только в том случае, если пользователь вводит неверные данные для входа.Вот утверждение:

await t
    .expect(login.alertMessage.exists)
    .notOk(
        "I don't see the user details page. I see this " +
        await login.alertMessage.innerText 

    );

Утверждение всегда будет проходить, если он введет неверную информацию.

Если я выполню отрицательный тест (то есть, если пользователь введет правильную информацию для входа в систему), утверждение не будет выполнено в этой строке: await login.alertMessage.innerText и сообщение об ошибке будет

1) Не удается получить информацию об узле, поскольку указанный селектор не соответствует ни одному узлу в дереве DOM.

Если я удаляю await в await login.alertMessage.innerText тогда утверждение не показывает мне внутренний текст баннера.Вместо этого я вижу

1) AssertionError: Я не вижу страницу сведений о пользователе.Я вижу это: {"_then": [], "_ taskPromise": null}: ожидается, что true будет ложным

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 февраля 2019

Выражение параметра, которое вы передаете в функцию .notOk(), всегда выполняется до того, как утверждение выполнено оператором ожидаемого.

Это означает, что await login.alertMessage.innerText всегда выполняется перед оператором expect.

Когда пользователь вводит правильную информацию для входа, TestCafe не найдет селектор alertMessage и выдаст первую ошибку, о которой вы упомянули.

При удалении ключевого слова await, selector.innerText - этоа Promise<string>;конкатенация этого Promise со строкой вызовет метод toString () в Promise, но не разрешит само обещание.

Вы должны переписать ваше ожидание следующим образом:

const alertMessage = login.alertMessage;
if (await alertMessage.exists) {
    throw new Error(`user cannot login: ${await alertMessage.innerText}`);
}

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

КомуЧтобы избежать этого, вы должны реализовать свой собственный механизм ожидания перед вводом оператора if.Одно из решений:

const alertMessage = login.alertMessage;
await t.wait(5000);
if (await alertMessage.exists) {
    throw new Error(`user cannot login: ${await alertMessage.innerText}`);
}

Вы также можете заменить await t.wait(5000) на более сложный подход, как объяснено здесь

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