001 /* 002 * Copyright 2006-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package edu.samplu.common; 018 019 import org.junit.After; 020 import org.junit.Before; 021 import org.openqa.selenium.By; 022 import org.openqa.selenium.WebDriver; 023 import org.openqa.selenium.firefox.FirefoxDriver; 024 import org.openqa.selenium.firefox.FirefoxProfile; 025 026 import java.util.concurrent.TimeUnit; 027 028 import static org.junit.Assert.assertEquals; 029 030 /** 031 * Base class for Selenium Webdriver integration tests 032 * 033 * @author Kuali Rice Team (rice.collab@kuali.org) 034 */ 035 public abstract class WebDriverITBase { 036 037 int DEFAULT_IMPLICIT_WAIT_TIME = 30; 038 int SHORT_IMPLICIT_WAIT_TIME = 1; 039 040 public WebDriver driver; 041 042 /** 043 * Returns the URL to be used with this test 044 * 045 * @return URL of the test 046 */ 047 public abstract String getTestUrl(); 048 049 /** 050 * Setup the WebDriver test, login and load the tested web page 051 * 052 * @throws Exception 053 */ 054 @Before 055 public void setUp() throws Exception { 056 FirefoxProfile profile = new FirefoxProfile(); 057 profile.setEnableNativeEvents(false); 058 driver = new FirefoxDriver(profile); 059 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 060 061 // Login 062 driver.get(getTestUrl()); 063 driver.findElement(By.name("__login_user")).clear(); 064 driver.findElement(By.name("__login_user")).sendKeys("admin"); 065 driver.findElement(By.cssSelector("input[type=\"submit\"]")).click(); 066 } 067 068 /** 069 * Tear down the WebDriver test 070 * 071 * @throws Exception 072 */ 073 @After 074 public void tearDown() throws Exception { 075 driver.quit(); 076 } 077 078 /** 079 * Check if an element is present 080 * 081 * <p> 082 * This test takes a while due to the 'implicit wait' time. 083 * </p> 084 * 085 * @param by The locating mechanism of the element 086 * @return true if the element is present, false otherwise 087 */ 088 public boolean isElementPresent(By by) { 089 if (driver.findElements(by).isEmpty()) { 090 return false; 091 } else { 092 return true; 093 } 094 } 095 096 /** 097 * Quickly check if an element is present 098 * 099 * <p> 100 * Just like {@link #isElementPresent(org.openqa.selenium.By)} but with a short 'implicit wait' time. Use this only 101 * if it is guaranteed that all elements are rendered. 102 * </p> 103 * 104 * @param by The locating mechanism of the element 105 * @return true if the element is present, false otherwise 106 */ 107 public boolean isElementPresentQuick(By by) { 108 driver.manage().timeouts().implicitlyWait(SHORT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS); 109 boolean result = isElementPresent(by); 110 driver.manage().timeouts().implicitlyWait(DEFAULT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS); 111 return result; 112 } 113 114 /** 115 * Assert that clicking an element causes a popup window with a specific URL 116 * 117 * @param by The locating mechanism of the element to be clicked 118 * @param windowName The name of the popup window 119 * @param url The URL of the popup window 120 */ 121 public void assertPopUpWindowUrl(By by, String windowName, String url) { 122 driver.findElement(by).click(); 123 String parentWindowHandle = driver.getWindowHandle(); 124 // wait page to be loaded 125 driver.switchTo().window(windowName).findElements(By.tagName("head")); 126 assertEquals(url, driver.getCurrentUrl()); 127 driver.switchTo().window(parentWindowHandle); 128 } 129 130 }