Вот простая версия моего теста:
const puppeteer = require('puppeteer')
const { expect } = require('chai')
const options = {
timeout: 15000
}
let browser, page;
// setup
before(async () => {
browser = await puppeteer.launch(options)
page = await browser.newPage()
})
// teardown
after(async () => {
await page.close()
await browser.close()
})
// utility functions
const withText = (text, element = '*') => `//${element}[contains(., '${text}')]`
describe('tests', () => {
it('login', async () => {
let user = 'foobar'
let pw = 'password1'
await page.goto('http://localhost:3000', { waitUntil: 'networkidle0' })
await page.waitForXPath(withText('Sign In'))
await page.type('#user', user, { delay: 50 })
await page.type('#password', pw, { delay: 50 })
await page.screenshot({ path: 'screenshot.png' })
})
})
Когда я запускаю приведенный выше код с помощью mocha --timeout 15000 test.js
(пока нет реального теста, просто пытаюсь проверить, заполнена ли форма), тест входа в систему выше выдает следующую ошибку:
Error: Timeout of 15000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Afaik, mocha требуется только done()
вызов, если тест НЕ является асинхронным c (другой поток подтверждает это: Правильный способ использования done () во время тестирования asyc / ждут с мокко ). Но даже с готовым, вышеупомянутый тест выдает ошибку тайм-аута. При тестировании с headless: false
даже функции настройки и демонтажа выдают одинаковую ошибку. Что я делаю не так?
РЕДАКТИРОВАТЬ: Исправлено, проблема заключалась в том, что мой селектор waitForXPath
истекал из-за того, что наш браузер совместимости браузера отмечал кукловода и выдавал ошибку вместо Форма входа.