Testando formulários e fluxos do usuário de ponta a ponta
Automatize envios de formulários em várias etapas e fluxos de navegação com objetos de página do Playwright.
Testando formulários e fluxos do usuário de ponta a ponta é uma aula grátis de React Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Estratégia de testes E2E de formulários
Os testes E2E de formulários simulam a jornada completa do usuário: acessar a página, preencher os campos, enviar o formulário, tratar erros de validação e verificar o resultado de sucesso.
Modelo de objeto de página
O Modelo de objeto de página (POM) encapsula os seletores e as interações de uma página em uma classe, tornando os testes mais legíveis e reduzindo a duplicação.
class LoginPage {
constructor(private page: Page) {}
async goto() { await this.page.goto('/login'); }
async fillEmail(email: string) { await this.page.getByLabel('Email').fill(email); }
async fillPassword(pw: string) { await this.page.getByLabel('Password').fill(pw); }
async submit() { await this.page.getByRole('button', { name: /log in/i }).click(); }
async getError() { return this.page.getByRole('alert').textContent(); }
}Usando o objeto de página nos testes
Ao usar objetos de página, os testes se tornam descrições das ações do usuário no nível da intenção — fáceis de ler e manter.
test('successful login redirects to dashboard', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.goto();
await loginPage.fillEmail('alice@example.com');
await loginPage.fillPassword('password123');
await loginPage.submit();
await expect(page).toHaveURL('/dashboard');
await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});Testando erros de validação
Envie dados inválidos ou vazios e verifique as mensagens de erro exibidas pela interface.
test('shows validation errors on empty submit', async ({ page }) => {
await page.goto('/register');
await page.getByRole('button', { name: 'Create account' }).click();
await expect(page.getByText('Email is required')).toBeVisible();
await expect(page.getByText('Password must be at least 8 characters')).toBeVisible();
});Testando formulários de várias etapas
Em assistentes de várias etapas, avance por cada etapa, verificando se o formulário avança e mantém os dados inseridos anteriormente.
test('completes 3-step signup', async ({ page }) => {
await page.goto('/signup');
// Step 1
await page.getByLabel('First Name').fill('Alice');
await page.getByRole('button', { name: 'Next' }).click();
// Step 2
await page.getByLabel('Plan').selectOption('pro');
await page.getByRole('button', { name: 'Next' }).click();
// Step 3
await page.getByLabel('Card Number').fill('4242424242424242');
await page.getByRole('button', { name: 'Complete' }).click();
await expect(page.getByText('Welcome, Alice!')).toBeVisible();
});Simulando APIs no Playwright
Use page.route() para interceptar chamadas à API e retornar respostas simuladas — isso é útil para testar casos extremos sem um back-end real.
await page.route('/api/register', async route => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ token: 'fake-token' }),
});
});
await page.goto('/register');
// ...fill and submit form
await expect(page).toHaveURL('/dashboard');Testando envios de arquivos
Use setInputFiles() para simular o envio de um arquivo no Playwright.
test('uploads a profile photo', async ({ page }) => {
await page.goto('/profile');
const fileInput = page.getByLabel('Profile photo');
await fileInput.setInputFiles('./fixtures/avatar.png');
await page.getByRole('button', { name: 'Upload' }).click();
await expect(page.getByAltText('Profile photo')).toBeVisible();
});Reutilizando o estado de autenticação
Faça login uma vez, salve o estado de armazenamento do navegador e reutilize-o entre os testes para ignorar fluxos de login repetidos.
// auth.setup.ts
test('authenticate', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('Email').fill('alice@example.com');
await page.getByLabel('Password').fill('password');
await page.getByRole('button', { name: 'Log in' }).click();
await page.context().storageState({ path: 'e2e/.auth/user.json' });
});
// playwright.config.ts — use storageState in other tests
use: { storageState: 'e2e/.auth/user.json' }Testando a recuperação de erros
Simule falhas de rede e verifique se o usuário consegue tentar novamente ou vê uma mensagem de erro útil.
await page.route('/api/submit', route => route.abort());
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByText('Network error. Please try again.')).toBeVisible();
await page.unroute('/api/submit');
// Now the real request goes through
await page.getByRole('button', { name: 'Retry' }).click();Testando a navegação pelo teclado
Teste se os formulários são totalmente acessíveis pelo teclado, percorrendo os campos com a tecla Tab e enviando-os com Enter.
test('submits form with keyboard only', async ({ page }) => {
await page.goto('/contact');
await page.keyboard.press('Tab'); // focus name
await page.keyboard.type('Alice');
await page.keyboard.press('Tab'); // focus email
await page.keyboard.type('alice@example.com');
await page.keyboard.press('Tab'); // focus submit
await page.keyboard.press('Enter');
await expect(page.getByText('Message sent!')).toBeVisible();
});Dados auxiliares para testes
Use os recursos auxiliares do Playwright para compartilhar de forma organizada a lógica de configuração, como a criação de um usuário de teste, entre vários testes.
// fixtures.ts
const test = base.extend<{ testUser: User }>({
testUser: async ({}, use) => {
const user = await createTestUser();
await use(user);
await deleteTestUser(user.id);
},
});
// In a test file:
test('edits profile', async ({ page, testUser }) => {
await page.goto(`/users/${testUser.id}/edit`);
});Execução paralela de testes
Por padrão, o Playwright executa os testes em paralelo entre vários processos de trabalho. Use test.describe.serial somente para testes que precisam ser executados em ordem.
Verificação rápida
Qual é o principal benefício do Modelo de objeto de página (POM) nos testes E2E?
Recapitulação
Os testes E2E de formulários usam objetos de página para facilitar a manutenção, page.route() para simular APIs, setInputFiles() para envios de arquivos e o estado de armazenamento para reutilizar sessões de autenticação. Teste a validação, os fluxos de várias etapas e a navegação pelo teclado para abranger jornadas reais do usuário.
Aprenda React com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 88
- Aulas
- 324
Perguntas Frequentes
A aula “Testando formulários e fluxos do usuário de ponta a ponta” é grátis?
Sim — o texto completo de “Testando formulários e fluxos do usuário de ponta a ponta” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Testando formulários e fluxos do usuário de ponta a ponta”?
Automatize envios de formulários em várias etapas e fluxos de navegação com objetos de página do Playwright. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Testando formulários e fluxos do usuário de ponta a ponta”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Testes de integração com React Testing Library
- Testando interface assíncrona e chamadas de API com MSW
- Primeiros passos com Playwright para React
- Testando formulários e fluxos do usuário de ponta a ponta