Atualmente trabalho com Nightwatch + Cucumber e consigo realizar a criação de cenários de teste onde consigo reaproveitar o código sem muito trabalho. Por exemplo:
//Arquivo de Features:
Funcionalidade: Possibilitar a criação, visualização e edição de templates
Contexto:
Dado que acesse o Ambiente
Quando preencho o campo email
E preencho o campo password
Quando clico em sign in
Entao valido que sou direcionado a tela de Nova organização
E acesso a organizacao
Entao valido que acessei a organizacao
@Templates-01
Cenário: Visualizar os templates disponíveis
Quando valido se a aba Templates é exibida
E acesso a aba Templates
Entao valido que sou direcionado a aba Templates
@Templates-03
Cenário: Descartar um template
Quando valido se a aba Templates é exibida
E acesso a aba Templates
E valido que sou direcionado a aba Templates
E clico em Novo Template
E clico em Descartar
E clico em Descartar novamente para confirmar
Então valido se foi descartado corretamente
//Arquivo StepDefinition
const {client} = require('nightwatch-api');
const templates = client.page.templatesPage();
const {Given, When, Then} = require('cucumber');
Given(/^valido se a aba Templates é exibida$/, async () => {
await templates.validaBotaoTemplates()
});
When(/^acesso a aba Templates$/, async () => {
await templates.clicaBotaoTemplates()
});
When(/^clico em editar Template$/, async () => {
await templates.clicaBotaoMenuTemplate()
});
When(/^altero o nome do Template "([^"]*)"$/, async function (nome) {
await templates.preencherNomeTemplate(nome)
});
Then(/^valido que sou direcionado a aba Templates$/, async () => {
await templates.validaAbaTemplates()
});
//Arquivo Page-objects
//const faker = require('faker-br')
module.exports = {
commands: [{
getElementsLogin() {
return require('../elements/loginElements')
},
getElementsOrganizacoes() {
return require('../elements/organizacoesElements')
},
getElementsTemplates() {
return require('../elements/templatesElements')
},
async validaBotaoTemplates() {
return await client
.useCss()
.waitForElementVisible("#tab--template", 10000)
.assert.visible("#tab--template")
},
async clicaBotaoTemplates() {
return await client
.useCss()
.click("#tab--template")
},
async validaAbaTemplates() {
return await client
.useCss()
.waitForElementVisible("#filter--template", 10000)
.assert.visible("#filter--template")
},
async clicaBotaoNovoTemplate() {
return await client
.useCss()
.click("#button--new-template")
},
async clicaBotaoMenuTemplate() {
return await client
.useCss()
.waitForElementVisible("#button--edit", 10000)
.click("#button--edit")
},
async preencherNomeTemplate(nome) {
return await client
.useCss()
.waitForElementVisible("#text-title", 10000)
.setValue("#text-title", nome)
},
async selecionaEscalaConf(escala) {
return await client
.useXpath()
.waitForElementVisible(escala, 10000)
.click(escala)
},
async validaNomeEscala() {
return await client
.useCss()
.assert.equals("#radio--grading.role", "radiogroup")
},
Perceba que na funcionalidade eu já tenho todo o fluxo de login e acesso ao sistema, logo em seguida crio os cenários que irão executar os processos definidos no PageObjects e step.
Portanto, se eu quiser que o sistema execute o processo descrito em "acesso a aba Templates", basta copiar apenas essa linha que ele irá chamar todo o processo de código já criado anteriormente.
É possível criar o mesmo cenário sem a utilização do cucumber com o Cypress, reaproveitando código já digitado? Pois tenho na mesma feature, vários cenários de testes à serem executados e o preenchimento de todo o fluxo de login por exemplo gera um código enorme.
Muito obrigado!!