StateContentTest.java Source code

Java tutorial

Introduction

Here is the source code for StateContentTest.java

Source

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

@RunWith(Parameterized.class)
public class StateContentTest {
    protected WebDriver driver;
    protected DateFormat dateFormat = new SimpleDateFormat("MMMddyy-HHmm");
    private String baseUrl = "http://test05.aarpdriversafety.org";
    private String copyDataFilename;
    private String state;
    private Hashtable<String, String[]> copyMatrix = new Hashtable<String, String[]>();

    /**
     * Reads the first sheet of the specified Excel spreadsheet into a Hashtable, 
     * where the value in the first column of each row is the Key and the following columns are added to a String[] of size columns
     * @param filename The name of the file to open including extension.
     * @param rows The number of rows to read.
     * @param columns The number of columns to read.
     * @param rowStart The row to start reading from.
     * @param colStart The column to start reading from.
     * @throws IOException
     */
    private void readExcel(String filename, int rows, int columns, int rowStart, int colStart) throws IOException {
        FileInputStream inputStream = new FileInputStream(new File("./data/" + filename));

        Workbook workbook = new XSSFWorkbook(inputStream);
        Sheet firstSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = firstSheet.iterator();
        iterator.next();
        iterator.next();

        for (int i = rowStart; i < rows; i++) {
            Row row = firstSheet.getRow(i);
            String[] copy = new String[columns];
            String stateName = "";
            for (int j = colStart; j < columns - 1; j++) {
                if (j == colStart)
                    stateName = row.getCell(j).getStringCellValue();
                else
                    copy[j] = row.getCell(j).getStringCellValue().replaceAll("\\u2022", "")
                            .replaceAll("(?m)^[ \t]*\r?\n", "").trim();
            }
            copyMatrix.put(stateName, copy);
        }

        workbook.close();
        inputStream.close();
    }

