org.apache.portals.pluto.test.utilities.SimpleTestDriver.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.portals.pluto.test.utilities.SimpleTestDriver.java

Source

/*  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package org.apache.portals.pluto.test.utilities;

import com.gargoylesoftware.htmlunit.SilentCssErrorHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebClientOptions;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.logging.LogFactory;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import sun.util.logging.resources.logging;

/**
 * @author nick
 * @author Kyle Stiemann
 *
 */
public class SimpleTestDriver {

    protected static String baseUrl, loginUrl, host, port, testFile, browser, username, usernameId, password,
            passwordId, testContextBase, module;
    protected static int timeout = 3; // for waiting on page load
    protected static boolean useGeneratedUrl = true, debug = false, dryrun = false, scroll;

    protected static WebDriver driver;

    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {

        if (driver == null) {
            loginUrl = System.getProperty("test.server.login.url");
            host = System.getProperty("test.server.host");
            port = System.getProperty("test.server.port");
            username = System.getProperty("test.server.username");
            usernameId = System.getProperty("test.server.username.id");
            password = System.getProperty("test.server.password");
            passwordId = System.getProperty("test.server.password.id");
            browser = System.getProperty("test.browser");
            testContextBase = System.getProperty("test.context.base");
            StringBuilder sb = new StringBuilder();
            sb.append("http://");
            sb.append(host);
            if (port != null && !port.isEmpty()) {
                sb.append(":");
                sb.append(port);
            }
            sb.append("/");
            sb.append(testContextBase);
            baseUrl = sb.toString();
            String str = System.getProperty("test.url.strategy");
            useGeneratedUrl = str.equalsIgnoreCase("generateURLs");
            str = System.getProperty("test.debug");
            debug = str.equalsIgnoreCase("true");
            str = System.getProperty("test.timeout");
            dryrun = Boolean.valueOf(System.getProperty("test.dryrun"));
            timeout = ((str != null) && str.matches("\\d+")) ? Integer.parseInt(str) : 3;
            String wd = System.getProperty("test.browser.webDriver");
            String binary = System.getProperty("test.browser.binary");
            String headlessProperty = System.getProperty("test.browser.headless");
            boolean headless = (((headlessProperty == null) || (headlessProperty.length() == 0)
                    || Boolean.valueOf(headlessProperty)));
            String maximizedProperty = System.getProperty("test.browser.maximized");
            boolean maximized = Boolean.valueOf(maximizedProperty);

            System.out.println("before class.");
            System.out.println("   Debug        =" + debug);
            System.out.println("   Dryrun       =" + dryrun);
            System.out.println("   Timeout      =" + timeout);
            System.out.println("   Login URL    =" + loginUrl);
            System.out.println("   Host         =" + host);
            System.out.println("   Port         =" + port);
            System.out.println("   Context      =" + testContextBase);
            System.out.println("   Generate URL =" + useGeneratedUrl);
            System.out.println("   Username     =" + username);
            System.out.println("   UsernameId   =" + usernameId);
            System.out.println("   Password     =" + password);
            System.out.println("   PasswordId   =" + passwordId);
            System.out.println("   Browser      =" + browser);
            System.out.println("   Driver       =" + wd);
            System.out.println("   binary       =" + binary);
            System.out.println("   headless     =" + headless);
            System.out.println("   maximized    =" + maximized);

            if (browser.equalsIgnoreCase("firefox")) {

                System.setProperty("webdriver.gecko.driver", wd);
                FirefoxOptions options = new FirefoxOptions();
                options.setLegacy(true);
                options.setAcceptInsecureCerts(true);

                if ((binary != null) && (binary.length() != 0)) {
                    options.setBinary(binary);
                }

                if (headless) {
                    options.setHeadless(true);
                }

                driver = new FirefoxDriver(options);

            } else if (browser.equalsIgnoreCase("internetExplorer")) {
                System.setProperty("webdriver.ie.driver", wd);
                driver = new InternetExplorerDriver();
            } else if (browser.equalsIgnoreCase("chrome")) {

                System.setProperty("webdriver.chrome.driver", wd);
                ChromeOptions options = new ChromeOptions();

                if ((binary != null) && (binary.length() > 0)) {
                    options.setBinary(binary);
                }

                if (headless) {
                    options.addArguments("--headless");
                }

                options.addArguments("--disable-infobars");
                options.setAcceptInsecureCerts(true);

                if (maximized) {
                    // The webDriver.manage().window().maximize() feature does not work correctly in headless mode, so set the
                    // window size to 1920x1200 (resolution of a 15.4 inch screen).
                    options.addArguments("--window-size=1920,1200");
                }

                driver = new ChromeDriver(options);

            } else if (browser.equalsIgnoreCase("phantomjs")) {
                DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
                capabilities.setJavascriptEnabled(true);
                capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, binary);
                driver = new PhantomJSDriver(capabilities);
            } else if (browser.equalsIgnoreCase("htmlUnit")) {
                LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
                        "org.apache.commons.logging.impl.NoOpLog");
                Logger.getLogger("com.gargoylesoftware").setLevel(Level.SEVERE);
                Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.SEVERE);
                driver = new HtmlUnitDriver() {
                    @Override
                    protected WebClient getWebClient() {
                        WebClient webClient = super.getWebClient();
                        WebClientOptions options = webClient.getOptions();
                        options.setThrowExceptionOnFailingStatusCode(false);
                        options.setThrowExceptionOnScriptError(false);
                        options.setPrintContentOnFailingStatusCode(false);
                        webClient.setCssErrorHandler(new SilentCssErrorHandler());
                        return webClient;
                    }
                };
            } else if (browser.equalsIgnoreCase("safari")) {
                driver = new SafariDriver();
            } else {
                throw new Exception("Unsupported browser: " + browser);
            }

            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                @Override
                public void run() {
                    driver.quit();
                }
            }));

            if (maximized) {
                driver.manage().window().maximize();
            }

            if (!dryrun) {
                login();
            }
        }
    }

    /**
     * Called to login to the portal if necessary.
     */
    protected static void login() {

        driver.get(loginUrl);

        List<WebElement> uels = driver.findElements(By.id(usernameId));
        List<WebElement> pwels = driver.findElements(By.id(passwordId));

        // If there is no login or password fields, don't need to login.
        if (!uels.isEmpty() && !pwels.isEmpty()) {

            System.out.println("login: found userid and password fields");
            WebElement userEl = uels.get(0);
            WebElement pwEl = pwels.get(0);

            // perform login
            userEl.clear();
            userEl.sendKeys(username);
            pwEl.clear();
            pwEl.sendKeys(password);
            pwEl.submit();

        }
    }

    /**
     * @throws java.lang.Exception
     */
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("   after class.");
    }

}