diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94e959a --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +.git/ +.metadata/ +.recommenders/ +ScreenshotsAutomation/ +ScreenshotsElementByNull/ +Logs/ +TestsAutomation/TestsAutomation.iml +TestsAutomation/.idea + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# Eclipse +.classpath +.project +.settings/ + +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# Maven +log/ +target/ + +# Inclusions +!lib/** + +# Compiled Files +*.class +bin/ +build/ +/bin1/ +java/build/** \ No newline at end of file diff --git a/README.md b/README.md index 7fc0c66..311a215 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,24 @@ -# Show me the code +# Project Title +Test QA -### # DESAFIO: +## Getting Started -Utilizando o App Cálculo Preço e Prazos Correios (https://play.google.com/store/apps/details?id=br.com.correios.calculaprecoprazo), crie testes automatizado para um dos dois fluxo (Novo Cálculo ou Cálculo Internacional) este fluxo deve ir até salvar o cálculo e consultar se o cálculo foi salvo, deve conter ao menos dois casos de sucesso e três casos de execeção (ex. validação de campos). +Run the file TestQA_execution.bat -Tambem é necessario responder ao arquivo "Prova" que esta no repo. +Print in the target / screenshot folder -### # Avaliação +### Prerequisites -Você será avaliado pela usabilidade, por respeitar o design e pela arquitetura dos testes. É esperado que você consiga explicar as decisões que tomou durante o desenvolvimento através de commits. +Maven (running in environment variables) +[Configurate Maven] +https://docs.wso2.com/display/IS323/Installing+Apache+Maven+on+Windows -* Ruby (gems a gosto) -* BDD, boa organização dos steps é um diferencial (ferramenta para utilizar o gherkin a seu criterio) -* Appium (ou qualquer outra, desde que justificado seu uso) -* Page Objects é um padrão obrigatório -* Uso do git +Java -### # Observações gerais +Android -Adicione um arquivo [README.md](http://README.md) com os procedimentos para executar o projeto. -Pedimos que trabalhe sozinho e não divulgue o resultado na internet. +Appium -Faça um fork desse desse repositório em seu Github e nos envie um Pull Request com o resultado, por favor informe por qual empresa você esta se candidatando. -### # Importante: não há prazo de entrega, faça com qualidade! - -# BOA SORTE! +#### Company +Everis Brasil diff --git a/Respostas_PROVA1.pdf b/Respostas_PROVA1.pdf new file mode 100644 index 0000000..561b10e Binary files /dev/null and b/Respostas_PROVA1.pdf differ diff --git a/TesteQA_execution.bat b/TesteQA_execution.bat new file mode 100644 index 0000000..84d0ace --- /dev/null +++ b/TesteQA_execution.bat @@ -0,0 +1,5 @@ +%cd% +mvn install +mvn test -Dcucumber.options=" --tags @CalculoInternacional" + +exit /b 0 \ No newline at end of file diff --git a/features/Correio_CalculoInternacional_Preco_Prazo.feature b/features/Correio_CalculoInternacional_Preco_Prazo.feature new file mode 100644 index 0000000..c2d4b8f --- /dev/null +++ b/features/Correio_CalculoInternacional_Preco_Prazo.feature @@ -0,0 +1,65 @@ +#language: pt +@CalculoInternacional +Funcionalidade: Calculo Internacional de preco e prazo para entrega + +@CalculoInternacionalValidoCEP +Cenario: Criacao de calculo internacional valido de preco e prazo por CEP + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo CEP Remente valido + E que informo um Pais Destinatario valido + E que informo uma cidade de destino valida + E que informo um Peso valido + Então o calculo deve ser salvo com sucesso + + +@CalculoInternacionalValidoCidadeEstado +Cenario: Criacao de calculo internacional valido de preco e prazo por Estado + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo um Estado Origem valido + E que informo um Cidade Origem valido + E que informo um Pais Destinatario valido + E que informo uma cidade de destino valida + E que informo um Peso valido + Então o calculo deve ser salvo com sucesso + + +@CalculoInternacionalCEPInvalido +Cenario: Valida calculo internacional CEP invalido + Dado que estou validando o calculo de Preco e Prazo internacional + E que informo CEP Remente invalido + Então o sistema deve apresentar mensagem de erro + +@CalculoInternacionalDadosObjeto +Cenario: Criar cadastro de Calculo Internacional com Dados Objeto + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo CEP Remente valido + E que informo um Pais Destinatario valido + E que informo uma cidade de destino valida + E que informo o dado do Objeto Nao Documento + E que o tipo envelope + E que informo um Peso valido + Então o calculo deve ser salvo com sucesso + +@CalculoInternacionalValidaPeso +Cenario: Criar cadastro de Calculo Internacional valida o Peso + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo CEP Remente valido + E que informo um Pais Destinatario valido + E que informo uma cidade de destino valida + E que informo o dado do Objeto Nao Documento + E que o tipo envelope + Então o sistema deve validar a falta do Peso + +@CalculoInternacionalValidaPaisInvalido +Cenario: Validar selecao de pais invalido Calculo Internacional + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo CEP Remente valido + E que informo um Pais Destinatario invalido + Então o sistema deve realizar a verificacao e apresentar mensagem de erro + +@CalculoInternacionalValidaDadosDestinoInvalido +Cenario: Validar dados invalidos de pais Destinatario + Dado que estou realizando o calculo de Preco e Prazo internacional + E que informo CEP Remente valido + E que informo o Destinatario invalido + Então o sistema deve realizar a verificacao e apresentar mensagem de erro informando sobre os dados invalidos diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..80213a1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + br.com.correios + CorreiosTest + 1.0-SNAPSHOT + + + + + io.appium + java-client + 6.0.0 + + + + info.cukes + cucumber-junit + 1.2.5 + test + + + info.cukes + cucumber-java + 1.2.5 + + + org.apache.commons + commons-io + 1.3.2 + + + junit + junit + 4.13-beta-2 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.1 + + + + \ No newline at end of file diff --git a/src/main/java/Core/CommonsBasePage.java b/src/main/java/Core/CommonsBasePage.java new file mode 100644 index 0000000..20468eb --- /dev/null +++ b/src/main/java/Core/CommonsBasePage.java @@ -0,0 +1,58 @@ +package Core; + +import io.appium.java_client.MobileElement; +import org.openqa.selenium.By; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static Core.DriverFactory.getDRIVER; + +public class CommonsBasePage { + + public void writefield(By by, String text) { + getDRIVER().findElement(by).sendKeys(text); + } + + public String getTextField(By by) { + return getDRIVER().findElement(by).getText().trim(); + } + + public static void clickElement(By by) { + getDRIVER().findElement(by).click(); + } + + public void clickMenuByText(String text) { + try { + clickElement(By.id("android:id/up")); + waitConditionElement(By.id("br.com.correios.calculaprecoprazo:id/textview_texto"), 10); + for (MobileElement botaomenu : getDRIVER().findElements(By.id("br.com.correios.calculaprecoprazo:id/textview_texto"))) { + if (text.equals(botaomenu.getText().trim())) { + botaomenu.click(); + break; + } + } + } catch (Exception e) { + System.out.println(e); + + } + } + + public boolean existsElementText(String texto) { + List elementos = getDRIVER().findElements(By.xpath("//*[@text='" + texto + "']")); + return elementos.size() > 0; + } + + public void waitConditionElement(By by, int Time) { + WebDriverWait wait = new WebDriverWait(getDRIVER(), Time); + wait.until(ExpectedConditions.presenceOfElementLocated(by)); + } + + public void esperar(long tempo) { + getDRIVER().manage().timeouts().implicitlyWait(tempo, TimeUnit.SECONDS); + + } + +} diff --git a/src/main/java/Core/DriverFactory.java b/src/main/java/Core/DriverFactory.java new file mode 100644 index 0000000..fe9acf4 --- /dev/null +++ b/src/main/java/Core/DriverFactory.java @@ -0,0 +1,36 @@ +package Core; + +import io.appium.java_client.MobileElement; +import io.appium.java_client.android.AndroidDriver; +import org.openqa.selenium.remote.DesiredCapabilities; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.concurrent.TimeUnit; + +public class DriverFactory { + + private static AndroidDriver DRIVER; + + public static AndroidDriver getDRIVER() { + return DRIVER; + } + + public static AndroidDriver createDriver() { + DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); + desiredCapabilities.setCapability("platformName", "Android"); + desiredCapabilities.setCapability("deviceName", "emulator-5554"); + desiredCapabilities.setCapability("automationName", "uiautomator2"); + desiredCapabilities.setCapability("appPackage", "br.com.correios.calculaprecoprazo"); + desiredCapabilities.setCapability("appActivity", "br.com.correios.calculaprecoprazo.activity.SplashScreenActivity"); + desiredCapabilities.setCapability("noReset", true); + try { + DRIVER = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + DRIVER.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); + return DRIVER; + } + +} diff --git a/src/main/java/Pages/DadosDoObjetoPage.java b/src/main/java/Pages/DadosDoObjetoPage.java new file mode 100644 index 0000000..e6876a4 --- /dev/null +++ b/src/main/java/Pages/DadosDoObjetoPage.java @@ -0,0 +1,28 @@ +package Pages; + +import Core.CommonsBasePage; +import org.openqa.selenium.By; + +public class DadosDoObjetoPage extends CommonsBasePage { + + public void getTipoDocumentoObjeto() { + waitConditionElement(By.xpath("//android.widget.RadioButton[contains(@text,'Não documento')]"),10); + clickElement(By.xpath("//android.widget.RadioButton[contains(@text,'Não documento')]")); + } + + public void getTipoEnveloper() { + clickElement(By.id("br.com.correios.calculaprecoprazo:id/rbEnvelope")); + } + + public void getPeso(String Peso) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/txt_peso"), Peso); + } + + public void btnCalcular() { + clickElement(By.id("br.com.correios.calculaprecoprazo:id/button_calc")); + } + + public String mensagemPesoInvalido() { + return getTextField(By.xpath("//android.widget.Toast[contains(@text,'Valor do peso inválido')]")); + } +} \ No newline at end of file diff --git a/src/main/java/Pages/MenuCalculoInternacionalPage.java b/src/main/java/Pages/MenuCalculoInternacionalPage.java new file mode 100644 index 0000000..29b5839 --- /dev/null +++ b/src/main/java/Pages/MenuCalculoInternacionalPage.java @@ -0,0 +1,11 @@ +package Pages; + +import Core.CommonsBasePage; + +public class MenuCalculoInternacionalPage extends CommonsBasePage { + + public void menuCalculoInternational() { + clickMenuByText("Novo cálculo"); + clickMenuByText("Cálculo Internacional"); + } +} \ No newline at end of file diff --git a/src/main/java/Pages/OrigemDestinoCorreioPage.java b/src/main/java/Pages/OrigemDestinoCorreioPage.java new file mode 100644 index 0000000..222a0b2 --- /dev/null +++ b/src/main/java/Pages/OrigemDestinoCorreioPage.java @@ -0,0 +1,76 @@ +package Pages; + +import Core.CommonsBasePage; +import org.junit.Assert; +import org.openqa.selenium.By; + +public class OrigemDestinoCorreioPage extends CommonsBasePage { + + public void getCEPEstadoOrigem(String cepEstadoOrigem) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/txt_cep_ori"), cepEstadoOrigem); + } + + public void getCEPEstadoOrigemInvalido(String cepEstadoOrigemInvalido) { + waitConditionElement(By.id("br.com.correios.calculaprecoprazo:id/txt_cep_ori"),10); + writefield(By.id("br.com.correios.calculaprecoprazo:id/txt_cep_ori"), cepEstadoOrigemInvalido); + } + + public void btnProximoPasso() { + clickElement(By.id("br.com.correios.calculaprecoprazo:id/button_prox")); + } + + public void getPaisDestinatario(String PaisDestinatario) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edPais"), PaisDestinatario); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/btn_busca_pais")); + clickElement(By.xpath("//android.widget.TextView[contains(@text,'PORTUGAL')]")); + + } + + public void getCidadeDestinatario(String CidadeDestinatario) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edMuni"), CidadeDestinatario); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/btn_busca_muni")); + clickElement(By.xpath("//android.widget.TextView[contains(@text,'LISBOA')]")); + } + + public String getMensagemCEP() { + return getTextField(By.xpath("//android.widget.Toast[contains(@text,'CEP não encontrado.')]")); + } + + public void getEstadoOrigem(String CidadeOrigem) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edEstado"), CidadeOrigem); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/btn_busca_estado")); + waitConditionElement(By.xpath("//android.widget.TextView[contains(@text,'São Paulo')]"),10); + clickElement(By.xpath("//android.widget.TextView[contains(@text,'São Paulo')]")); + + } + + public void getCidadeOrigem(String EstadoOrigem) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edMuni"), EstadoOrigem); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/btn_busca_muni")); + waitConditionElement(By.xpath("//android.widget.TextView[contains(@text,'São Carlos')]"),10); + clickElement(By.xpath("//android.widget.TextView[contains(@text,'São Carlos')]")); + } + + public void getPaisDestinatarioInvalido(String PaisDestinatarioInvalido) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edPais"), PaisDestinatarioInvalido); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/btn_busca_pais")); + } + + public void popupVazioSelectPaisDestinatario() { + boolean textVazio = existsElementText(" "); + Assert.assertEquals("XXXXX", textVazio); + } + + public void writePaisInvalido(String PaisDestinatarioInvalido) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edPais"), PaisDestinatarioInvalido); + } + + public void writeCidadeDestinatarioInvalido(String CidadeDestinatarioInvalido) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/edMuni"), CidadeDestinatarioInvalido); + } + + + public String mensagemDadosDestinatarioInvalido() { + return getTextField(By.xpath("//android.widget.Toast[contains(@text,'É necessário escolher um país e uma cidade.')]")); + } +} \ No newline at end of file diff --git a/src/main/java/Pages/ResultadoDoCalculoPage.java b/src/main/java/Pages/ResultadoDoCalculoPage.java new file mode 100644 index 0000000..fdb6167 --- /dev/null +++ b/src/main/java/Pages/ResultadoDoCalculoPage.java @@ -0,0 +1,21 @@ +package Pages; + +import Core.CommonsBasePage; +import org.openqa.selenium.By; + +public class ResultadoDoCalculoPage extends CommonsBasePage { + + public void clickSalveCalculo() { + waitConditionElement(By.id("br.com.correios.calculaprecoprazo:id/action_salvar"),10); + clickElement(By.id("br.com.correios.calculaprecoprazo:id/action_salvar")); + + } + + public static void clickOkCalculo() { + clickElement(By.id("br.com.correios.calculaprecoprazo:id/bt_ok")); + } + + public void getNomeCalculo(String nomeCalculo) { + writefield(By.id("br.com.correios.calculaprecoprazo:id/ed_nome_calculo"), nomeCalculo); + } +} diff --git a/src/main/resources/CalculoPrecoEPrazoCorreios.apk b/src/main/resources/CalculoPrecoEPrazoCorreios.apk new file mode 100644 index 0000000..5c2467f Binary files /dev/null and b/src/main/resources/CalculoPrecoEPrazoCorreios.apk differ diff --git a/src/test/java/runner/TestRunner.java b/src/test/java/runner/TestRunner.java new file mode 100644 index 0000000..7625d3a --- /dev/null +++ b/src/test/java/runner/TestRunner.java @@ -0,0 +1,36 @@ +package runner; + +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions( + monochrome = true, + features = "features" + , glue = + "stepsDefinition" + + , tags = + //"@CalculoInternacionalValidaDadosDestinoInvalido" + //"@CalculoInternacionalValidaDadosDestinoInvalido" + //"@CalculoInternacionalValidaPaisInvalido" + "@CalculoInternacional" + // "@CalculoInternacionalValidoCEP" + //"@CalculoInternacionalValidoCidadeEstado" + //"@CalculoInternacionalCEPInvalido" + // "@CalculoInternacionalDadosObjeto" + // "@CalculoInternacionalValidaPeso" + + + , plugin = { + "pretty", + "junit:target/cucumber.xml" +} + + +) + +public class TestRunner { + +} diff --git a/src/test/java/stepsDefinition/CorreioCalculoInternacionalStep.java b/src/test/java/stepsDefinition/CorreioCalculoInternacionalStep.java new file mode 100644 index 0000000..7d181ee --- /dev/null +++ b/src/test/java/stepsDefinition/CorreioCalculoInternacionalStep.java @@ -0,0 +1,134 @@ +package stepsDefinition; + +import Pages.DadosDoObjetoPage; +import Pages.MenuCalculoInternacionalPage; +import Pages.OrigemDestinoCorreioPage; +import Pages.ResultadoDoCalculoPage; +import cucumber.api.java.pt.Dado; +import cucumber.api.java.pt.Entao; +import org.junit.Assert; + + +public class CorreioCalculoInternacionalStep { + private OrigemDestinoCorreioPage origemDestinoCorreioPage = new OrigemDestinoCorreioPage(); + private MenuCalculoInternacionalPage menuCalculoInternacionalPage = new MenuCalculoInternacionalPage(); + private DadosDoObjetoPage dadosDoObjetoPage = new DadosDoObjetoPage(); + private ResultadoDoCalculoPage resultadoDoCalculoPage = new ResultadoDoCalculoPage(); + + @Dado("^que estou realizando o calculo de Preco e Prazo internacional$") + public void que_estou_realizando_o_calculo_de_Preco_e_Prazo_internacional() { + menuCalculoInternacionalPage.menuCalculoInternational(); + + } + + @Dado("^que informo CEP Remente valido$") + public void que_informo_CEP_Remente_valido() { + origemDestinoCorreioPage.getCEPEstadoOrigem("04350000"); + origemDestinoCorreioPage.btnProximoPasso(); + + } + + @Dado("^que informo CEP Remente invalido$") + public void que_informo_CEP_Remente_invalido() { + origemDestinoCorreioPage.getCEPEstadoOrigemInvalido("00000000"); + resultadoDoCalculoPage.esperar(5); + origemDestinoCorreioPage.btnProximoPasso(); + + } + + + @Dado("^que informo um Pais Destinatario valido$") + public void que_informo_um_Pais_Destinatario_valido() { + origemDestinoCorreioPage.getPaisDestinatario("PORTUGAL"); + } + + @Dado("^que informo uma cidade de destino valida$") + public void que_informo_uma_cidade_de_destino_valida() { + resultadoDoCalculoPage.esperar(10); + origemDestinoCorreioPage.getCidadeDestinatario("LISBOA"); + origemDestinoCorreioPage.btnProximoPasso(); + + } + + @Dado("^que informo um Peso valido$") + public void que_informo_um_Peso_valido() { + resultadoDoCalculoPage.esperar(5); + dadosDoObjetoPage.getPeso("5"); + dadosDoObjetoPage.btnCalcular(); + } + + @Entao("^o calculo deve ser salvo com sucesso$") + public void o_calculo_deve_ser_salvo_com_sucesso() { + resultadoDoCalculoPage.esperar(5); + resultadoDoCalculoPage.clickSalveCalculo(); + resultadoDoCalculoPage.esperar(20); + resultadoDoCalculoPage.getNomeCalculo("CALCULO AUTOMACAO"); + resultadoDoCalculoPage.clickOkCalculo(); +// Assert.assertEquals("Cálculo salvo com sucesso.", ResultadoDoCalculoPage.getMensagemCalculoSalvo()); + } + + @Entao("^o sistema deve apresentar mensagem de erro$") + public void o_sistema_deve_apresentar_mensagem_de_erro() { + Assert.assertEquals("CEP não encontrado.", origemDestinoCorreioPage.getMensagemCEP()); + + } + + @Dado("^que informo o dado do Objeto Nao Documento$") + public void que_informo_o_dado_do_Objeto_Nao_Documento() { + dadosDoObjetoPage.esperar(10); + dadosDoObjetoPage.getTipoDocumentoObjeto(); + + } + + @Dado("^que o tipo envelope$") + public void que_o_tipo_envelope() { + dadosDoObjetoPage.getTipoEnveloper(); + } + + @Entao("^o sistema deve validar a falta do Peso$") + public void o_sistema_deve_validar_a_falta_do_Peso() { + dadosDoObjetoPage.btnCalcular(); + resultadoDoCalculoPage.esperar(100); + Assert.assertEquals("Valor do peso inválido", dadosDoObjetoPage.mensagemPesoInvalido()); + } + + @Dado("^que informo um Estado Origem valido$") + public void que_informo_um_Estado_Origem_valido() { + origemDestinoCorreioPage.getEstadoOrigem("Sao Paulo"); + + } + + @Dado("^que informo um Cidade Origem valido$") + public void que_informo_um_Cidade_Origem_valido() { + origemDestinoCorreioPage.getCidadeOrigem("Sao Carlos"); + origemDestinoCorreioPage.btnProximoPasso(); + } + + @Dado("^que estou validando o calculo de Preco e Prazo internacional$") + public void que_estou_validando_o_calculo_de_Preco_e_Prazo_internacional() { + menuCalculoInternacionalPage.menuCalculoInternational(); + } + + @Dado("^que informo um Pais Destinatario invalido$") + public void que_informo_um_Pais_Destinatario_invalido() throws Throwable { + origemDestinoCorreioPage.getPaisDestinatarioInvalido("XXXXXX"); + } + + @Entao("^o sistema deve realizar a verificacao e apresentar mensagem de erro$") + public void o_sistema_deve_realizar_a_verificacao_e_apresentar_mensagem_de_erro() { + origemDestinoCorreioPage.popupVazioSelectPaisDestinatario(); + } + + @Dado("^que informo Dado de Destinatario invalido$") + public void que_informo_Dado_de_Destinatario_invalido() { + origemDestinoCorreioPage.writePaisInvalido("YYYYYYY"); + origemDestinoCorreioPage.writeCidadeDestinatarioInvalido("ZZZZZZ"); + origemDestinoCorreioPage.btnProximoPasso(); + } + + @Entao("^o sistema deve realizar a verificacao e apresentar mensagem de erro informando sobre os dados invalidos$") + public void o_sistema_deve_realizar_a_verificacao_e_apresentar_mensagem_de_erro_informando_sobre_os_dados_invalidos() { + Assert.assertEquals("É necessário escolher um país e uma cidade.", origemDestinoCorreioPage.mensagemDadosDestinatarioInvalido()); + } +} + diff --git a/src/test/java/stepsDefinition/Hooks.java b/src/test/java/stepsDefinition/Hooks.java new file mode 100644 index 0000000..06bf070 --- /dev/null +++ b/src/test/java/stepsDefinition/Hooks.java @@ -0,0 +1,43 @@ +package stepsDefinition; + +import Core.DriverFactory; +import cucumber.api.Scenario; +import cucumber.api.java.After; +import cucumber.api.java.Before; +import org.apache.commons.io.FileUtils; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.concurrent.TimeUnit; + +public class Hooks extends DriverFactory { + + @Before + public void inicializaAppium() { + DriverFactory.createDriver(); + } + + @After(order = 0) + public void turnOffDriver() { + getDRIVER().manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); + getDRIVER().resetApp(); + getDRIVER().quit(); + } + + @After(order = 1) + public void TakeScreenShot(Scenario scenario) { + getDRIVER().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); + SimpleDateFormat formatDate = new SimpleDateFormat("dd-MM-yyyy-hh-mm-ss"); + Calendar date = Calendar.getInstance(); + try { + File imagem = ((TakesScreenshot) getDRIVER()).getScreenshotAs(OutputType.FILE); + FileUtils.copyFile(imagem, new File("target/screenshots/" + scenario.getName() + " " +formatDate.format(date.getTime()) + ".png")); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file