У меня есть тест кукловода, который отлично работает, когда кукловод имеет настройку headless: false
, но не проходит, если установлено headless: true
.
Шаги теста:
- регистрирует пользователя в
- переносит их на страницу настроек
- открывает модальные
- типы в электронном письме в элемент ввода.
- проверяет, что кнопка «Далее» на странице отключена (адрес электронной почты не в правильном формате).
Тест обычно выполняется до точки, где он должен найти следующую кнопку. В этот момент кажется, что он потерял фокус на странице, так как зависает в ожидании следующей кнопки. Я думаю, что часть type вызывает реактивный повторный рендеринг, и затем фокус на модале теряется.
Вот код теста:
beforeAll(async () => {
await sleep(5000)
// browser = await puppeteer.launch(getPuppeteerConfig())
browser_handler = new BrowserHandler
await wait_for_browser(browser_handler)
const context = await browser_handler.browser.createIncognitoBrowserContext()
page = await context.newPage()
await page.goto(getGoToPage())
await page.goto(`${getGoToPage()}/login`)
console.log('Got to login page')
await login_customer_email_verified(page)
}, 150000)
afterEach( async() => {
await page.goto(`${getGoToPage()}/dashboard`)
}, TIMEOUT.SECONDS_7)
//TODO: remove skip after fixing issue of test fails when headless set as 'false'
describe('Test email validation', () => {
test(
'Should fail email validation for: johndomain.com',
async () => {
await page.waitForNavigation()
await page.goto(`${getGoToPage()}/settings`)
console.log('Got to settings page')
await page.waitForSelector('[data-testid="add_new_email_button"]')
console.log('Found add_new_email_input button')
await page.click('[data-testid="add_new_email_button"]')
await page.waitForSelector('[data-testid="manage_emails_modal"]')
console.log('Found modal')
await page.waitForSelector('[data-testid="add_new_email_input"]')
console.log('Found add_new_email_input')
await page.type('[data-testid="add_new_email_input"]', 'johndomain.com')
console.log('Type successful')
await page.waitForSelector('[data-testid="add_email_next_button"]')
console.log('Found add_email_next_button')
await page.click('[data-testid=add_email_next_button]') //blur input
await sleep(TIMEOUT.SECONDS_1)
await page.click('[data-testid=add_email_next_button]')
await page.waitForSelector('[data-testid="add_new_email_input_error_text"]')
const error_message = await page.$eval(
'[data-testid="add_new_email_input_error_text"]',
text => text.innerHTML
)
expect(error_message).not.toEqual('')
},
TIMEOUT.MINUTES_2
)
})
Вывод на консоль при запуске headless: false
консольный выход при работе headless: true
Это Конфигурация кукловода:
export function getPuppeteerConfig(width = 1720, height = 980) {
let args = [
'--no-sandbox',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-renderer-backgrounding'
]
if (!!width && !!height) {
args.push(`--window-size=${width},${height}`)
}
return {
args: args,
//devtools: true,
headless: true,
//slowMo: 25,
defaultViewport: null,
pipe: true
}
}
Может кто-нибудь предложить какие-либо предложения относительно того, почему кукловод, кажется, частично теряет фокус? Что я могу сделать, чтобы это исправить?