Попробуй поймать с бесхромовым бездействием

Использование Chromeless для запуска тестов каждые 5 минут, чтобы убедиться, что я могу войти на веб-сайт, и этот контент доступен.

Код выглядит так:

const { Chromeless } = require('chromeless')

async function run() {
  const chromeless = new Chromeless({
    remote: {
      endpointUrl: 'https://abc1234567.execute-api.us-west-2.amazonaws.com/dev',
      apiKey: 'abc123xyz987'
    }
  })

  const screenshot = await chromeless
    .clearCookies()
    .setUserAgent('some-user-agent')
    .goto('https://www.example.com')
    .type('username', 'input[name="username"]')
    .type('super_secret', 'input[name="password"]')
    .click('#loginButton')
    .wait('#TitleTagOnceLoggedIn')
    .screenshot()

  console.log(screenshot)

  const report = await chromeless
    .setUserAgent('some-user-agent')
    .goto('https://www.example.com/only/accessible/if/logged/in')
    .wait('#TitleTagForPageWhenLoggedIn')
    .screenshot()
  console.log(report)

  await chromeless.end()
}

run().catch(console.error.bind(console))

Это работает нормально, однако один раз каждые 10-20 раз, когда я запускаю его, я получаю следующую ошибку

Chromeless Proxy disconnected due to inactivity (no commands sent for 30 seconds).

В логах cloudwatch от моей лямбда-функции я получаю похожую ошибку

Timing out. No requests received for 30 seconds

Как я могу установить это, чтобы повторить, если я получаю ошибки неактивности?

1 ответ

Перерабатывать

await chromeless.end()

в

chromeless.end().catch(callback).then(callback)

и переместите его в не асинхронную функцию, например function end (callback) {...},

Тогда ваш код ждать run завершить выполнение, а затем выполнить end с обратным вызовом, обрабатывающим результат. См. https://github.com/graphcool/chromeless/issues/259

Другие вопросы по тегам