diff --git a/pom.xml b/pom.xml
index 450d521..2d0c71d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,12 +10,12 @@
http://maven.apache.org
jar
Lippia-web-example-project
- 3.1.2.2
-
-
+
Lippia-web-example-project
UTF-8
+
@Smoke
testng.xml
diff --git a/src/main/java/com/crowdar/examples/pages/GoogleHomePage.java b/src/main/java/com/crowdar/examples/pages/GoogleHomePage.java
deleted file mode 100644
index 3e46fab..0000000
--- a/src/main/java/com/crowdar/examples/pages/GoogleHomePage.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.crowdar.examples.pages;
-
-import org.openqa.selenium.By;
-import org.openqa.selenium.remote.RemoteWebDriver;
-
-public class GoogleHomePage extends PageBaseGoogle {
-
- private final String INPUT_SEARCH_XPATH = "//input[@class='gLFyf gsfi']";
- private final String SEARCH_BUTTON_NAME = "btnK";
-
- public GoogleHomePage(RemoteWebDriver driver) {
- super(driver);
- this.url = ""; //here you can define the custom paths For example:"/search" --> www.googe.com/search
- }
-
- public void go() {
- navigateToCompleteURL();
- }
-
- public void enterSearchCriteria(String text) {
- completeField(By.xpath(INPUT_SEARCH_XPATH), text);
- }
-
- public void clickSearchButton() {
- clickElement(By.name(SEARCH_BUTTON_NAME));
- }
-
-}
diff --git a/src/main/java/com/crowdar/examples/pages/GoogleSearchResultPage.java b/src/main/java/com/crowdar/examples/pages/GoogleSearchResultPage.java
deleted file mode 100644
index df43593..0000000
--- a/src/main/java/com/crowdar/examples/pages/GoogleSearchResultPage.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.crowdar.examples.pages;
-
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.remote.RemoteWebDriver;
-
-public class GoogleSearchResultPage extends PageBaseGoogle {
-
- private WebElement stats() {
- return getWebElement(By.id("rcnt"));
- }
-
- public GoogleSearchResultPage(RemoteWebDriver driver) {
- super(driver);
- this.url = ""; //here you can define the custom paths For example:"/search" --> www.googe.com/search
- }
-
- public String getStats() {
- return stats().getText();
- }
-
-}
diff --git a/src/main/java/com/crowdar/examples/pages/PageBaseGoogle.java b/src/main/java/com/crowdar/examples/pages/PageBaseGoogle.java
deleted file mode 100644
index 347367a..0000000
--- a/src/main/java/com/crowdar/examples/pages/PageBaseGoogle.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.crowdar.examples.pages;
-
-import com.crowdar.core.pageObjects.PageBaseWeb;
-import org.openqa.selenium.remote.RemoteWebDriver;
-
-public class PageBaseGoogle extends PageBaseWeb {
-
- public PageBaseGoogle(RemoteWebDriver driver) {
- super(driver);
- BASE_URL = "http://www.google.com.ar";
- }
-
-
-}
diff --git a/src/main/java/com/crowdar/examples/pages/PageBaseStore.java b/src/main/java/com/crowdar/examples/pages/PageBaseStore.java
new file mode 100644
index 0000000..577c5b0
--- /dev/null
+++ b/src/main/java/com/crowdar/examples/pages/PageBaseStore.java
@@ -0,0 +1,15 @@
+package com.crowdar.examples.pages;
+
+import com.crowdar.core.pageObjects.PageBaseWeb;
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+@SuppressWarnings("deprecation")
+public class PageBaseStore extends PageBaseWeb {
+
+ public PageBaseStore(RemoteWebDriver driver) {
+ super(driver);
+ BASE_URL = "http://automationpractice.com";
+ }
+
+
+}
diff --git a/src/main/java/com/crowdar/examples/pages/StoreHomePage.java b/src/main/java/com/crowdar/examples/pages/StoreHomePage.java
new file mode 100644
index 0000000..e752bfa
--- /dev/null
+++ b/src/main/java/com/crowdar/examples/pages/StoreHomePage.java
@@ -0,0 +1,20 @@
+package com.crowdar.examples.pages;
+
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+public class StoreHomePage extends PageBaseStore {
+
+
+ @SuppressWarnings("deprecation")
+ public StoreHomePage(RemoteWebDriver driver) {
+ super(driver);
+ this.url = "";
+ }
+
+ @SuppressWarnings("deprecation")
+ public void go() {
+ navigateToCompleteURL();
+ }
+
+
+}
diff --git a/src/main/java/com/crowdar/examples/pages/StoreLoginPage.java b/src/main/java/com/crowdar/examples/pages/StoreLoginPage.java
new file mode 100644
index 0000000..f28b5c8
--- /dev/null
+++ b/src/main/java/com/crowdar/examples/pages/StoreLoginPage.java
@@ -0,0 +1,57 @@
+package com.crowdar.examples.pages;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.testng.Assert;
+
+public class StoreLoginPage extends PageBaseStore {
+
+ private final String INPUT_EMAIL_ID = "email";
+ private final String INPUT_PASSWORD_ID = "passwd";
+ private final String MSG_LOGIN_FAIL = ".//li[contains(text(),'Authentication failed.')]";
+ private final String ACCOUNT_INFO_MESSAGE = ".//p[@class='info-account']";
+
+
+ public StoreLoginPage(RemoteWebDriver driver) {
+ super(driver);
+ this.url = ""; // here you can define the custom paths For example:"/search" -->
+ // www.googe.com/search
+ }
+
+ @SuppressWarnings("deprecation")
+ public void completeLoginInfo(String type, String value) {
+ switch (type) {
+ case "email": {
+ completeField(By.id(INPUT_EMAIL_ID), value);
+ break;
+ }
+ case "password": {
+ completeField(By.id(INPUT_PASSWORD_ID), value);
+ break;
+ }
+ default:
+ break;
+ }
+
+ }
+
+ @SuppressWarnings("deprecation")
+ public void verifyResultLogin(String result) {
+ switch (result) {
+ case "login incorrecto": {
+ Assert.assertTrue(isElementVisible(By.xpath(MSG_LOGIN_FAIL)));
+ break;
+ }
+ case "login correcto": {
+ Assert.assertTrue(isElementVisible(By.xpath(ACCOUNT_INFO_MESSAGE)));
+ break;
+ }
+ default:
+ break;
+ }
+
+ }
+
+
+
+}
diff --git a/src/main/java/com/crowdar/examples/pages/StoreProductsPage.java b/src/main/java/com/crowdar/examples/pages/StoreProductsPage.java
new file mode 100644
index 0000000..746e053
--- /dev/null
+++ b/src/main/java/com/crowdar/examples/pages/StoreProductsPage.java
@@ -0,0 +1,171 @@
+package com.crowdar.examples.pages;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.testng.Assert;
+
+public class StoreProductsPage extends PageBaseStore {
+ // home
+ private final String BUTTON_SIGNIN_CSS_SELECTOR = "#header > div.nav > div > div > nav > div.header_user_info > a";
+ // login
+ private final String BUTTON_SIGNIN_ID = "SubmitLogin";
+ private final String ACCOUNT_INFO_MESSAGE = ".//p[@class='info-account']";
+ // buy
+ private final String T_SHIRTS_BUTTON = "#my-account >div#page>div>#header>div>div>div>#block_top_menu>ul>li:nth-child(3)>a";
+ private final String ADD_TO_CART = "div>#center_column>ul>li>div>div>div>a.button.ajax_add_to_cart_button.btn.btn-default";
+ private final String T_SHIRTS_TITLE = ".//span[text()[contains(.,'T-shirts ')]]";
+ private final String ADDED_MODAL_VISIBLE = ".//div[@id='layer_cart'][contains(@style,'display: block')]";
+ private final String PROCEED_CHECKOUT_ADDED_BUTTON = "div#layer_cart>div.clearfix>div.layer_cart_cart>div.button-container>a";
+ private final String SUMMARY_TITLE = ".//h1[@id='cart_title']";
+ private final String PROCEED_CHECKOUT_SUMMARY_BUTTON = "div>#columns>div>#center_column>p>a";
+ private final String ADDRESS_TITLE = ".//label[@for='id_address_delivery']";
+ private final String PROCEED_CHECKOUT_ADDRESS_BUTTON = ".//button[@name='processAddress']";
+ private final String SHIPPING_TITLE = ".//h1[text()= 'Shipping'][@class='page-heading']";
+ private final String SHIPPING_AGREE_CHECKBOX = ".//label[@for= 'cgv']";
+ private final String PROCEED_CHECKOUT_SHIPPING_BUTTON = ".//button[@name='processCarrier']";
+ private final String PAY_BANK_WIRE_BUTTON = ".//a[@class= 'bankwire'][@title='Pay by bank wire']";
+ private final String ORDER_SUMMARY_TITLE = ".//h1[normalize-space(text())='Order confirmation'][@class='page-heading']";
+ private final String CONFIRM_ORDER_BUTTON = ".//span[normalize-space(text())='I confirm my order']/ancestor::button";
+ private final String PAYMENT_TITLE = ".//span[text()[contains(.,'Your payment method')]]";
+ private final String BANK_WIRE_TITLE = ".//span[text()[contains(.,' Bank-wire payment.')]]";
+
+ private int orderProceedWizard = 0;
+ private int orderSignIn = 0;
+
+ @SuppressWarnings("deprecation")
+ public StoreProductsPage(RemoteWebDriver driver) {
+ super(driver);
+ this.url = ""; // here you can define the custom paths For example:"/search" -->
+ // www.googe.com/search
+ }
+
+
+ @SuppressWarnings("deprecation")
+ public void clickButton(String button) {
+ System.out.println("boton presionado: " + button);
+ switch (button) {
+ case ("Sign In"): {
+ if (this.orderSignIn == 0) {
+ this.orderSignIn++;
+ clickElement(By.cssSelector(BUTTON_SIGNIN_CSS_SELECTOR));
+ } else if (this.orderSignIn == 1) {
+ clickElement(By.id(BUTTON_SIGNIN_ID));
+ }
+
+ break;
+ }
+ case ("T-Shirts"): {
+ clickElement(By.cssSelector(T_SHIRTS_BUTTON));
+ break;
+ }
+ case ("Add to cart"): {
+ try {
+ Actions actions = new Actions(driver); // hover
+ WebElement addProduct = driver.findElement(By.xpath(".//div[@class='product-container']/ancestor::li"));
+ actions.moveToElement(addProduct).perform();
+ System.out.println("HOVER producto");
+
+ WebElement addButton = driver.findElement(By.cssSelector(ADD_TO_CART));
+ actions.moveToElement(addButton);
+ actions.click().build().perform();
+
+ System.out.println("CLICK: " + button);
+ } catch (Exception e) {
+ System.out.println("error: " + e.getMessage());
+ }
+
+ break;
+ }
+ case ("I agree to the terms"): {
+ clickElement(By.xpath(SHIPPING_AGREE_CHECKBOX));
+ break;
+ }
+ case ("Pay by bank wire"): {
+ clickElement(By.xpath(PAY_BANK_WIRE_BUTTON));
+ break;
+ }
+ case ("I confirm my order"): {
+ clickElement(By.xpath(CONFIRM_ORDER_BUTTON));
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public void clickProceedCheckoutButton() {
+ this.orderProceedWizard++; // suma a medida que se llama el metodo para pasar por todas las pantallas en
+ // orden
+ System.out.println("orden de flujo para wizard: " + this.orderProceedWizard);
+ switch (this.orderProceedWizard) {
+ case (1): {
+ clickElement(By.cssSelector(PROCEED_CHECKOUT_ADDED_BUTTON));
+ break;
+ }
+ case (2): {
+ clickElement(By.cssSelector(PROCEED_CHECKOUT_SUMMARY_BUTTON));
+ break;
+ }
+ case (3): {
+ clickElement(By.xpath(PROCEED_CHECKOUT_ADDRESS_BUTTON));
+ break;
+ }
+ case (4): {
+ clickElement(By.xpath(PROCEED_CHECKOUT_SHIPPING_BUTTON));
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public void verifyPantalla(String pantalla) {
+ System.out.println("pantalla : " + pantalla);
+ switch (pantalla) {
+ case ("My Account"): {
+ Assert.assertTrue(isElementVisible(By.xpath(ACCOUNT_INFO_MESSAGE)));
+ break;
+ }
+ case ("T-Shirts"): {
+
+ Assert.assertTrue(isElementVisible(By.xpath(T_SHIRTS_TITLE)));
+ break;
+ }
+ case ("Product Succesfully Added"): {
+ Assert.assertTrue(isElementVisible(By.xpath(ADDED_MODAL_VISIBLE)));
+ break;
+ }
+ case ("Summary"): {
+ Assert.assertTrue(isElementVisible(By.xpath(SUMMARY_TITLE)));
+ break;
+ }
+ case ("Address"): {
+ Assert.assertTrue(isElementVisible(By.xpath(ADDRESS_TITLE)));
+ break;
+ }
+ case ("Shipping"): {
+ Assert.assertTrue(isElementVisible(By.xpath(SHIPPING_TITLE)));
+ break;
+ }
+ case ("Payment"): {
+ Assert.assertTrue(isElementVisible(By.xpath(PAYMENT_TITLE)));
+ break;
+ }
+ case ("Bank-wire payment"): {
+ Assert.assertTrue(isElementVisible(By.xpath(BANK_WIRE_TITLE)));
+ break;
+ }
+ case ("Order confirmation"): {
+ Assert.assertTrue(isElementVisible(By.xpath(ORDER_SUMMARY_TITLE)));
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+}
diff --git a/src/main/java/com/crowdar/examples/steps/GoogleSteps.java b/src/main/java/com/crowdar/examples/steps/GoogleSteps.java
deleted file mode 100644
index 9fff4c3..0000000
--- a/src/main/java/com/crowdar/examples/steps/GoogleSteps.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.crowdar.examples.steps;
-
-import com.crowdar.core.Injector;
-import com.crowdar.core.PageSteps;
-import com.crowdar.examples.pages.GoogleHomePage;
-import com.crowdar.examples.pages.GoogleSearchResultPage;
-import io.cucumber.java.en.*;
-import org.testng.Assert;
-
-public class GoogleSteps extends PageSteps {
-
- @Given("The client is in google page")
- public void home() {
- Injector._page(GoogleHomePage.class).go();
- }
-
- @When("The client search for word (.*)")
- public void search(String criteria) {
- Injector._page(GoogleHomePage.class).enterSearchCriteria(criteria);
- Injector._page(GoogleHomePage.class).clickSearchButton();
-
- }
-
- @Then("The client verify that results are shown properly")
- public void statVerfication() {
- Assert.assertTrue(!Injector._page(GoogleSearchResultPage.class).getStats().isEmpty());
-
- }
-}
diff --git a/src/main/java/com/crowdar/examples/steps/StoreSteps.java b/src/main/java/com/crowdar/examples/steps/StoreSteps.java
new file mode 100644
index 0000000..57189f3
--- /dev/null
+++ b/src/main/java/com/crowdar/examples/steps/StoreSteps.java
@@ -0,0 +1,63 @@
+package com.crowdar.examples.steps;
+
+import com.crowdar.core.Injector;
+import com.crowdar.core.PageSteps;
+import com.crowdar.examples.pages.StoreHomePage;
+import com.crowdar.examples.pages.StoreLoginPage;
+import com.crowdar.examples.pages.StoreProductsPage;
+import io.cucumber.java.en.And;
+import io.cucumber.java.en.Given;
+import io.cucumber.java.en.When;
+import io.cucumber.java.en.Then;
+
+public class StoreSteps extends PageSteps {
+
+ // From principal page to login
+
+ @Given("El cliente se encuentra en la pantalla (.*)")
+ public void verifyIsInScreen(String screen) {
+ switch (screen) {
+ case "Home": {
+ Injector._page(StoreHomePage.class).go();
+ break;
+ }
+ case "My Account": {
+ Injector._page(StoreProductsPage.class).verifyPantalla(screen);
+ break;
+ }
+ }
+ }
+
+ @Then("El cliente puede ver mensaje de (.*)")
+ public void verifyResultLogin(String result) {
+ Injector._page(StoreLoginPage.class).verifyResultLogin(result);
+ }
+
+ // From login page to account
+ @When("El cliente ingresa su (.*): (.*)")
+ public void inputLoginData(String type ,String email) {
+ Injector._page(StoreLoginPage.class).completeLoginInfo(type, email);
+ }
+
+// @And("El cliente ingresa su password: (.*)")
+// public void inputPassword(String password) {
+// Injector._page(StoreLoginPage.class).completeLoginInfo(password);
+// }
+
+ // From account page to t-shirt
+ @When("El cliente verifica que fue redireccionado a la pantalla (.*)")
+ public void getAccountPageStateToBuy(String screen) {
+ Injector._page(StoreProductsPage.class).verifyPantalla(screen);
+ }
+
+ @And("El cliente clickea sobre el botón (.*)")
+ public void clickButton(String button) {
+ Injector._page(StoreProductsPage.class).clickButton(button);
+ }
+
+ @And("El cliente clickea sobre Proceed to checkout")
+ public void clickProceedCheckout() {
+ Injector._page(StoreProductsPage.class).clickProceedCheckoutButton();
+ }
+
+}
diff --git a/src/test/resources/features/Buy.feature b/src/test/resources/features/Buy.feature
new file mode 100644
index 0000000..c5d7ed4
--- /dev/null
+++ b/src/test/resources/features/Buy.feature
@@ -0,0 +1,39 @@
+Feature:
+ Como cliente quiero ingresar a la página y realizar una compra
+
+@Buy @Smoke
+Scenario: El cliente realiza una compra
+
+ Given El cliente se encuentra en la pantalla Home
+ When El cliente clickea sobre el botón Sign In
+ Then El cliente verifica que fue redireccionado a la pantalla Login
+
+ When El cliente ingresa su email: gerquino@gmail.com
+ And El cliente ingresa su password: a4b3c2d1
+ And El cliente clickea sobre el botón Sign In
+ Then El cliente verifica que fue redireccionado a la pantalla My Account
+
+ When El cliente clickea sobre el botón T-Shirts
+ Then El cliente verifica que fue redireccionado a la pantalla T-Shirts
+
+ When El cliente clickea sobre el botón Add to cart
+ Then El cliente verifica que fue redireccionado a la pantalla Product Succesfully Added
+
+ When El cliente clickea sobre Proceed to checkout
+ And El cliente verifica que fue redireccionado a la pantalla Summary
+ And El cliente clickea sobre Proceed to checkout
+ And El cliente verifica que fue redireccionado a la pantalla Address
+ And El cliente clickea sobre Proceed to checkout
+ And El cliente verifica que fue redireccionado a la pantalla Shipping
+ And El cliente clickea sobre el botón I agree to the terms
+ And El cliente clickea sobre Proceed to checkout
+ And El cliente verifica que fue redireccionado a la pantalla Payment
+ And El cliente clickea sobre el botón Pay by bank wire
+ And El cliente verifica que fue redireccionado a la pantalla Bank-wire payment
+ And El cliente clickea sobre el botón I confirm my order
+ Then El cliente verifica que fue redireccionado a la pantalla Order confirmation
+
+
+
+
+
diff --git a/src/test/resources/features/Login.feature b/src/test/resources/features/Login.feature
new file mode 100644
index 0000000..70fbb09
--- /dev/null
+++ b/src/test/resources/features/Login.feature
@@ -0,0 +1,19 @@
+Feature:
+ Como cliente quiero ingresar a la página y loguearme
+
+@Login @Smoke
+Scenario Outline: El cliente inicia sesión
+
+ Given El cliente se encuentra en la pantalla Home
+ When El cliente clickea sobre el botón Sign In
+ Then El cliente verifica que fue redireccionado a la pantalla Login
+
+ When El cliente ingresa su email:
+ And El cliente ingresa su password:
+ And El cliente clickea sobre el botón Sign In
+ Then El cliente puede ver mensaje de
+
+ Examples:
+ |email |password |resultado |
+ |error@error.com |abcd1234 |login incorrecto |
+ |gerquino@gmail.com |a4b3c2d1 |login correcto |
\ No newline at end of file
diff --git a/src/test/resources/features/googleSearch.feature b/src/test/resources/features/googleSearch.feature
deleted file mode 100644
index f490395..0000000
--- a/src/test/resources/features/googleSearch.feature
+++ /dev/null
@@ -1,25 +0,0 @@
-Feature: As a potential client i need to search in google to find a web site
-
- @Smoke
- Scenario: The client search by "crowdar"
- Given The client is in google page
- When The client search for word crowdar
- Then The client verify that results are shown properly
-
- @Smoke
- Scenario: The client search by "automation"
- Given The client is in google page
- When The client search for word automation
- Then The client verify that results are shown properly
-
- @Smoke
- Scenario: The client search by "docker"
- Given The client is in google page
- When The client search for word docker
- Then The client verify that results are shown properly
-
- @Smoke
- Scenario: The client search by "vagrant"
- Given The client is in google page
- When The client search for word vagrant
- Then The client verify that results are shown properly
\ No newline at end of file