QA Learning / Playwright

← Índice da trilha

Módulo 0 (bônus): montar o projeto do zero

Totalmente opcional. A partir do Módulo 1, a trilha usa um projeto já pronto (trilha-7/), que vem com tudo configurado. Esse módulo existe pra quem quer entender de onde cada arquivo daquele projeto veio, montando um do zero, numa pasta separada, antes de seguir.

🎥 Prefere ver antes de ler?

Esse vídeo (5min05) explica o que são Node e npm, a diferença entre instalar a ferramenta (npm) e o navegador que ela controla (download à parte), o que cada linha do playwright.config.js faz (incluindo o testIdAttribute, que por padrão já é data-testid), mostra de onde vem cada pasta e arquivo do projeto, e fecha montando tudo de verdade, ao vivo, num terminal: mkdir, npm init, npm install, os dois arquivos escritos na hora, 1 passed rodando contra o QA Treino publicado de verdade, e a estrutura de pastas real conferida no fim. Não substitui o texto abaixo, mas ajuda a visualizar antes de praticar.

Quer pular direto?

Sem problema nenhum. Isso aqui não é pré-requisito, e o Módulo 1 funciona perfeitamente sem passar por aqui antes. Ir direto pro Módulo 1 →

1. Criar a pasta e iniciar o projeto Node

Numa pasta separada da trilha (não dentro de trilha-7/ nem do repositório do QA Learning, pra não misturar com nada), crie uma pasta nova e entre nela:

mkdir meu-projeto-playwright
cd meu-projeto-playwright

Agora inicie um projeto Node:

npm init -y

Isso cria um package.json: o arquivo que descreve o projeto (nome, versão) e vai guardar a lista de dependências instaladas. É o mesmo arquivo que já existe pronto em trilha-7/package.json — só que lá ele já veio preenchido.

2. Instalar o Playwright

Um comando de cada vez:

npm install -D @playwright/test

O -D significa "dependência de desenvolvimento": o Playwright é uma ferramenta pra testar o projeto, não faz parte dele quando ele vai pra produção. Depois de rodar, repare que o package.json ganhou uma seção devDependencies com o Playwright listado.

Agora instale o navegador que ele vai controlar:

npx playwright install chromium

São dois passos separados de propósito: instalar a ferramenta (npm) é diferente de instalar o navegador que ela controla (um download à parte, de uns 150 MB, só na primeira vez).

3. Criar o arquivo de configuração

Crie um arquivo chamado playwright.config.js na raiz do projeto, com este conteúdo (digite ou copie, mas leia cada linha):

// @ts-check
const { defineConfig, devices } = require("@playwright/test");

module.exports = defineConfig({
  testDir: "./tests",
  use: {
    baseURL: "https://qa-learning-treino-production.up.railway.app",
  },
  projects: [
    { name: "chromium", use: { ...devices["Desktop Chrome"] } },
  ],
});

testDir diz onde o Playwright procura arquivos de teste. baseURL é o alvo padrão (o mesmo QA Treino que o resto da trilha usa, já publicado): assim os testes podem usar page.goto("/login.html") em vez da URL inteira toda vez. projects define em qual navegador os testes rodam; aqui só o Chromium, pra ficar leve.

Esse é o arquivo mínimo. O trilha-7/playwright.config.js tem mais algumas opções (relatório em JSON pro corretor ler, captura de trace em caso de falha) — dá uma olhada nele depois de terminar aqui, pra comparar.

Mais uma opção que existe, embora a gente não precise mexer nela: testIdAttribute. É ela que diz pro page.getByTestId(...) em qual atributo HTML procurar. O padrão do Playwright já é data-testid — exatamente o atributo que o QA Treino usa em todo elemento, por isso tudo funcionou sem configurar nada extra. Se um dia você testar um site que usa outro nome, tipo data-test ou data-cy, é aqui que você avisa o Playwright:

use: {
  baseURL: "...",
  testIdAttribute: "data-test", // só se o site NÃO usar data-testid
},

6. Olhando a estrutura de pastas depois de tudo isso

Depois dos passos acima, é assim que a pasta meu-projeto-playwright/ fica por dentro. Repare de onde veio cada item:

meu-projeto-playwright/
├── package.json          ← criado pelo "npm init -y" (passo 1)
├── package-lock.json     ← criado pelo "npm install" (passo 2, trava as versões)
├── node_modules/         ← criado pelo "npm install" (passo 2, o código do Playwright em si)
├── playwright.config.js  ← você criou na mão (passo 3)
├── tests/
│   └── exemplo.spec.js   ← você criou na mão (passo 4)
└── test-results/         ← o Playwright cria sozinho ao rodar (passo 5), guarda prints/vídeos de falha

node_modules/ e package-lock.json não existiam antes do npm install: é ali que o código de verdade do Playwright fica guardado (geralmente uma pasta pesada, por isso ela nunca é commitada no Git — só o package.json descreve o que precisa ser reinstalado). Compare essa árvore com a de trilha-7/, que você já viu nos módulos anteriores: é a mesma ideia, só que com mais Page Objects dentro de tests/ e pages/.

Não existe uma pasta playwright-report/ aqui: ela só aparece se você configurar um reporter específico pra isso (reporter: "html"). O trilha-7/playwright.config.js usa outra combinação, reporter: [["list"], ["json", ...]], que mostra o resultado direto no terminal e grava um resultado.json (é esse arquivo que verificar.py lê pra conferir seu exercício).

4. Escrever o primeiro teste do zero

Crie a pasta tests/ e, dentro dela, um arquivo exemplo.spec.js:

mkdir tests

Conteúdo de tests/exemplo.spec.js:

const { test, expect } = require("@playwright/test");

test("a pagina de login carrega", async ({ page }) => {
  await page.goto("/login.html");
  await expect(page.getByTestId("login-form")).toBeVisible();
});

Repare que não existe Page Object nem nada "escondido" aqui: é o teste mais simples possível, só pra provar que a configuração está certa. A partir do Módulo 1, você vai ver esse mesmo teste (e outros) já escritos dentro de trilha-7/.

5. Rodar

De dentro da pasta do projeto:

npx playwright test

Se aparecer 1 passed, o projeto está montado e funcionando, do zero, sem nada pronto. Esse é exatamente o resultado que trilha-7/ já te dá de cara — agora você sabe o que tem por trás.

Olhar de QA

Entender a configuração não é perda de tempo: quando um teste falha de um jeito estranho (não acha o navegador certo, não resolve a URL, não lê o relatório), saber o que cada peça do playwright.config.js faz é o que separa "reiniciar tudo e torcer" de "ler a mensagem de erro e saber exatamente onde olhar". Guarde essa pasta como referência; a partir daqui a trilha usa o projeto já pronto em trilha-7/, pra não repetir esse setup a cada módulo.

Terminou este bônus? Marque aqui. Fica salvo só no seu navegador (não conta pra barra de progresso da trilha, já que é opcional).