com.liferay.faces.test.Jsf2FlowsPortletTest.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.faces.test.Jsf2FlowsPortletTest.java

Source

/**
 * Copyright (c) 2000-2015 Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */
package com.liferay.faces.test;
//J-

import static org.junit.Assert.assertTrue;

import java.util.logging.Level;

import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.junit.InSequence;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import com.liferay.faces.test.util.TesterBase;

/**
 * @author   Vernon Singleton
 */
@RunWith(Arquillian.class)
public class Jsf2FlowsPortletTest extends TesterBase {

    // xpath
    private static final String weldServletVersionXpath = "//em[contains(text(),'Weld Servlet')]";
    private static final String enterBookingFlowButtonXpath = "//input[@value='Enter Booking Flow']";
    private static final String bookingTypeSelectXpath = "//select[contains(@id,':bookingTypeId')]";
    private static final String bookingTypeSelectFlightXpath = "//select[contains(@id,':bookingTypeId')]/option[contains(text(),'Flight')]";
    private static final String bookingTypeSelectCruiseXpath = "//select[contains(@id,':bookingTypeId')]/option[contains(text(),'Cruise')]";
    private static final String departureSelectXpath = "//select[contains(@id,':departureId')]";
    private static final String departureLaxXpath = "//select[contains(@id,':departureId')]/option[@value='7755']";
    private static final String arrivalSelectXpath = "//select[contains(@id,':arrivalId')]";
    private static final String arrivalSdfXpath = "//select[contains(@id,':arrivalId')]/option[@value='4014']";
    private static final String departureSdfXpath = "//select[contains(@id,':departureId')]/option[@value='4014']";
    private static final String arrivalMcoXpath = "//select[contains(@id,':arrivalId')]/option[@value='3878']";
    private static final String departureDateXpath = "//input[contains(@id,':departureDate')]";
    private static final String searchFlightsButtonXpath = "//input[@value='Search Flights']";
    private static final String addToCartButtonXpath = "(//input[@value='Add To Cart'])[1]";
    private static final String removeButtonXpath = "(//input[@value='Remove'])[1]";
    private static final String bookAdditionalTravelButtonXpath = "//input[@value='Book Additional Travel']";
    private static final String onlyFlightBookingXpath = "//p[contains(text(),'the only type of booking')]";
    private static final String checkoutButtonXpath = "//input[@value='Checkout']";
    private static final String purchaseButtonXpath = "//input[@value='Purchase']";
    private static final String firstNameXpath = "//input[contains(@id,':firstName')]";
    private static final String callSurveyFlowButtonXpath = "//input[@value='Call Survey Flow']";
    private static final String thankYouFormPurchaseXpath = "//form[contains(.,'Thank you Gilbert for your purchase')]";
    private static final String finishButtonXpath = "//input[@value='Finish']";
    private static final String question1Xpath = "//div[contains(@id,':question1')]/input";
    private static final String question2Xpath = "//div[contains(@id,':question2')]/input";
    private static final String thankYouFormSurveyXpath = "//form[contains(.,'Thank you Gilbert for participating in our survey')]";
    private static final String returnFromSurveyFlowButtonXpath = "//input[@value='Return From Survey Flow']";
    private static final String exitBookingFlowButtonXpath = "//input[@value='Exit Booking Flow']";

    static final String url = baseUrl + webContext + "/jsf2-flows";

