Skip to content

Commit

Permalink
Refatoração de códigos e inserção do README
Browse files Browse the repository at this point in the history
  • Loading branch information
Fernando Barbosa committed Jun 11, 2022
1 parent 72e9b87 commit 8b7511a
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 34 deletions.
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Lojinha Mobile Automação

Esse é um reporsitório que contem a automação do teste de "Validação do valor do produto não permitido" do App Lojinha, criado em acompanhamento com as aulas do Módulo 11 do Programa de Testes e Qualidade de Software (PTQS), curso criado e ministrado por [Julio de Lima](https://github.com/juliointest).
Os sub-tópicos abaixo descrevem algumas decisões tomadas na estruturação do projeto.

## Tecnologias Utilizadas

- Java
https://www.oracle.com/br/java/technologies/javase/javase8u211-later-archive-downloads.html

- Appium
https://mvnrepository.com/artifact/io.appium/java-client/8.1.1

- JUnit
https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.9.0-M1


## Testes Automatizados

Testes para validar o valor do produto invalido no App Lojinha, que estão vinculados diretamente a regra de negócio que diz que o valor do produto deve estar entre R$0,01 e R$7.000,00.

## Notas Gerais

- Sempre utilizamos a anotação Before Each para capturar o token que será utilizado posteriormente nos métodos de test
- Nesse projeto fazemos uso do JUnit 5, o que nos dá a possibilidade de usar a anotação DisplayName para dar descrições em portugues para nossos testes
65 changes: 31 additions & 34 deletions src/test/java/modulos/produto/ProdutoTest.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
package modulos.produto;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import telas.LoginTela;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.Remote;
import java.util.concurrent.TimeUnit;


@DisplayName("Testes Mobile do Módulo de Produto")
public class ProdutoTest {
@DisplayName("Validação do Valor de Produto Não Permitido")
@Test
public void testValidacaoDoValorDeProdutoNaoPermitido () throws MalformedURLException {
// Abrir o App

private WebDriver app;

@BeforeEach
public void beforeEach() throws MalformedURLException {

DesiredCapabilities capacidades = new DesiredCapabilities();
capacidades.setCapability("deviceName", "Xiaomi de Fernando");
capacidades.setCapability("platform", "Android");
Expand All @@ -27,35 +27,32 @@ public void testValidacaoDoValorDeProdutoNaoPermitido () throws MalformedURLExce
capacidades.setCapability("appActivity", "com.lojinha.ui.MainActivity");
capacidades.setCapability("app", "C:\\Users\\ferna\\Documents\\lojinha-nativa.apk");

WebDriver app = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capacidades);
app.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);


// Fazer Login
app.findElement(By.id("com.lojinha:id/user")).click();
app.findElement(By.id("com.lojinha:id/user")).findElement(By.id("com.lojinha:id/editText")).sendKeys("admin");

app.findElement(By.id("com.lojinha:id/password")).click();
app.findElement(By.id("com.lojinha:id/password")).findElement(By.id("com.lojinha:id/editText")).sendKeys("admin");

app.findElement(By.id("com.lojinha:id/loginButton")).click();
this.app = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capacidades);
this.app.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}

// Abrir o formulário de novo produto
app.findElement(By.id("com.lojinha:id/floatingActionButton")).click();
@DisplayName("Validação do Valor de Produto Não Permitido")
@Test
public void testValidacaoDoValorDeProdutoNaoPermitido () {

// Cadastrar um produto com valor inválido
app.findElement(By.id("com.lojinha:id/productName")).click();
app.findElement(By.id("com.lojinha:id/productName")).findElement(By.id("com.lojinha:id/editText")).sendKeys("Notebook");
app.findElement(By.id("com.lojinha:id/productValue")).click();
app.findElement(By.id("com.lojinha:id/productValue")).findElement(By.id("com.lojinha:id/editText")).sendKeys("750000");
app.findElement(By.id("com.lojinha:id/productColors")).click();
app.findElement(By.id("com.lojinha:id/productColors")).findElement(By.id("com.lojinha:id/editText")).sendKeys("Vermelho");
String mensagemApresentada = new LoginTela(app)
.preencherUsuario("admin")
.preencherSenha("admin")
.submeterLogin()
.abrirTelaAdicaoProduto()
.preencherNomeProduto("Notebook")
.preencherValorProduto("750000")
.preencherCoresProduto("Vermelho")
.submissaoComErro()
.obterMensagemDeErro();

app.findElement(By.id("com.lojinha:id/saveButton")).click();
Assertions.assertEquals("O valor do produto deve estar entre R$ 0,01 e R$ 7.000,00", mensagemApresentada);

}

