DEV Community

Cover image for Playwright: dicas e boas práticas
Tarcisio C. Uchoa
Tarcisio C. Uchoa

Posted on

Playwright: dicas e boas práticas

Priorizar atributos que o usuário interage (user-facing)

Um usuário não sabe o que são ids ou classes e não procuram esses itens na hora de interagir com a página.

O teste deve imitar o comportamento do usuário e o teste ficará mais robusto, uma vez que a interação do usuário pouco mudará, em reação a ids, classes e outros detalhes de implementação.

Quanto mais o teste se assemelhar à forma como o software é utilizado, mais confiante será.

Localizar um elemento pelo texto, conforme um usuário faria:

await page.locator('text=Login');
Enter fullscreen mode Exit fullscreen mode

em vez de localizar um elemento pelo ID:

await page.locator('#login-button');
Enter fullscreen mode Exit fullscreen mode

Utilizar localizadores em vez de seletores

O uso de localizadores previne imprevisibilidades ou quebras imprevistas quando a página muda. Essas quebras podem não ser percebidas e o teste falhar, se foram utilizados seletores.

Usar:

await page.locator('text=Login').click();
Enter fullscreen mode Exit fullscreen mode

em vez de:

await page.click('text=Login');
Enter fullscreen mode Exit fullscreen mode

Os localizadores ajudarão a mitigar imprevisibilidades, devido a seu nível de restrição.

Se muitos elementos iguais surgirem na página, o uso de localizadores fará com que o teste "reclame" disso. O teste falhará e exibirá uma mensagem melhor sobre a falha, em vez de simplesmente falhar.

Utilizar Page Object Model (POM)

Page Object Model (POM) é um design pattern que ajuda a evitar duplicação de código, melhora a manutenibilidade e simplifica interações entre páginas e múltiplos testes.

Não que seja necessário utilizar para tudo. Utilizar quando fizer sentido abstrair um trecho de código, se o teste se beneficiará dele.

Duplicação é mais barato do que uma abstração errada.
— Sandi Metz

Mais detalhes sobre o Page Object Model no próximo artigo.

Utilizar aspas duplas para encontrar elementos específicos

Se está encontrando múltiplos elementos com a mesma string, tente utilizar aspas duplas para habilitar "case sensivity".

Por exemplo: await page.locator('text=Checkout') pode retornar um botão com o texto "Checkout" e um título com o texto "Check out this new shoe".

Utilize aspas duplas para retornar somente o botão com o código:

await page.locator('text="Checkout"')
Enter fullscreen mode Exit fullscreen mode

Ref: Playwright: text locator

Evite seletores amarrados à implementação

XPATH e CSS podem ser amarrados à estrutura ou implementação e podem facilmente serem alterados, então melhor evitar coisas como:

await locator (`#tsf > div:nth-child(2) >
div.A8SBwf > div.RNNXgb > div > div.a4bIc > input`).click();
Enter fullscreen mode Exit fullscreen mode

Série de artigos sobre E2E:

  1. Teste E2E (end-to-end)
  2. Melhores práticas para criação e automação de testes E2E
  3. Testes de UI resilientes a mudanças
  4. Playwright: dicas e boas práticas
  5. Organização de testes automatizados

Top comments (0)