Aprenda como ler informações salvas na janela do navegador, tal como o que é salvo na área de transferência
Imagine uma aplicação simples, a qual possui somente um input do tipo texto, com um valor padrão (por exemplo, Olá mundo) e um botão chamado copiar para a área de transferência, o qual quando clicado, copia o texto do input para tal área, como o nome sugere.
Quando clicado logo que a aplicação é visitada, o texto copiado é Olá mundo.
Porém, quando tal texto é apagado, outro texto é digitado e então o botão é clicado, o novo texto é copiado.
E aí você se pergunta.
E como testar estes cenários com Cypress?
Que bom que perguntou, pois é isso que vou te mostrar nesta “pitada de Cypress”.
O código da aplicação se resume ao seguinte arquivo index.html.
<!DOCTYPE html> <html> <head> <title>Copy to clipboard example page</title> <style> * { font-family: sans-serif; } </style> </head> <body> <h1>Copy to clipboard sample</h1> <input type="text" value="Hello World" id="copy-to-clipboard-input-field"> <button onclick="copyToClipboard()">Copy to clipboard</button> <script> function copyToClipboard() { const copyText = document.getElementById("copy-to-clipboard-input-field") copyText.select() // Select the text field copyText.setSelectionRange(0, 99999) // For mobile devices // Copy the text inside the text field navigator.clipboard.writeText(copyText.value) } </script> </body> </html>
E o código do teste ao seguinte arquivo cypress/integration/copyToClipboard.spec.js.
it('copies input field text to the clipboard', () => { cy.visit('./index.html') cy.contains('button', 'Copy to clipboard').click() cy.assertValueCopiedToClipboard('Hello World') cy.get('#copy-to-clipboard-input-field') .clear() .type('Foo bar baz') cy.contains('button', 'Copy to clipboard').click() cy.assertValueCopiedToClipboard('Foo bar baz') }) Cypress.Commands.add('assertValueCopiedToClipboard', value => { cy.window().then(win => { win.navigator.clipboard.readText().then(text => { expect(text).to.eq(value) }) }) })
No teste, primeiro visito a aplicação em teste, ou seja, o arquivo index.html.
Então encontro o botão com o texto Copy to clipboard (copiar para a área de transferência em inglês) e clico nele.
Quando o botão é clicado, o texto padrão do input do tipo texto deve ser copiado para a área de transferência, e portanto, faço a verificação de que o valor correto foi copiado, por meio de um comando customizado, o qual explicarei logo mais.
Depois, limpo o input, digito um valor diferente e novamente clico no botão.
Por fim, verifico que o novo valor agora foi copiado para a área de transferência, substituindo o valor anterior.
Agora deixa eu te explicar em detalhes o comando customizado que verifica que o valor foi corretamente copiado para a área de transferência.
O comando recebe como argumento o valor a ser comparado (value), ou seja, o resultado esperado.
Em sua implementação, executo o comando cy.window(), no qual encadeio o comando .then(), passando à ele uma função de callback, a qual recebe como argumento a janela do navegador (win).
Com acesso a janela (win), acesso a propriedade navigator, a partir dela acesso a propriedade clipboard, e então uso a função readText() para ler o texto copiado ao clipboard, onde encadeio outro .then(), onde neste caso, a função de callback recebe como argumento o texto (text) contido na área de transferência, me possibilitando realizar a verificação de que o texto (text) é igual ao valor esperado (value).
E é assim que consigo testar com Cypress o valor copiado para a área de transferência do navegador.
Veja o teste executando no gif abaixo.
E veja também o código completo no GitHub.
Aproveite pra deixar uma estrela!
Referência: https://www.w3schools.com/howto/howto_js_copy_clipboard.asp.
Gostou dessa “pitada de Cypress”?
Deixa um comentário.
Ficou curioso(a) e quer aprender mais sobre automação de testes com Cypress? Conheça meus cursos no Udemy.
- Cypress básico
- Cypress intermediário
- Cypress avançado
- Boas práticas em automação de testes com Cypress
- Testes end-to-end com Cypress
- Testes de regressão visual com Cypress e Percy (básico)
👋 Até a próxima e bons testes!
Um comentário em “Testando a cópia para a área de transferência com Cypress”