├── .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 | [](https://github.com/papitorocks/)
42 | [](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 |
--------------------------------------------------------------------------------