Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

This project has the intention of show in a practical way how to use Lippia Automation Framework to build automated tests using Gherkin and Page-Object pattern. This sample project includes the required components as binaries, docker containers and configuration files to simply download and run a set of sample tests in your local computer, using the Lippia container stack described bellow.

***
*********************
Crowdar Academy 2020
*********************


## Docker stack
Expand Down
6 changes: 4 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,20 @@
<name>Lippia-web-example-project</name>
<version>3.1.2.2</version>


<properties>
<crowd.project.name>Lippia-web-example-project</crowd.project.name>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<crowdar.cucumber.filter>@Smoke</crowdar.cucumber.filter>

<crowdar.cucumber.filter>@Success</crowdar.cucumber.filter>

<cucumber.runner>testng.xml</cucumber.runner>
<crowdar.driverHub></crowdar.driverHub>
<crowdar.projectType>WEB_CHROME</crowdar.projectType>
<crowdar.setupStrategy>web.DownloadLatestStrategy</crowdar.setupStrategy>
<crowdar.driver.capabilities.json_path>src/main/resources/browsers/chromeCapabilities.json</crowdar.driver.capabilities.json_path>
<crowdar.cucumber.option>src/test/resources/features --glue / --glue com/crowdar/bdd/cukes --tags ${crowdar.cucumber.filter} --tags 'not @Ignore' --plugin pretty</crowdar.cucumber.option>
</properties>

<profiles>
<profile>
<id>Local</id>
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/crowdar/examples/pages/DressesPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.crowdar.examples.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;

public class DressesPage extends PageBaseShop {
//private final String DRESSES_SUBCAT_CSS_SELECTOR = "/html/body/div/div[2]/div/div[3]/div[2]/div[2]/ul/li[1]/h5/a";
// private final String DRESSES_TAB_CSS_SELECTOR = "/html/body/div/div[1]/header/div[3]/div/div/div[6]/ul/li[2]/a";
private final String DRESSES_TAB_CSS_SELECTOR = "#block_top_menu > ul > li:nth-child(2) > a";
private final String CAT_XPATH = "//*[@id=\"center_column\"]/div[1]/div";
private final String TITLE_CSS_SELECTOR = "/html/body/div/div[2]/div/div[3]/div[1]/div[1]/h2";
private final String TITLE_XPATH = "/html/body/div/div[2]/div/div[3]/div[1]/div[1]/h2";
private final String DRESSES_XPATH = "/html/body/div/div[1]/header/div[3]/div/div/div[6]/ul/li[2]/a";
private final String CATEG_XPATH = "//*[@id=\"categories_block_left\"]/h2";

private final String BUTTON_TSHIRTS_CSS_SELECTOR = "#block_top_menu > ul > li:nth-child(3)";
private final String DIV_CONTENTSCENE_XPATH = "//*[@id=\"center_column\"]/div[1]/div";

public DressesPage(RemoteWebDriver wdriver) {
super(wdriver);
}

public void verifyDressesPage(){
// Assert.assertTrue(isElementPresentAndDisplayed(By.xpath(CATEG_XPATH)), "El elemento verifyDressesPage no esta visible");
// System.out.println("\n:::: verify DressesPage..." + "\n");
// Assert.assertTrue(isElementPresentAndDisplayed(By.xpath(TITLE_XPATH)), ">>> El elemento TITLE_XPATH no está presente.");
// String urlDresses = driver.getCurrentUrl();
// Assert.assertTrue(urlDresses.contains("http://automationpractice.com/index.php?id_category=8&controller=category"));
Assert.assertEquals(getWebElement(By.xpath(CATEG_XPATH)).getText(),"DRESSES");
}

public void clickDressesButton() {
clickElement(By.cssSelector(DRESSES_TAB_CSS_SELECTOR));
}
}
91 changes: 91 additions & 0 deletions src/main/java/com/crowdar/examples/pages/GenericPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.crowdar.examples.pages;

import com.crowdar.core.Injector;
import org.openqa.selenium.remote.RemoteWebDriver;

public class GenericPage extends PageBaseShop {
public GenericPage(RemoteWebDriver wdriver) {
super(wdriver);
}

public void verifyPage(String pag) {
switch (pag){
case "Login":
//Injector._page(ShopHomePage.class).verificarPagina(pag);
Injector._page(ShopHomePage.class).verifyLoginPage();
break;
case "My-Account":
Injector._page(ShopHomePage.class).verifyMyAccountPage();
break;
case "DressesPage":
Injector._page(DressesPage.class).verifyDressesPage();
break;
case "ProductPage":
Injector._page(ProductPage.class).verifyProductPage();
break;
case "SummaryPage":
Injector._page(SummaryPage.class).verifySummaryPage();
break;
case "AdressPage":
Injector._page(SummaryPage.class).verifyAdressesPage();
break;
case "ShippingPage":
Injector._page(SummaryPage.class).verifyShippingPage();
break;
case "PaymentPage":
Injector._page(SummaryPage.class).verifyPaymentPage();
break;
case "OrderSummaryPage":
Injector._page(SummaryPage.class).verifyOrderSummaryPage();
break;
case "OrderCompletePage":
Injector._page(SummaryPage.class).verifyOrderCompletePage();
break;
default:
throw new IllegalStateException("Unexpected value: " + pag);
}
}

public void clickButton(String b) {
switch (b){
case "SignInTab":
Injector._page(ShopHomePage.class).clickSignInTab(); //Click en pestaña Sign In.
break;
case "SignInButton":
Injector._page(ShopHomePage.class).clickSignInButton(); //Click en botón Sign In.
break;
case "DressesButton":
Injector._page(DressesPage.class).clickDressesButton();
break;
case "ProductButton":
Injector._page(ProductPage.class).clickProductButton();
break;
case "AddToCartButton":
Injector._page(ProductPage.class).clickAddToCartButton();
break;
case "ProceedButton":
Injector._page(ProductPage.class).clickProceedButton();
break;
case "ProceedButtonStep1":
Injector._page(SummaryPage.class).clickProceedButtonStep1();
break;
case "ProceedButtonAdress":
Injector._page(SummaryPage.class).clickProceedButtonAdress();
break;
case "IAgree":
Injector._page(SummaryPage.class).clickIAgreeCheckbox();
break;
case "ProceedButtonShipping":
Injector._page(SummaryPage.class).clickProceedButtonShipping();
break;
case "PayByCheck":
Injector._page((SummaryPage.class)).clickPayByCheckButton();
break;
case "ConfirmOrderButton":
Injector._page((SummaryPage.class)).clickConfirmOrderButton();
break;
default:
throw new IllegalStateException("clickButton - Valor inesperado! -> " + b);
}
}
}
28 changes: 0 additions & 28 deletions src/main/java/com/crowdar/examples/pages/GoogleHomePage.java

This file was deleted.

This file was deleted.

14 changes: 0 additions & 14 deletions src/main/java/com/crowdar/examples/pages/PageBaseGoogle.java

This file was deleted.

14 changes: 14 additions & 0 deletions src/main/java/com/crowdar/examples/pages/PageBaseShop.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.crowdar.examples.pages;

import com.crowdar.core.pageObjects.PageBaseWeb;
import org.openqa.selenium.remote.RemoteWebDriver;

public class PageBaseShop extends PageBaseWeb {

public PageBaseShop(RemoteWebDriver wdriver) {
super(wdriver);
BASE_URL = "http://automationpractice.com";
}


}
47 changes: 47 additions & 0 deletions src/main/java/com/crowdar/examples/pages/ProductPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.crowdar.examples.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;

public class ProductPage extends PageBaseShop {
public ProductPage(RemoteWebDriver wdriver) {
super(wdriver);
this.url = "";
}

private final String PRODUCT_CSS_SELECTOR = "#center_column > ul > li.ajax_block_product.col-xs-12.col-sm-6.col-md-4.first-in-line.first-item-of-tablet-line.first-item-of-mobile-line > div > div.right-block > h5 > a";//"#center_column > ul > li.ajax_block_product.col-xs-12.col-sm-6.col-md-4.first-in-line.first-item-of-tablet-line.first-item-of-mobile-line > div > div.left-block > div > a.product_img_link > img";
private final String ADD_CART_BUTTON_CSS_SELECTOR ="#add_to_cart > button > span";
private final String WINDOW_LAYERCART_ID = "layer_cart";
private final String PROCEED_BUTTON_CSS_SELECTOR = "#layer_cart > div.clearfix > div.layer_cart_cart.col-xs-12.col-md-6 > div.button-container > a";

public void verifyProductPage(){
String URL = driver.getCurrentUrl();
Assert.assertTrue(URL.contains("id_product="), "Página de producto no verificada." );
}

public void clickProductButton(){
clickElement(By.cssSelector(PRODUCT_CSS_SELECTOR));
sleep(500); //zzz
}

public void clickAddToCartButton() {
clickElement(By.cssSelector(ADD_CART_BUTTON_CSS_SELECTOR));
sleep(500); //zzz
}

public void checkWindow(String v) {
switch (v){
case "LayerCart":
sleep(3000);
Assert.assertTrue(isElementPresentAndDisplayed(By.id(WINDOW_LAYERCART_ID)), "El elemento LayerCart no esta visible");
break;
default:
throw new IllegalStateException("::checkWindow:: Valor inesperado: " + v);
}
}

public void clickProceedButton() {
clickElement(By.cssSelector(PROCEED_BUTTON_CSS_SELECTOR));
}
}
76 changes: 76 additions & 0 deletions src/main/java/com/crowdar/examples/pages/ShopHomePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.crowdar.examples.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;

public class ShopHomePage extends PageBaseShop {
private final String TAB_SIGNIN_CSS_SELECTOR = ".login";
private final String INPUT_EMAILADRESS_ID = "email";
private final String INPUT_PASSWORD_ID = "passwd";
private final String BUTTON_SIGNIN_ID = "SubmitLogin";
private final String LABEL_MYACCOUNT_CSS_SELECTOR = "#center_column > h1";
private final String SLIDER_HOME_ID = "slider_row";
private final String TITLE_ALREADY_CSS_SELECTOR = "#login_form > h3:nth-child(1)";
private final String NAVIGATION_CSS_SELECTOR = ".navigation_page"; //Ej: Home->My Account

public ShopHomePage(RemoteWebDriver driver) {
super(driver);
this.url = ""; //here you can define the custom paths For example:"/search" --> www.google.com/search
}

public void go(){
navigateToCompleteURL(); //método de clase PageBaseWeb. ShopHomePage extiende de PageBaseShop que extiende de PageBaseWeb.
}

public void verificarHome(){
Assert.assertTrue(isElementPresentAndDisplayed(By.id(SLIDER_HOME_ID)), "El elemento no es visible.");
}

public void verifyLoginPage(){
Assert.assertEquals(getWebElement(By.cssSelector(TITLE_ALREADY_CSS_SELECTOR)).getText(),"ALREADY REGISTERED?");
}

public void verifyMyAccountPage(){
Assert.assertEquals(getWebElement(By.cssSelector(LABEL_MYACCOUNT_CSS_SELECTOR)).getText(),"MY ACCOUNT");
}

public void verificarPagina(String pag){
// System.out.println(pag);
switch (pag){
case "Login":
//System.out.println(getWebElement(By.cssSelector(TITLE_ALREADY_CSS_SELECTOR)).getText());
Assert.assertEquals(getWebElement(By.cssSelector(TITLE_ALREADY_CSS_SELECTOR)).getText(),"ALREADY REGISTERED?");
break;
case "My-Account":
Assert.assertEquals(getWebElement(By.cssSelector(LABEL_MYACCOUNT_CSS_SELECTOR)).getText(),"MY ACCOUNT");
break;
case "DressesPage":
// Assert.assertEquals(getWebElement(By.cssSelector(LABEL_MYACCOUNT_CSS_SELECTOR)).getText(),"MY ACCOUNT");
break;
case "ProductPage":
// Assert.assertEquals(getWebElement(By.cssSelector(LABEL_MYACCOUNT_CSS_SELECTOR)).getText(),"MY ACCOUNT");
break;
default:
System.out.println("Error!!");
break;
}
}

public void clickSignInButton(){
clickElement(By.id(BUTTON_SIGNIN_ID));
}

public void clickSignInTab(){
clickElement(By.cssSelector(TAB_SIGNIN_CSS_SELECTOR));
}

/* Completar credenciales de acceso */
public void enterLoginEmail(String email) {
completeField(By.id(INPUT_EMAILADRESS_ID), email);
}
public void enterLoginPassword(String pass) {
completeField(By.id(INPUT_PASSWORD_ID), pass);
}

}
Loading