Почему Puppeteer проваливает простые тесты со словами: «ожидание сбоя функции: превышено время ожидания 500 мс»? - PullRequest
0 голосов
/ 07 ноября 2018

Пытаясь настроить несколько простых сквозных тестов с помощью Jest и Puppeteer, я обнаружил, что любой мой тест непонятным образом потерпит неудачу с таймаутом.

Вот простой пример тестового файла, который незначительно отличается от собственного примера кукловода :

import puppeteer from 'puppeteer';

describe('Load Google Puppeteer Test', () => {
  test('Load Google', async () => {
    const browser = await puppeteer.launch({
      headless: false
    });

    const page = await browser.newPage();
    await page.goto('https://google.co.uk');
    await expect(page).toMatch("I'm Feeling Lucky");
    await browser.close();
  });
});

И ответ, который он выдает:

TimeoutError: Text not found "I'm Feeling Lucky"
      waiting for function failed: timeout 500ms exceeded

Я попытался добавить пользовательские тайм-ауты в строку goto, условие теста, среди прочего, безрезультатно. Любые идеи о том, что может быть причиной этого? Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

Я бы сказал, что здесь происходит то, что использование toMatch предполагает отображение текста. Однако в вашем случае вы хотите проверить текст, связанный с кнопкой.

Вы должны попробовать что-то вроде этого:

await expect(page).toMatchElement('input[value="I\'m Feeling Lucky"]');

Обновление 1:

Другая возможность (и вы сами ее подняли) заключается в том, что время проверки истекает до того, как страница сможет загрузиться. По моему опыту, это общая проблема с выполнением кода в режиме без головы. Это очень быстро Иногда слишком быстро. Операторы могут быть выполнены до того, как все в интерфейсе будет готово.

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

await page.waitForSelector('input[value="I\'m Feeling Lucky"]');

Это обеспечит отображение выбранного селектора перед тем, как перейти к следующему шагу в вашем коде. Делая это, вы сделаете свои скрипты намного более надежными, сохраняя при этом эффективность - эти ожидания не будут замедлять ваш код. Они будут просто приостанавливаться до тех пор, пока puppeteer не зарегистрирует селектор, с которым вы хотите взаимодействовать / проверить, как отображаемый. В большинстве случаев вы даже не заметите паузу, поскольку она будет настолько короткой (я говорю миллисекунды).

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

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