Package mooltipass

Source Code of mooltipass.AftBase

/* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at src/license_cddl-1.0.txt
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at src/license_cddl-1.0.txt
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/* \file    AftBaes.java
* \brief   Automatic Functional Test Base using Selenium
*  Created: 12/08/2014 20:46:42
*  Author: Erik G. H. Meade
*/
package mooltipass;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;

import org.apache.commons.io.FileUtils;
import org.junit.BeforeClass;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

/**
* 0. MP requires using the Chrome Developer Channel version of Chrome.
* 1. Download and unzip chromedriver - http://chromedriver.storage.googleapis.com/index.html
* 2. When running this test set -Dwebdriver.chrome.driver=path_to_chromedriver
* 3. When you see the message "Waiting 2 minutes for you to install Extensions manually." install chrome.hid-app and chrome.ext manually (Click the Developement
* Mode checkbox in the upper right of chromes extensions page, then click Load Unpacked Extension..., and select from mooltipass/authentication_clients/chrome.hid-app then chrome.ext
*
* Base class for Automated Functional Tests, don't try to run this class as a test run one of its subclasses.
*
* TODO:
* Figure out how not to need to install extensions manually - at time of writing google only allows the loading of one unpackage extension via load-extension
*
* @author eghm
*
*/
public class AftBase
{
  static WebDriver driver;
  static ChromeDriverService chromeDriverService;
  public static final String CHROME = "webdriver.chrome.driver";
  public static final String MOOLTIPASS_DIR = "mooltipass.dir";
  public static final String MOOLTIPASS_EXTENSION_TIMEOUT = "mooltipass.extension.timeout.seconds";
  public static final int MOOLTIPASS_EXTENSION_TIMEOUT_DEFAULT = 120;
  public static final String MOOLTIPASS_TIMEOUT = "mooltipass.timeout.seconds";
  public static final int MOOLTIPASS_TIMEOUT_DEFALT = 30;

  @BeforeClass
  public static void beforeClass() throws Exception
  {
    chromeDriverService = chromeDriverService();
    if (chromeDriverService != null)
    {
      chromeDriverService.start();
   
   
    ChromeOptions options = new ChromeOptions();

// Appears you can only load one unpacked extensions this way...
// list doesn't do it
//    List<String> arguments = new LinkedList<String>();
//    arguments.add("load-extension=" + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome.hid-app");
//    arguments.add("load-extension=" + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome-ext");
//    options.addArguments(arguments);
// comma delimited as some chrome arguments use doesn't work
//    options.addArguments("load-extension=" + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome.hid-app","load-extension=" + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome-ext");
// String... doesn't work   
//    options.addArguments("load-extension=" + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome.hid-app," + System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome-ext");

// Requires extensions are crx (zip file with public and private keys)
//    List extensions = new LinkedList();
//    extensions.add(new File(System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome.hid-app"));
//    extensions.add(new File(System.getProperty(MOOLTIPASS_DIR) + File.separator + "authentication_clients" + File.separator + "chrome-ext"));
//    options.addExtensions(extensions);

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

    System.out.println("Starting an instance of chrome.");
    driver = new ChromeDriver(capabilities);

    // TODO figure out how to pre-install extensions automatically (see commented out code above for things that don't work)
    driver.get("chrome://extensions/");
    System.out.println("\nWaiting " + getTimeoutExtension()/1000 + " seconds for you to install Extensions manually.");
    System.out.println("Check the Developer mode checkbox and then use the Load unpackaged extensions to load the mooltipass authentication_clients chrome.hid-app and chrome.ext\n");
    try
    {
      Thread.sleep(getTimeoutExtension());
    }
    catch (InterruptedException e)
    {
      e.printStackTrace();
   
  }

  public static ChromeDriverService chromeDriverService()
  {
    if (System.getProperty(CHROME) == null)
    {
      System.out.println("-D" + CHROME + " must be set to chromedriver path see http://chromedriver.storage.googleapis.com/index.html");
      System.exit(1);
    }

    try
    {
      ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
          .usingDriverExecutable(new File(System.getProperty(CHROME)))
          .usingAnyFreePort().build();
      return chromeDriverService;
    }
    catch (Throwable t)
    {
      throw new RuntimeException("Exception starting chrome driver service, is chromedriver ( http://chromedriver.storage.googleapis.com/index.html ) installed? You can include the path to it using -D" + CHROME, t);
    }
  }

  public int getTimeout() {
    return Integer.parseInt(System.getProperty(MOOLTIPASS_TIMEOUT, MOOLTIPASS_TIMEOUT_DEFALT + ""));
  }
 
  public static int getTimeoutExtension() {
    return Integer.parseInt(System.getProperty(MOOLTIPASS_EXTENSION_TIMEOUT, MOOLTIPASS_EXTENSION_TIMEOUT_DEFAULT + "")) * 1000;
  }
 
  public void screenshot() {
    if (driver instanceof TakesScreenshot) {
      File fileOutputType = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
      String currentUrl = driver.getCurrentUrl();
      String baseUrl = currentUrl.substring(currentUrl.indexOf("://") + 3, currentUrl.length());
      baseUrl = baseUrl.substring(0, baseUrl.indexOf("/"));
     
      try {
        FileUtils.copyFile(fileOutputType, new File(baseUrl + "-" + Calendar.getInstance().getTime().getTime() + ".png"));
      } catch (IOException e) {
        System.err.println("Exception writing screenshot for " + baseUrl + " " + e.getMessage());
        e.printStackTrace();
      }
    }
    else
    {
      System.err.println("Screenshots not available WebDriver " + driver.getClass().toString() +
          " is not of type TakesScreenshot.");     
    }
  }
}
TOP

Related Classes of mooltipass.AftBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.