    @FindBy(xpath = weldServletVersionXpath)
    private WebElement weldServletVersion;
    @FindBy(xpath = enterBookingFlowButtonXpath)
    private WebElement enterBookingFlowButton;
    @FindBy(xpath = bookingTypeSelectXpath)
    private WebElement bookingTypeSelect;
    @FindBy(xpath = bookingTypeSelectFlightXpath)
    private WebElement bookingTypeSelectFlight;
    @FindBy(xpath = bookingTypeSelectCruiseXpath)
    private WebElement bookingTypeSelectCruise;
    @FindBy(xpath = departureSelectXpath)
    private WebElement departureSelect;
    @FindBy(xpath = departureLaxXpath)
    private WebElement departureLax;
    @FindBy(xpath = arrivalSelectXpath)
    private WebElement arrivalSelect;
    @FindBy(xpath = arrivalSdfXpath)
    private WebElement arrivalSdf;
    @FindBy(xpath = departureSdfXpath)
    private WebElement departureSdf;
    @FindBy(xpath = arrivalMcoXpath)
    private WebElement arrivalMco;
    @FindBy(xpath = departureDateXpath)
    private WebElement departureDate;
    @FindBy(xpath = searchFlightsButtonXpath)
    private WebElement searchFlightsButton;
    @FindBy(xpath = addToCartButtonXpath)
    private WebElement addToCartButton;
    @FindBy(xpath = removeButtonXpath)
    private WebElement removeButton;
    @FindBy(xpath = bookAdditionalTravelButtonXpath)
    private WebElement bookAdditionalTravelButton;
    @FindBy(xpath = onlyFlightBookingXpath)
    private WebElement onlyFlightBooking;
    @FindBy(xpath = checkoutButtonXpath)
    private WebElement checkoutButton;
    @FindBy(xpath = purchaseButtonXpath)
    private WebElement purchaseButton;
    @FindBy(xpath = firstNameXpath)
    private WebElement firstName;
    @FindBy(xpath = callSurveyFlowButtonXpath)
    private WebElement callSurveyFlowButton;
    @FindBy(xpath = thankYouFormPurchaseXpath)
    private WebElement thankYouFormPurchase;
    @FindBy(xpath = finishButtonXpath)
    private WebElement finishButton;
    @FindBy(xpath = question1Xpath)
    private WebElement question1;
    @FindBy(xpath = question2Xpath)
    private WebElement question2;
    @FindBy(xpath = thankYouFormSurveyXpath)
    private WebElement thankYouFormSurvey;
    @FindBy(xpath = returnFromSurveyFlowButtonXpath)
    private WebElement returnFromSurveyFlowButton;
    @FindBy(xpath = exitBookingFlowButtonXpath)
    private WebElement exitBookingFlowButton;

    @Drone
    WebDriver browser;

