Есть ли способ в testcafe получить время загрузки определенных элементов страницы? - PullRequest
0 голосов
/ 02 ноября 2019

Предположим, я перешел на страницу и хочу, чтобы определенные элементы страницы отображались в течение определенного промежутка времени. Как я могу получить время, необходимое для загрузки определенных элементов страницы?

Я попытался использовать опцию visibilityCheck с таймером селектора в аргументе командной строки. Также попробовал исключение с таймаутом. Ни один из них не работает должным образом.

try {
        await loginPage.signInToPortal()
        await loginPage.login( 'xxxx','yyyy')
        await Selector('div').withText('Something').with({ visibilityCheck: true });
    } catch (e) {
        logger.error("Testcase C111111 failed...")
        throw(e)
    }

ИЛИ

try {
        await loginPage.signInToPortal()
        await loginPage.login( 'xxxx','yyyy')
        const appLabel = Selector('div').withText('Something').with({ visibilityCheck: true });
        await t.expect(appLabel.innerText).contains('Something', { timeout: 5000 });
    } catch (e) {
        logger.error("Testcase C111111 failed...")
        throw(e)
    }

1 Ответ

1 голос
/ 08 ноября 2019

Насколько я понимаю, вы хотите проверить, что элемент существует и имеет некоторый внутренний текст через некоторый период времени. Если время прошло, но элемент не существует или не имеет некоторого текста, вы хотите, чтобы тест не прошел.

Ваш подход в целом правильный, но я думаю, что вам не нужен параметр visibilityCheckздесь.

Поскольку я не знаю, как именно работает ваш проект, я создал образец. Позвольте мне показать это и объяснить, как работает таймаут в TestCafe.

Страница:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    setTimeout(() => {
        var div = document.createElement('div');

        document.body.appendChild(div);

        setTimeout(() => {
            div.innerHTML = 'test';
        }, 6000);
    }, 6000);

</script>
</body>
</html>

Код теста:

import { Selector } from 'testcafe';

fixture `fixture`
    .page `../pages/index.html`;

const selector = Selector('div', { timeout: 4000 });

test(`Recreate invisible element and click`, async t => {
    await t.expect(selector.innerText).eql('test', 'error message', { timeout: 13000 });
});

Здесь у меня есть div элемент, который появляется только через 6 с. В течение этого периода утверждение проверяет, существует ли элемент. Этот код выполняется: Selector('div', { timeout: 4000 });. Так как 4 с меньше 6 с, тест не пройден, поскольку он не может найти элемент в течение тайм-аута.

Однако, если я изменю тайм-аут на 7 с, Selector('div', { timeout: 7000}); TestCafe найдет div и начнет ждать, пока div не получитправильный внутренний текст.

Время ожидания подтверждения составляет 13 с. 13s больше, чем 6s (время, необходимое для появления элемента) + 6s (время, необходимое для того, чтобы элемент имел правильный текст), поэтому утверждение будет успешным. Однако, если я изменю тайм-аут подтверждения с 13 на 11, он потерпит неудачу.

...