├── .github └── logo-stiker.svg ├── .gitignore ├── Readme.md ├── package.json ├── pages └── login-page.ts ├── playwright.config.ts ├── tests └── login.spec.ts └── yarn.lock /.github/logo-stiker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | test-results 2 | report 3 | node_modules -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | ### Introdução ao Playwright no evento 4ALL Tests Referências 2022 2 | 3 |

4 | 5 |

6 | 7 | O Playwright é um novo framework para automação de testes em aplicações web e também APIs. Está ganhando força devido aos seus vários benefícios, como suporte para várias linguagens, como Java, C#, Javascript, Typescript e Python. Execuções MultiBrowser no Firefox, Webkit (Safari) e navegadores baseados em Chromium, como o Google Chrome e o novo Microsoft Edge. 8 | 9 | ## 🚀 Tecnologias 10 | 11 | - [Node.js] - plataforma de desenvolvimento 12 | - [TypesScript] - Superset do Javascript s2 13 | - [Playwright] - framework de testes automatizados 14 | 15 | ## 👨🏻‍💻 Como executar o projeto 16 | 17 | [Node.js](https://nodejs.org/) v16 ou superior para executar. 18 | 19 | Abra o Prompt de comandos como Administrador e ative o Yarn por meio [do Corepack](https://nodejs.org/dist/latest/docs/api/corepack.html) executando o comando abaixo: 20 | 21 | ```sh 22 | corepack enable 23 | ``` 24 | 25 | Execute os comandos abaixo para instalar das dependências do projeto e execução dos testes: 26 | 27 | ```sh 28 | cd 4all-ref-2022-playwright 29 | yarn install 30 | npx playwright test 31 | ``` 32 | 33 | ## 📝 License 34 | 35 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 36 | 37 | --- 38 | 39 | Feito com 💜  por Fernando Papito 👋  [Meu linkedin](https://www.linkedin.com/in/papitoio/) 40 | 41 | [![Github](https://img.shields.io/badge/-Github-595D60?style=flat-square&logo=Github&logoColor=white&link=https://github.com/nayaraquino/)](https://github.com/papitorocks/) 42 | [![Linkedin](https://img.shields.io/badge/-LinkedIn-595D60?style=flat-square&logo=Linkedin&logoColor=white&link=https://www.linkedin.com/in/nayaraquino//)](https://www.linkedin.com/in/papitoio/) 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "login-app", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "devDependencies": { 7 | "@playwright/test": "^1.22.2" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /pages/login-page.ts: -------------------------------------------------------------------------------- 1 | import { Page, expect } from '@playwright/test' 2 | 3 | export class LoginPage { 4 | readonly page: Page 5 | 6 | constructor(page: Page) { 7 | this.page = page 8 | } 9 | 10 | async go() { 11 | await this.page.goto('https://login-app-qacademy.vercel.app/'); 12 | const title = this.page.locator('.App-header p') 13 | await expect(title).toHaveText('Login') 14 | } 15 | 16 | async sigIn(user: string, password: string) { 17 | await this.page.fill('input[placeholder$=usuário]', user) 18 | await this.page.fill('input[placeholder^=senha]', password) 19 | await this.page.click('button >> text=Entrar') 20 | } 21 | 22 | async userLoggedIn() { 23 | const modalMessage = this.page.locator('.swal2-html-container') 24 | await expect(modalMessage).toHaveText('Sua credenciais são validas :)') 25 | } 26 | 27 | async toastMessage(target: string) { 28 | const toastMessage = this.page.locator('div[role=status]') 29 | await expect(toastMessage).toHaveText(target) 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import { PlaywrightTestConfig, devices } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | reporter: [['html', { outputFolder: 'report' }]], 5 | forbidOnly: !!process.env.CI, 6 | retries: process.env.CI ? 2 : 0, 7 | use: { 8 | headless: false, 9 | trace: 'on-first-retry', 10 | screenshot: 'on', 11 | video: 'on' 12 | }, 13 | projects: [ 14 | { 15 | name: 'chromium', 16 | use: { ...devices['Desktop Chrome'] }, 17 | }, 18 | // { 19 | // name: 'firefox', 20 | // use: { ...devices['Desktop Firefox'] }, 21 | // }, 22 | // { 23 | // name: 'webkit', 24 | // use: { ...devices['Desktop Safari'] }, 25 | // }, 26 | ], 27 | }; 28 | export default config; -------------------------------------------------------------------------------- /tests/login.spec.ts: -------------------------------------------------------------------------------- 1 | import { test } from '@playwright/test' 2 | 3 | import { LoginPage } from '../pages/login-page' 4 | 5 | let loginPage: LoginPage 6 | 7 | test.beforeEach(async ({page})=> { 8 | loginPage = new LoginPage(page) 9 | }) 10 | 11 | test('deve logar com sucesso', async ({ page }) => { 12 | await loginPage.go() 13 | await loginPage.sigIn('qa', 'cademy') 14 | await loginPage.userLoggedIn() 15 | }) 16 | 17 | test('senha incorreta', async ({ page }) => { 18 | await loginPage.go() 19 | await loginPage.sigIn('qa', 'abc123') 20 | await loginPage.toastMessage('Oops! Credenciais inválidas :(') 21 | }) 22 | 23 | test('nome obrigatório', async ({page})=> { 24 | await loginPage.go() 25 | await loginPage.sigIn('', 'abc123') 26 | await loginPage.toastMessage('Informe o seu nome de usuário!') 27 | }) 28 | 29 | test('senha obrigatória', async ({ page }) => { 30 | await loginPage.go() 31 | await loginPage.sigIn('qa', '') 32 | await loginPage.toastMessage('Informe a sua senha secreta!') 33 | }) -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@playwright/test@^1.22.2": 6 | version "1.22.2" 7 | resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.22.2.tgz#b848f25f8918140c2d0bae8e9227a40198f2dd4a" 8 | integrity sha512-cCl96BEBGPtptFz7C2FOSN3PrTnJ3rPpENe+gYCMx4GNNDlN4tmo2D89y13feGKTMMAIVrXfSQ/UmaQKLy1XLA== 9 | dependencies: 10 | "@types/node" "*" 11 | playwright-core "1.22.2" 12 | 13 | "@types/node@*": 14 | version "18.0.0" 15 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" 16 | integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== 17 | 18 | playwright-core@1.22.2: 19 | version "1.22.2" 20 | resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.22.2.tgz#ed2963d79d71c2a18d5a6fd25b60b9f0a344661a" 21 | integrity sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q== 22 | --------------------------------------------------------------------------------