    @Test
    @RunAsClient
    @InSequence(1000)
    public void flowsPortlet() throws Exception {

        signIn(browser);
        logger.log(Level.INFO, "browser.navigate().to(" + url + ")");
        browser.navigate().to(url);
        logger.log(Level.INFO, "browser.getTitle() = " + browser.getTitle());
        logger.log(Level.INFO, "browser.getCurrentUrl() = " + browser.getCurrentUrl());
        getPortletDisplayName();
        logger.log(Level.INFO, "displayName.getText() = " + displayName.getText());

        if (isThere(browser, weldServletVersionXpath)) {
            logger.log(Level.INFO, "weldServletVersion.isDisplayed() = " + weldServletVersion.isDisplayed());
            logger.log(Level.INFO, "weldServletVersion.getText() = " + weldServletVersion.getText());
        }

        assertTrue("portletDisplayName displayName.isDisplayed()", displayName.isDisplayed());

        if (isThere(browser, enterBookingFlowButtonXpath)) {

            enterBookingFlowButton.click();

            try {
                waitForElement(browser, bookingTypeSelectXpath);
            } catch (Exception e) {
                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                assertTrue("bookingTypeSelect should be visible, but " + bookingTypeSelectXpath + " is not there.",
                        e == null);
            }

            exitBookingFlowButton.click();

            try {
                waitForElement(browser, enterBookingFlowButtonXpath);
                logger.log(Level.INFO, "We exited the flow.");
            } catch (Exception e) {
                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                assertTrue("enterBookingFlowButton should be visible, but " + enterBookingFlowButtonXpath
                        + " is not there.", e == null);
            }

            enterBookingFlowButton.click();

            try {
                waitForElement(browser, bookingTypeSelectXpath);
            } catch (Exception e) {
                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                assertTrue("bookingTypeSelect should be visible, but " + bookingTypeSelectXpath + " is not there.",
                        e == null);
            }

            if (isThere(browser, bookingTypeSelectFlightXpath)) {
                bookingTypeSelectFlight.click();

                waitForElement(browser, departureLaxXpath);
                departureLax.click();

                waitForElement(browser, arrivalSdfXpath);
                arrivalSdf.click();

                waitForElement(browser, departureDateXpath);
                departureDate.sendKeys("2015-08-12T00:00:01Z");

                if (isThere(browser, searchFlightsButtonXpath)) {
                    searchFlightsButton.click();

                    try {
                        waitForElement(browser, addToCartButtonXpath);
                    } catch (Exception e) {
                        logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                        assertTrue(
                                "addToCartButton should be visible, but " + addToCartButtonXpath + " is not there.",
                                e == null);
                    }
                    addToCartButton.click();

                    try {
                        waitForElement(browser, bookAdditionalTravelButtonXpath);
                    } catch (Exception e) {
                        logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                        assertTrue("bookAdditionalTravelButton should be visible, but "
                                + bookAdditionalTravelButtonXpath + " is not there.", e == null);
                    }
                    bookAdditionalTravelButton.click();

                    waitForElement(browser, bookingTypeSelectXpath);
                    assertTrue("The selector for the booking type should be showing now, but it is not visible.",
                            isThere(browser, bookingTypeSelectXpath));

                    if (isThere(browser, bookingTypeSelectFlightXpath)) {
                        bookingTypeSelectCruise.click();

                        try {
                            waitForElement(browser, onlyFlightBookingXpath);
                        } catch (Exception e) {
                            logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                            assertTrue("onlyFlightBooking message should be visible, but " + onlyFlightBookingXpath
                                    + " is not there.", e == null);
                        }

                        bookingTypeSelectFlight.click();

                        waitForElement(browser, departureSdfXpath);
                        departureSdf.click();

                        waitForElement(browser, arrivalMcoXpath);
                        arrivalMco.click();

                        waitForElement(browser, departureDateXpath);
                        departureDate.sendKeys("2015-08-12T00:00:01Z");

                        if (isThere(browser, searchFlightsButtonXpath)) {
                            searchFlightsButton.click();

                            try {
                                waitForElement(browser, addToCartButtonXpath);
                            } catch (Exception e) {
                                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                assertTrue("addToCartButton should be visible, but " + addToCartButtonXpath
                                        + " is not there.", e == null);
                            }
                            addToCartButton.click();

                            waitForElement(browser, checkoutButtonXpath);
                            checkoutButton.click();

                            try {
                                waitForElement(browser, purchaseButtonXpath);
                            } catch (Exception e) {
                                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                assertTrue("purchaseButton should be visible, but " + purchaseButtonXpath
                                        + " is not there.", e == null);
                            }

                            assertTrue("The firstName field should be vissible, but it is not.",
                                    isThere(browser, firstNameXpath));
                            if (isThere(browser, firstNameXpath)) {
                                firstName.sendKeys("Gilbert");
                                firstName.sendKeys(Keys.TAB);
                            }

                            purchaseButton.click();

                            try {
                                waitForElement(browser, thankYouFormPurchaseXpath);
                                logger.log(Level.INFO, "We booked a flight.");
                            } catch (Exception e) {
                                logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                assertTrue("thankYouForm for the purchase should be visible, but "
                                        + thankYouFormPurchaseXpath + " is not there.", e == null);
                            }

                            if (isThere(browser, callSurveyFlowButtonXpath)) {
                                callSurveyFlowButton.click();

                                try {
                                    waitForElement(browser, finishButtonXpath);
                                } catch (Exception e) {
                                    logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                    assertTrue("finishButton should be visible, but " + finishButtonXpath
                                            + " is not there.", e == null);
                                }
                                question1.sendKeys("Liferay");
                                question2.sendKeys("cockpit");
                                finishButton.click();

                                try {
                                    waitForElement(browser, returnFromSurveyFlowButtonXpath);
                                } catch (Exception e) {
                                    logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                    assertTrue(
                                            "returnFromSurveyFlowButton should be visible, but "
                                                    + returnFromSurveyFlowButtonXpath + " is not there.",
                                            e == null);
                                }
                                returnFromSurveyFlowButton.click();

                                try {
                                    waitForElement(browser, enterBookingFlowButtonXpath);
                                    logger.log(Level.INFO, "We completed the survey flow.  Yay!");
                                } catch (Exception e) {
                                    logger.log(Level.INFO, "Exception e.getMessage() = " + e.getMessage());
                                    assertTrue("enterBookingFlowButton should be visible, but "
                                            + enterBookingFlowButtonXpath + " is not there.", e == null);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
//J+