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');
em vez de localizar um elemento pelo ID:
await page.locator('#login-button');
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();
em vez de:
await page.click('text=Login');
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"')
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();
Top comments (0)