DEV Community

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

Posted on

1

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

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay