Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validate the cart is empty for a logged-in user on Ajio #49

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Added Screen method implementation to search and go to Product Details
  • Loading branch information
Darshan3S committed Jun 15, 2023
commit f91d67b74136126de97418e292ab84cdfba46dd2
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.context.TestExecutionContext;
import com.znsio.sample.e2e.entities.SAMPLE_TEST_CONTEXT;
import com.znsio.sample.e2e.screen.ajio.AjioHomeScreen;
import com.znsio.sample.e2e.screen.ajio.AjioSearchResultsScreen;
import com.znsio.teswiz.entities.Platform;
import com.znsio.teswiz.runner.Runner;
import org.apache.log4j.Logger;
Expand Down Expand Up @@ -37,18 +36,6 @@ public AjioLoginBL() {
this.currentPlatform = Runner.getPlatform();
}

public AjioLoginBL searchFor(String product) {
AjioSearchResultsScreen ajioSearchResultsScreen = AjioHomeScreen.get().searchFor(product);
String actualSearchWasFor = ajioSearchResultsScreen.getActualSearchString();
softly.assertThat(actualSearchWasFor).as("Search was for a different value")
.isEqualTo(product);

int numberOfProductsFound = ajioSearchResultsScreen.getNumberOfProductsFound();
assertThat(numberOfProductsFound).as("Insufficient search results retrieved")
.isGreaterThan(100);
return this;
}

