Тесты кукловода не проходят при работе в режиме без головы в приложении реакции - PullRequest
0 голосов
/ 12 марта 2020

У меня есть тест кукловода, который отлично работает, когда кукловод имеет настройку headless: false, но не проходит, если установлено headless: true.

Шаги теста:

  1. регистрирует пользователя в
  2. переносит их на страницу настроек
  3. открывает модальные
  4. типы в электронном письме в элемент ввода.
  5. проверяет, что кнопка «Далее» на странице отключена (адрес электронной почты не в правильном формате).

Тест обычно выполняется до точки, где он должен найти следующую кнопку. В этот момент кажется, что он потерял фокус на странице, так как зависает в ожидании следующей кнопки. Я думаю, что часть 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

enter image description here

консольный выход при работе headless: true

enter image description here

Это Конфигурация кукловода:

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
  }
}

Может кто-нибудь предложить какие-либо предложения относительно того, почему кукловод, кажется, частично теряет фокус? Что я могу сделать, чтобы это исправить?

...