DEV Community

Cover image for Simulando navegação por teclado com as novas teclas do comando cy.press na versão 15.1.0 do Cypress
Talking About Testing
Talking About Testing

Posted on • Edited on

Simulando navegação por teclado com as novas teclas do comando cy.press na versão 15.1.0 do Cypress

TAB, SPACE e muito mais agora fazem parte da sua estratégia de testes automatizados

A versão 15.1.0, o Cypress introduziu uma melhoria importante para quem testa acessibilidade e navegação por teclado: o comando cy.press agora suporta novas teclas, como ENTER, SPACE e outras, além da tecla TAB (disponível desde a versão 14.3.0). Essa mudança, destacada no changelog oficial, amplia o leque de cenários que conseguimos cobrir com testes end-to-end.

Se antes precisávamos de workarounds para simular o pressionamento de teclas específicas, ou mesmo de testes manuais, agora podemos testar fluxos completos de interação apenas com o teclado, garantindo que pessoas que dependem dessa forma de navegação também tenham uma boa experiência. E tudo isso de forma automatizada!

Vejamos um exemplo.

O cenário de teste

No exemplo abaixo, criamos um teste que valida a navegação por um messenger de uma aplicação fictícia, utilizando apenas TAB para avançar entre os campos e SPACE para acionar os botões:

Para digitar nos campos, utilizamos a conhecido comando cy.type(), existente desde as primeiras versões do Cypress.

// cypress/e2e/spec.cy.js

describe('TAB navigation', () => {
  beforeEach(() => {
    // Set a cookie before visiting the page to prevent it from showig up
    cy.setCookie('cookieConsent', 'accepted')
    // Visit the app
    cy.visit('/')
    cy.get('table').should('be.visible')
    // Press TAB 20 times to reach the open messenger button
    Cypress._.times(20, () => {
      cy.pressTAB()
    })
    // Make sure the open messenger button is focused
    cy.get('[aria-label="Open messenger"]')
      .should('be.focused')
    // Open the messager by pressing SPACE on the focused button
    cy.pressSPACE()
  })

  it('navigates through the messenger using the TAB key', () => {
    // Ensure the messenger opens with its first field pre-focused (i.e., the name field), and types the required info in it
    cy.get('#messenger-name')
      .should('be.focused')
      .type('John Doe')
    // Press TAB to move to the email field
    cy.pressTAB()
    // Make sure the email field is focused and type a valid email in it
    cy.get('#email')
      .should('be.focused')
      .type('johndoe@example.com')
    // Press TAB to move to the message textarea
    cy.pressTAB()
    // Make sure the textarea field is focused and type a message in it
    cy.get('#message')
      .should('be.focused')
      .type('The client with ID 5 has no contact info available.')
    // Press TAB to move to the send button
    cy.pressTAB()
    // Make sure the button is focused
    cy.contains('button', 'Send')
      .should('be.focused')
    // Press SPACE to submit the form
    cy.pressSPACE()
    // Ensure the success message is displayed (which could be read by a screen reader)
    cy.contains('Your message has been sent.').should('be.visible')
    // Press TAB to move to the close messenger button
    cy.pressTAB()
    // Ensure the closed button is focused
    cy.get('button[aria-label="Close messenger"]')
      .should('be.focused')
    // Press SPACE to close the messenger
    cy.pressSPACE()
    // Ensure the messenger was closed by checking that the open messenger button is now visible
    cy.get('button[aria-label="Open messenger"]').should('be.visible')
  })
})
Enter fullscreen mode Exit fullscreen mode

Os comandos customizados

Para simplificar a leitura do teste, criamos dois comandos customizados no arquivo cypress/support/commands.js:

Cypress.Commands.add('pressTAB', () => {
  cy.press(Cypress.Keyboard.Keys.TAB)
})

Cypress.Commands.add('pressSPACE', () => {
  cy.press(Cypress.Keyboard.Keys.SPACE)
})
Enter fullscreen mode Exit fullscreen mode

Esses comandos são carregados automaticamente pelo arquivo cypress/support/e2e.js:

import './commands'
Enter fullscreen mode Exit fullscreen mode

O que mudou no cy.press?

Antes (entre as versões 14.3.0 e 15.0.0), o suporte era limitado somente a tecla TAB. Agora, podemos acessar atalhos e teclas especiais como ENTER, BACKSPACE, SPACE, entre outras.

Isso abre espaço para testes de:

  • Acessibilidade: garantir que os elementos da página são alcançáveis por TAB e ativáveis por SPACE ou ENTER.
  • Fluxos reais de formulários: preencher campos apenas com navegação por teclado.
  • Interações avançadas: menus suspensos, modais e tooltips acionados por teclas específicas.

Conclusão

Com o suporte expandido do comando cy.press, fica mais simples criar testes que refletem o uso real da aplicação por usuários que dependem de navegação por teclado.

Essa evolução do Cypress não só melhora a cobertura de testes, mas também reforça o compromisso com experiências inclusivas e acessíveis.

👉 Confira a documentação oficial do comando cy.press e explore suas possibilidades para seus próximos testes.


Quer aprender mais sobre testes de acessibilidade com Cypress? Conheça o curso Cypress Simulator da Escola Talking About Testing.

Top comments (0)