public AjioLoginBL loginAsValidUser(Map userDetails) {
assertThat(AjioHomeScreen.get().signInUser(
userDetails.get("emailId").toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.context.TestExecutionContext;
import com.znsio.sample.e2e.entities.SAMPLE_TEST_CONTEXT;
import com.znsio.sample.e2e.screen.ajio.AjioHomeScreen;
import com.znsio.sample.e2e.screen.ajio.AjioSearchResultsScreen;
import com.znsio.teswiz.entities.Platform;
import com.znsio.teswiz.runner.Runner;
Expand Down Expand Up @@ -35,19 +34,11 @@ public AjioProductBL() {
this.currentPlatform = Runner.getPlatform();
}

public AjioProductBL searchFor(String product) {
AjioSearchResultsScreen ajioSearchResultsScreen = AjioHomeScreen.get().searchFor(product);
String actualSearchWasFor = ajioSearchResultsScreen.getActualSearchString();
softly.assertThat(actualSearchWasFor).as("Search was for a different value")
.isEqualTo(product);

int numberOfProductsFound = ajioSearchResultsScreen.getNumberOfProductsFound();
assertThat(numberOfProductsFound).as("Insufficient search results retrieved")
.isGreaterThan(10);
return this;
}

public AjioProductBL wishlistTheProductFromSearchResult(int itemNumber) {
AjioSearchResultsScreen ajioSearchResultsScreen = AjioSearchResultsScreen.get();
ajioSearchResultsScreen.goToProductDetails(itemNumber).wishlistTheProduct();


return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public AjioSearchBL() {
}

public AjioSearchBL searchFor(String product) {
LOGGER.info("Searching in home page for the product");
AjioSearchResultsScreen ajioSearchResultsScreen = AjioHomeScreen.get().searchFor(product);
String actualSearchWasFor = ajioSearchResultsScreen.getActualSearchString();
softly.assertThat(actualSearchWasFor).as("Search was for a different value")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.znsio.sample.e2e.screen.ajio;


import com.znsio.sample.e2e.screen.web.ajio.AjioProductDetailsScreenWeb;
import com.znsio.teswiz.entities.Platform;
import com.znsio.teswiz.runner.Driver;
import com.znsio.teswiz.runner.Drivers;
import com.znsio.teswiz.runner.Runner;
import com.znsio.teswiz.runner.Visual;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.log4j.Logger;

public abstract class AjioProductDetailsScreen {
private static final String SCREEN_NAME = AjioProductDetailsScreen.class.getSimpleName();
private static final Logger LOGGER = Logger.getLogger(SCREEN_NAME);

public static AjioProductDetailsScreen get() {
Driver driver = Drivers.getDriverForCurrentUser(Thread.currentThread().getId());
Platform platform = Runner.fetchPlatform(Thread.currentThread().getId());
LOGGER.info(SCREEN_NAME + ": Driver type: " + driver.getType() + ": Platform: " + platform);
Visual visually = Drivers.getVisualDriverForCurrentUser(Thread.currentThread().getId());

switch (platform) {
case web:
return new AjioProductDetailsScreenWeb(driver, visually);

}
throw new NotImplementedException(
SCREEN_NAME + " is not implemented in " + Runner.getPlatform());
}

public abstract AjioProductDetailsScreen wishlistTheProduct();
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.znsio.sample.e2e.screen.ajio;

import com.znsio.sample.e2e.screen.android.ajio.AjioSearchResultsScreenAndroid;
import com.znsio.sample.e2e.screen.web.ajio.AjioSearchResultsScreenWeb;
import com.znsio.teswiz.entities.Platform;
import com.znsio.teswiz.runner.Driver;
import com.znsio.teswiz.runner.Drivers;
import com.znsio.teswiz.runner.Runner;
import com.znsio.teswiz.runner.Visual;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.log4j.Logger;
import org.openqa.selenium.WebElement;

import java.util.List;

public abstract class AjioSearchResultsScreen {
private static final String SCREEN_NAME = AjioSearchResultsScreen.class.getSimpleName();
Expand All @@ -19,9 +23,12 @@ public static AjioSearchResultsScreen get() {
LOGGER.info(SCREEN_NAME + ": Driver type: " + driver.getType() + ": Platform: " + platform);
Visual visually = Drivers.getVisualDriverForCurrentUser(Thread.currentThread().getId());

switch(platform) {
switch (platform) {
case android:
return new AjioSearchResultsScreenAndroid(driver, visually);
case web:
return new AjioSearchResultsScreenWeb(driver, visually);

}
throw new NotImplementedException(
SCREEN_NAME + " is not implemented in " + Runner.getPlatform());
Expand All @@ -30,4 +37,6 @@ public static AjioSearchResultsScreen get() {
public abstract int getNumberOfProductsFound();

public abstract String getActualSearchString();

public abstract AjioProductDetailsScreen goToProductDetails(int itemNumber);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.znsio.sample.e2e.screen.android.ajio;

import com.znsio.sample.e2e.screen.ajio.AjioProductDetailsScreen;
import com.znsio.sample.e2e.screen.ajio.AjioSearchResultsScreen;
import com.znsio.teswiz.runner.Driver;
import com.znsio.teswiz.runner.Visual;
import org.apache.commons.lang.NotImplementedException;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;

Expand All @@ -25,7 +27,7 @@ public AjioSearchResultsScreenAndroid(Driver driver, Visual visually) {
@Override
public int getNumberOfProductsFound() {
String numberOfProducts = driver.waitTillElementIsPresent(byNumberOfProductsFoundId)
.getText();
.getText();
LOGGER.info(String.format("Found '%s'", numberOfProducts));
return Integer.parseInt(numberOfProducts.split(" ")[0]);
}
Expand All @@ -37,4 +39,9 @@ public String getActualSearchString() {
visually.checkWindow(SCREEN_NAME, "Search results screen");
return actualSearchString;
}

@Override
public AjioProductDetailsScreen goToProductDetails(int itemNumber) {
throw new NotImplementedException("Not implemented for Android");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public AjioSearchResultsScreen searchFor(String product) {
searchElement.clear();
searchElement.sendKeys(product);
visually.checkWindow(SCREEN_NAME, "Search string entered");
driver.waitTillElementIsPresent(bySearchIconClassName);
driver.waitTillElementIsPresent(bySearchIconClassName).click();
return AjioSearchResultsScreen.get();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.znsio.sample.e2e.screen.web.ajio;


import com.znsio.sample.e2e.screen.ajio.AjioProductDetailsScreen;
import com.znsio.teswiz.runner.Driver;
import com.znsio.teswiz.runner.Visual;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

public class AjioProductDetailsScreenWeb
extends AjioProductDetailsScreen {
private static final String SCREEN_NAME = AjioProductDetailsScreenWeb.class.getSimpleName();
private static final Logger LOGGER = Logger.getLogger(SCREEN_NAME);
private static final String NOT_YET_IMPLEMENTED = " not yet implemented";
private static final By bySearchBoxXpath = By.xpath("//input[@name='searchVal']");


private final Driver driver;
private final Visual visually;

public AjioProductDetailsScreenWeb(Driver driver, Visual visually) {
this.driver = driver;
this.visually = visually;
visually.checkWindow(SCREEN_NAME, "Home page");
}

@Override
public AjioProductDetailsScreen wishlistTheProduct() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.znsio.sample.e2e.screen.web.ajio;

import com.znsio.sample.e2e.screen.ajio.AjioProductDetailsScreen;
import com.znsio.sample.e2e.screen.ajio.AjioSearchResultsScreen;
import com.znsio.teswiz.runner.Driver;
import com.znsio.teswiz.runner.Visual;
import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.util.List;

public class AjioSearchResultsScreenWeb
extends AjioSearchResultsScreen {
private static final String SCREEN_NAME = AjioSearchResultsScreenWeb.class.getSimpleName();
private static final Logger LOGGER = Logger.getLogger(SCREEN_NAME);
private static final String NOT_YET_IMPLEMENTED = " not yet implemented";
private static final By byitemsFoundClassName = By.className("length");
private static final By bysearchedProductResultXpath = By.xpath("//div[@class=' info search-info']//div[@class='header2']");
private static final By byitemsListXpath = By.xpath("//a[@class='rilrtl-products-list__link' and not(contains(@id,'jioAdsContainer'))]");


private final Driver driver;
private final Visual visually;

public AjioSearchResultsScreenWeb(Driver driver, Visual visually) {
this.driver = driver;
this.visually = visually;
visually.checkWindow(SCREEN_NAME, "Home page");
}

@Override
public int getNumberOfProductsFound() {
String itemsFound = driver.findElement(byitemsFoundClassName).getText().split("\\s+")[0];
LOGGER.info("number of items found for the searched product : " + itemsFound);
return Integer.parseInt(itemsFound);
}

@Override
public String getActualSearchString() {
String actualSearchProduct = driver.findElement(bysearchedProductResultXpath).getText();
LOGGER.info("Search Product Result : " + actualSearchProduct);
return actualSearchProduct;
}

@Override
public AjioProductDetailsScreen goToProductDetails(int itemNumber) {
LOGGER.info(String.format("Selecting %s th product from the item list ", itemNumber));
getProductList().get(itemNumber).click();
return AjioProductDetailsScreen.get();
}


private List<WebElement> getProductList() {
LOGGER.info("Getting list of items for searched product");
return driver.findElements(byitemsListXpath);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Feature: Ajio B2C Scenarios
@android @web @validateCart
Scenario: As a guest user, I should be able to apply a coupon to a "qasics" product with size "UK 10" in my shopping bag
Given I login to ajio as "ajioTestUser"
And I search for for "shirt" product
And I search for for "heels" product
When I wishlist the 7th product and move it to cart
And I remove the product from cart
Then I Relog and verify cart is empty