    @Before
    public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "../../resources/chromedriver");
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        copyDataFilename = "PER-STATE-COPY-MATRIX-COMBINED-with-7-15-revisions.xlsx";
        try {
            readExcel(copyDataFilename, 57, 23, 2, 0);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("IO failure: File: " + copyDataFilename + " encountered a read/write error.");
        }
        System.out.println("Complete");
    }

    public StateContentTest(String state) {
        this.state = state;
    }

    @Parameterized.Parameters(name = "{0}")
    public static Collection<String> urls() {
        return Arrays.asList(new String[] { "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado",
                "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Guam", "Hawaii", "Idaho",
                "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland",
                "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska",
                "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota",
                "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina",
                "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virgin Islands", "Virginia", "Washington",
                "West Virginia", "Wisconsin", "Wyoming" });
    }

    @Test
    public void testDynamicContent() {
        loadPage(true); //open webpage

        try {
            selectState(state); //switch to state

            testWhyTakePage(state);
            testPricingPage(state);
            testFAQPage(state);

            testSignUpPage(state);
            testGiftPaymentPage(state);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * Load webpage using base URL. If the clean boolean is true, all cookies will be deleted from the browser before loading the page.
     * @param clean Whether to clear cookies or not
     */
    public void loadPage(boolean clean) {
        if (clean) {
            driver.manage().deleteAllCookies();
        }
        driver.get(baseUrl);
    }

    /**
     * Load webpage to a specific page using base URL and sub URL. 
     * Sub URL should begin with a '/'
     * @param sub The subpage to open.
     */
    public void loadPage(String sub) {
        driver.get(baseUrl + sub);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    }

    public void selectState(String state) throws InterruptedException {
        try {
            new Select(driver.findElement(By.id("statesel"))).selectByVisibleText(state);
            driver.findElement(By.id("stateSelectionContinue")).click();
        } catch (WebDriverException w) {
            driver.findElement(By.cssSelector("div.select-state > a")).click();
            Thread.sleep(1000);
            new Select(driver.findElement(By.id("statesel"))).selectByVisibleText(state);
            driver.findElement(By.id("stateSelectionContinue")).click();
        }
    }

    public void testFAQPage(String state) throws InterruptedException {
        driver.findElement(By.linkText("FAQs")).click();

        /*Test "How Long is this course" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[6]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[1].trim(),
                driver.findElement(By.cssSelector("#collapse6 > div.panel-body > p")).getText().trim());

        /*Test "Can I start the online version of the AARP Smart Driver course at a computer in one location and continue at another?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[7]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[2].trim(),
                driver.findElement(By.cssSelector("#collapse7 > div.panel-body > p")).getText().trim());

        /*Test "How do I navigate the online course?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[8]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[7].trim(),
                driver.findElement(By.cssSelector("#collapse8 > div.panel-body")).getText().trim());

        /*Test "Is this online version of the AARP Smart Driver course narrated or just text?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[9]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[8].trim(),
                driver.findElement(By.cssSelector("#collapse9 > div.panel-body > p")).getText().trim());

        /*Test "Quizzes and Exams: Will those be recorded and graded? Can I fail the course?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[10]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[9].trim(),
                driver.findElement(By.cssSelector("#collapse10 > div.panel-body")).getText().trim());

        /*Test "What is the cost of the course and how do I pay" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[1]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[13].trim(),
                driver.findElement(By.cssSelector("#collapse1 > div.panel-body")).getText().trim());

        /*Test "Is it safe to send my credit card information over the internet?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[2]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[14].trim(),
                driver.findElement(By.cssSelector("#collapse2 > div.panel-body")).getText().trim());

        /*Test "What information do I need handy for registering?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[4]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[15].trim(),
                driver.findElement(By.cssSelector("#collapse4 > div.panel-body")).getText().trim());

        /*Test "Why does AARP Driver Safety ask for my driver's license number and date of birth when I register for the AARP Smart Driver course?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[5]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[16].trim(),
                driver.findElement(By.cssSelector("#collapse5 > div.panel-body")).getText().trim());

        /*Test "If I can't finish the course or don't wish to continue it, will I be able to receive a refund?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[3]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[17].trim(),
                driver.findElement(By.cssSelector("#collapse3 > div.panel-body")).getText().trim());

        /*Test "System Requirements for taking the AARP Smart Driver course online:" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[13]/div/h3/span")).click();
        Thread.sleep(300);
        driver.findElement(By.cssSelector("span.sys-link")).click();
        assertEquals(copyMatrix.get(state)[18].trim(),
                driver.findElement(By.cssSelector("#collapse13 > div.panel-body")).getText().trim());

        /*Test "What happens if I get disconnected?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[11]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[19].trim(),
                driver.findElement(By.cssSelector("#collapse11 > div.panel-body")).getText().trim());

        /*Test "What happens if I have problems while taking the course or the system malfunctions for any reason?" content*/
        driver.findElement(By.xpath("//div[@id='accordion']/div[12]/div/h3/span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[20].trim(),
                driver.findElement(By.cssSelector("#collapse12 > div.panel-body")).getText().trim());
    }

    public void testWhyTakePage(String state) {
        driver.findElement(By.xpath("//a[contains(text(),'Why Take Our Course?')]")).click();

        assertEquals(copyMatrix.get(state)[4].trim(),
                driver.findElement(By.cssSelector("div.state-holder > p")).getText().trim());
    }

    public void testPricingPage(String state) {
        driver.findElement(By.xpath("//a[contains(text(),'Pricing')]")).click();

        assertEquals(copyMatrix.get(state)[4].trim(),
                driver.findElement(By.cssSelector("div.course-text")).getText().trim());
    }

    public void testSignUpPage(String state) throws InterruptedException {
        driver.findElement(By.cssSelector("a.btn.btn-primary")).click();

        assertEquals(copyMatrix.get(state)[4].trim(),
                driver.findElement(By.id("courseReasonDesc")).getText().trim());

        driver.findElement(By.id("confirmState")).click();
        Thread.sleep(300);

        switch (state) {
        case "Alaska":
        case "California":
        case "Delaware":
        case "District of Columbia":
        case "Michigan":
        case "Minnesota":
        case "Pennsylvania":
        case "West Virginia":
            assertEquals(copyMatrix.get(state)[5].trim(),
                    driver.findElement(By.id("id=REFRESHER-Q")).getText().trim());
            driver.findElement(By.xpath("(//a[contains(text(),'?')])[3]")).click();
            Thread.sleep(300);
            assertEquals(copyMatrix.get(state)[6].trim(),
                    driver.findElement(By.id("id=REFRESHER-TIP")).getText().trim());
            driver.findElement(By.cssSelector(
                    "#refresherpop > div.modal-dialog > div.modal-content > div.modal-header > button.close.btn-close"))
                    .click();

            new Select(driver.findElement(By.id("DLTYPE"))).selectByVisibleText("CLASS A");
            new Select(driver.findElement(By.id("COURSEREASON"))).selectByVisibleText("Court Referral");
        default:
            driver.findElement(By.id("continueCourseOptions")).click();
            break;
        }
        Thread.sleep(300);

        driver.findElement(By.id("CCNAME")).clear();
        driver.findElement(By.id("CCNAME")).sendKeys("test test");
        driver.findElement(By.id("cc")).clear();
        driver.findElement(By.id("cc")).sendKeys("4111111111111111");
        new Select(driver.findElement(By.id("CCMONTH"))).selectByVisibleText("04 (Apr)");
        new Select(driver.findElement(By.id("CCYEAR"))).selectByVisibleText("2018");
        driver.findElement(By.id("CCCVV")).clear();
        driver.findElement(By.id("CCCVV")).sendKeys("0000");
        driver.findElement(By.id("CCEMAIL")).clear();
        driver.findElement(By.id("CCEMAIL")).sendKeys("kyle.erickson@thomasarts.com");
        driver.findElement(By.id("CCCEMAIL")).clear();
        driver.findElement(By.id("CCCEMAIL")).sendKeys("kyle.erickson@thomasarts.com");
        driver.findElement(By.id("PASSWORD")).clear();
        driver.findElement(By.id("PASSWORD")).sendKeys("password1");
        driver.findElement(By.id("CPASSWORD")).clear();
        driver.findElement(By.id("CPASSWORD")).sendKeys("password1");
        driver.findElement(By.id("TERMS")).click();
        driver.findElement(By.id("coursePurchase")).click();

        Thread.sleep(300);
        //assertEquals("Thank you for your purchase!", driver.findElement(By.cssSelector("h1")).getText());

        //      driver.findElement(By.id("FIRSTNAME")).clear();
        //      driver.findElement(By.id("FIRSTNAME")).sendKeys("test");
        //      driver.findElement(By.id("LASTNAME")).clear();
        //      driver.findElement(By.id("LASTNAME")).sendKeys("test");
        //      driver.findElement(By.id("ADDRESS1")).clear();
        //      driver.findElement(By.id("ADDRESS1")).sendKeys("555 fake st.");
        //      driver.findElement(By.id("CITY")).clear();
        //      driver.findElement(By.id("CITY")).sendKeys("faketown");
        //      driver.findElement(By.id("ZIP")).clear();
        //      driver.findElement(By.id("ZIP")).sendKeys("84015");
        //      new Select(driver.findElement(By.id("DATEOFBIRTH_MONTH"))).selectByVisibleText("MAY");
        //      new Select(driver.findElement(By.id("DATEOFBIRTH_DAY"))).selectByVisibleText("4");
        //      new Select(driver.findElement(By.id("DATEOFBIRTH_YEAR"))).selectByVisibleText("1915");
        //      driver.findElement(By.id("radio")).click();
        //      driver.findElement(By.id("PHONE")).clear();
        //      driver.findElement(By.id("PHONE")).sendKeys("555-555-5555");
        //      driver.findElement(By.id("DL")).clear();
        //      driver.findElement(By.id("DL")).sendKeys("555555555");
        //      driver.findElement(By.name("submit")).click();
    }

    public void testGiftPaymentPage(String state) throws InterruptedException {
        loadPage(false);
        driver.findElement(By.xpath("//a[contains(text(),'Purchase the course as a gift')]")).click();

        driver.findElement(By.cssSelector("p.sta-link > a > span")).click();
        Thread.sleep(300);
        assertEquals(copyMatrix.get(state)[21].trim(),
                driver.findElement(By.cssSelector(
                        "#stateInfo-gifter > div.modal-dialog > div.modal-content > div.modal-body > p")).getText()
                        .trim());
        driver.findElement(By.cssSelector(
                "#stateInfo-gifter > div.modal-dialog > div.modal-content > div.modal-header > button.close.btn-close"))
                .click();
        Thread.sleep(300);
        driver.findElement(By.id("confirmState")).click();

        driver.findElement(By.id("RNAME")).clear();
        driver.findElement(By.id("RNAME")).sendKeys("Test Test");
        driver.findElement(By.id("REMAIL")).clear();
        driver.findElement(By.id("REMAIL")).sendKeys("test@test.test");
        driver.findElement(By.id("CREMAIL")).clear();
        driver.findElement(By.id("CREMAIL")).sendKeys("test@test.test");
        driver.findElement(By.id("FROMANME")).clear();
        driver.findElement(By.id("FROMANME")).sendKeys("test");
        driver.findElement(By.id("continueCourseOptions")).click();

        driver.findElement(By.id("CCNAME")).clear();
        driver.findElement(By.id("CCNAME")).sendKeys("test");
        driver.findElement(By.id("cc")).clear();
        driver.findElement(By.id("cc")).sendKeys("4111111111111111");
        new Select(driver.findElement(By.id("CCMONTH"))).selectByVisibleText("04 (Apr)");
        new Select(driver.findElement(By.id("CCYEAR"))).selectByVisibleText("2018");
        driver.findElement(By.id("CCCVV")).clear();
        driver.findElement(By.id("CCCVV")).sendKeys("0000");
        driver.findElement(By.id("CCEMAIL")).clear();
        driver.findElement(By.id("CCEMAIL")).sendKeys("test@test.test");
        driver.findElement(By.id("CCCEMAIL")).clear();
        driver.findElement(By.id("CCCEMAIL")).sendKeys("test@test.test");
        driver.findElement(By.id("TERMS")).click();
        driver.findElement(By.id("coursePurchase")).click();

        Thread.sleep(3000);

        assertEquals("Thank you for your gift purchase!", driver.findElement(By.cssSelector("h1")).getText());
    }
    //Test payment page refresher question and "?" text. Corresponds to columns j and k.

    @After
    public void tearDown() throws Exception {
        driver.quit();
    }
}