Попробуй поймать с бесхромовым бездействием
Использование 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