// Validar que a mensagem de valor invalido foi apresentada
String mensagenApresentada = app.findElement(By.xpath("//android.widget.Toast")).getText();
Assertions.assertEquals("O valor do produto deve estar entre R$ 0,01 e R$ 7.000,00", mensagenApresentada);
@AfterEach
public void afterEach() {
app.quit();
}

}
18 changes: 18 additions & 0 deletions src/test/java/telas/BaseTela.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package telas;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class BaseTela {
protected WebDriver app;

public BaseTela(WebDriver app) {

this.app = app;
}

public String capturarToast() {
return app.findElement(By.xpath("//android.widget.Toast")).getText();

}
}
39 changes: 39 additions & 0 deletions src/test/java/telas/FormularioAdicaoDeProdutosTela.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package telas;

import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class FormularioAdicaoDeProdutosTela extends BaseTela {

public FormularioAdicaoDeProdutosTela(WebDriver app) {
super(app);
}

public FormularioAdicaoDeProdutosTela preencherNomeProduto(String produtoNome) {
app.findElement(By.id("com.lojinha:id/productName")).click();
app.findElement(By.id("com.lojinha:id/productName")).findElement(By.id("com.lojinha:id/editText")).sendKeys(produtoNome);
return this;
}

public FormularioAdicaoDeProdutosTela preencherValorProduto(String valorProduto) {
app.findElement(By.id("com.lojinha:id/productValue")).click();
app.findElement(By.id("com.lojinha:id/productValue")).findElement(By.id("com.lojinha:id/editText")).sendKeys(valorProduto);
return this;
}

public FormularioAdicaoDeProdutosTela preencherCoresProduto(String cores) {
app.findElement(By.id("com.lojinha:id/productColors")).click();
app.findElement(By.id("com.lojinha:id/productColors")).findElement(By.id("com.lojinha:id/editText")).sendKeys(cores);
return this;
}

public FormularioAdicaoDeProdutosTela submissaoComErro(){
app.findElement(By.id("com.lojinha:id/saveButton")).click();
return this;
}

public String obterMensagemDeErro() {
return capturarToast();
}
}
15 changes: 15 additions & 0 deletions src/test/java/telas/ListaDeProdutosTela.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package telas;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class ListaDeProdutosTela extends BaseTela {

public ListaDeProdutosTela (WebDriver app) {
super (app);
}
public FormularioAdicaoDeProdutosTela abrirTelaAdicaoProduto () {
app.findElement(By.id("com.lojinha:id/floatingActionButton")).click();
return new FormularioAdicaoDeProdutosTela(app);
}
}
29 changes: 29 additions & 0 deletions src/test/java/telas/LoginTela.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package telas;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class LoginTela extends BaseTela {

public LoginTela(WebDriver app) {
super (app);
}

public LoginTela preencherUsuario(String usuario) {
app.findElement(By.id("com.lojinha:id/user")).click();
app.findElement(By.id("com.lojinha:id/user")).findElement(By.id("com.lojinha:id/editText")).sendKeys(usuario);
return this;
}

public LoginTela preencherSenha(String senha) {
app.findElement(By.id("com.lojinha:id/password")).click();
app.findElement(By.id("com.lojinha:id/password")).findElement(By.id("com.lojinha:id/editText")).sendKeys(senha);
return this;
}

public ListaDeProdutosTela submeterLogin() {
app.findElement(By.id("com.lojinha:id/loginButton")).click();
return new ListaDeProdutosTela(app);
}

}

0 comments on commit 8b7511a

Please sign in to comment.