com.esure.motorinsurance.webpages.QuoteDetailPage.java Source code

Java tutorial

Introduction

Here is the source code for com.esure.motorinsurance.webpages.QuoteDetailPage.java

Source

package com.esure.motorinsurance.webpages;

import com.esure.motorinsurance.domain.InsuranceData;
import com.esure.motorinsurance.domain.enumType.EmploymentStatus;
import com.esure.motorinsurance.domain.enumType.MaritalStatus;
import com.esure.motorinsurance.domain.enumType.ResidentialStatus;
import com.esure.motorinsurance.domain.enumType.Title;
import com.esure.motorinsurance.utility.Driver;
import com.esure.motorinsurance.utility.LogFile;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;

import java.util.concurrent.TimeUnit;

/**
 * Created by bhawana on 16/05/2017.
 */
public class QuoteDetailPage {
    WebDriver driver;
    private InsuranceData.YourDetails yourDetails;
    private InsuranceData.AboutYou aboutYou;
    private InsuranceData.YourCar youCar;

    @FindBy(how = How.XPATH, using = "//div[@class='content-area-centre']")
    private WebElement contentArea;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//h2")
    private WebElement yourDetailHeading;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]/span")
    private WebElement yourDetailSpan;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]/span")
    private WebElement aboutYouSpan;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//h2")
    private WebElement aboutYouHeading;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span")
    private WebElement yourCarSpan;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//h2")
    private WebElement yourCarHeading;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__left']/li[1]/span")
    private WebElement titleQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__left']/li[2]/span")
    private WebElement firstnameQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__left']/li[3]/span")
    private WebElement surNameQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__right']/li[1]/span")
    private WebElement emailQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__right']/li[2]/span")
    private WebElement phoneNumberQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[1]//span[@class='new__right']/li[3]/span")
    private WebElement mainDriverQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[1]/span")
    private WebElement dobQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[2]/span")
    private WebElement ukResidentQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[3]/span")
    private WebElement empStatusQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[4]/span")
    private WebElement occupationQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[5]/span")
    private WebElement industryQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[6]/span")
    private WebElement genderQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[7]/span")
    private WebElement maritalStatusQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[8]/span")
    private WebElement noOfChildQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__left']/li[9]/span")
    private WebElement resStatusQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[1]/span")
    private WebElement noOfCarsQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[2]/span")
    private WebElement accessToAnyVehicleQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[3]/span")
    private WebElement licenseTypeQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[4]/span")
    private WebElement licenseHeldYearQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[5]/span")
    private WebElement ncdYearQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[6]/span")
    private WebElement coverStartDateQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[7]/span")
    private WebElement coverEndDateQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[8]/span")
    private WebElement registrationNumQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[9]/span")
    private WebElement houseNoQ;

    @FindBy(how = How.XPATH, using = "//div[@id='details-section']/ul[2]//span[@class='new__right']/li[10]/span")
    private WebElement postcodeQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[1]/span")
    private WebElement carMakerQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[2]/span")
    private WebElement carModelQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[3]/span")
    private WebElement fuelTypeQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[4]/span")
    private WebElement transmissionTypeQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[5]/span")
    private WebElement carResYearQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[6]/span")
    private WebElement carEstimationQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[7]/span")
    private WebElement milageQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__left']//li[8]/span")
    private WebElement carKeptOvernightQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[1]/span")
    private WebElement carDateOfPurchaseQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[2]/span")
    private WebElement securityDeviceFittedQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[3]/span")
    private WebElement legalOwnerQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[4]/span")
    private WebElement registerKeeperQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[5]/span")
    private WebElement carTrackingDeviceQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[6]/span")
    private WebElement useOfCarQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[7]/span")
    private WebElement coverLevelQ;

    @FindBy(how = How.XPATH, using = "//ul[@id='car-details']//span[@class='new__right']//li[8]/span")
    private WebElement modificationQ;

    public QuoteDetailPage(WebDriver driver) {
        this.driver = driver;
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        PageFactory.initElements(driver, this);
    }

    public void verifyThatQuoteHasBeenCreatedWithCorrectValues(InsuranceData insuranceData)
            throws InterruptedException {

        clickOnExpandButton(yourDetailHeading);
        Driver.waitForElementToLoad(yourDetailSpan);
        getYourDetailDataFromQuoteDetail();

        clickOnExpandButton(aboutYouHeading);
        Driver.waitForElementToLoad(aboutYouSpan);
        getAboutYouDetailFromQuoteDetail();

        clickOnExpandButton(yourCarHeading);
        Driver.waitForElementToLoad(yourCarSpan);
        getYourCarDetailsFromQuoteDetail();

        InsuranceData insuranceDataFromQuote = createInsuranceDataFromQuoteDetailPage();

        if (insuranceData.equals(insuranceDataFromQuote)) {
            try {
                LogFile.getDetailsOfObjectUsedInLogFile(insuranceDataFromQuote, "Quote Details are correct");
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        } else {
            try {
                LogFile.getDetailsOfObjectUsedInLogFile(insuranceDataFromQuote, "Quote Details are not correct");
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
    }

    private void getYourCarDetailsFromQuoteDetail() {
        youCar = InsuranceData.YourCar.builder().carMaker(carMakerQ.getText()).carModel(carModelQ.getText())
                .build();
    }

    private void getYourDetailDataFromQuoteDetail() {
        Title value = Title.get(titleQ.getText());
        yourDetails = InsuranceData.YourDetails.builder().title(value).firstName(firstnameQ.getText())
                .lastName(surNameQ.getText()).emailAddress(emailQ.getText()).build();
    }

    private void getAboutYouDetailFromQuoteDetail() {
        EmploymentStatus empS = EmploymentStatus.get(empStatusQ.getText());
        MaritalStatus maritalS = MaritalStatus.get(maritalStatusQ.getText());
        ResidentialStatus resS = ResidentialStatus.get(resStatusQ.getText());
        aboutYou = InsuranceData.AboutYou.builder().employmentStatus(empS).maritalStatus(maritalS)
                .residentialStatus(resS).build();
    }

    private InsuranceData createInsuranceDataFromQuoteDetailPage() {
        return InsuranceData.builder().yourDetails(yourDetails).yourCar(InsuranceData.YourCar.builder().build())
                .aboutYou(aboutYou).motorClaims(InsuranceData.MotorClaims.builder().build())
                .additionalPartner(InsuranceData.AdditionalPartner.builder().build())
                .boostInsuranceCover(InsuranceData.BoostInsuranceCover.builder().build()).build();
    }

    private void clickOnExpandButton(WebElement clickingElement) {
        forcedSleepAsTheToggleTakeTimeToExpand();
        clickingElement.click();
    }

    // TODO this is workaround need a proper fix
    private void forcedSleepAsTheToggleTakeTimeToExpand() {
        try {
            Thread.sleep(5000l);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}