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    package edu.samplu.common;
017    
018    import com.thoughtworks.selenium.Selenium;
019    import org.junit.After;
020    import org.junit.Assert;
021    import org.junit.Before;
022    import org.openqa.selenium.WebDriver;
023    import org.openqa.selenium.WebDriverBackedSelenium;
024    
025    import static junit.framework.Assert.fail;
026    import static org.junit.Assert.assertTrue;
027    
028    /**
029     * @deprecated Use WebDriverITBase for new tests.
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     */
032    public abstract class UpgradedSeleniumITBase {
033        private Selenium selenium;
034        protected WebDriver driver;
035    
036        protected String getBaseUrlString() {
037            return ITUtil.getBaseUrlString();
038        }
039    
040        /**
041         * Returns the URL to be used with this test
042         *
043         * @return URL of the test
044         */
045        public abstract String getTestUrl();
046    
047        /**
048         * Override in test to define a user other than admin
049         * @return
050         */
051        public String getUserName() {
052            return "admin";
053        }
054    
055        @Before
056        public void setUp() throws Exception {
057            driver = ITUtil.getWebDriver();
058            if (!getTestUrl().startsWith("/")) {
059                fail("getTestUrl does not start with /"); // TODO add it?
060            }
061            selenium = new WebDriverBackedSelenium(driver, ITUtil.getBaseUrlString() + getTestUrl());
062    
063            // Login
064            selenium.open(ITUtil.getBaseUrlString() + getTestUrl());
065            ITUtil.loginSe(selenium, getUserName());
066        }
067    
068        protected void assertDocFinal(String docId) {
069            ITUtil.assertDocFinal(selenium, docId);
070        }
071    
072        protected void assertElementPresent(String locator) {
073            assertTrue(isElementPresent(locator));
074        }
075    
076        protected void assertTextPresent(String text) {
077            assertTextPresent("", text);
078        }
079    
080        protected void assertTextPresent(String message, String text) {
081            assertTrue(text + " text not present " + message, selenium.isTextPresent(text));
082        }
083    
084        protected void blanketApproveTest() throws InterruptedException {
085            ITUtil.blanketApprove(selenium);
086        }
087    
088        protected void close() {
089            selenium.close();
090        }
091    
092        protected void check(String locator) {
093            selenium.check(locator);
094        }
095        
096        protected void checkErrorMessageItem(String message) {
097            ITUtil.checkErrorMessageItem(selenium, message);
098        }
099    
100        protected void checkForIncidentReport(String locator) {
101            checkForIncidentReport(locator, "");
102        }
103    
104        protected void checkForIncidentReport(String locator, String message) {
105            ITUtil.checkForIncidentReport(selenium, message);
106        }
107    
108        protected void chooseCancelOnNextConfirmation() {
109            selenium.chooseCancelOnNextConfirmation();
110        }
111    
112        protected void colapseExpand(String clickLocator, String visibleLocator) throws InterruptedException {
113            waitAndClick(clickLocator);
114            waitNotVisible(visibleLocator);
115    
116            waitAndClick(clickLocator);
117            waitIsVisible(visibleLocator);
118        }
119    
120        protected void expandColapse(String clickLocator, String visibleLocator) throws InterruptedException {
121            waitAndClick(clickLocator);
122            waitIsVisible(visibleLocator);
123    
124            waitAndClick(clickLocator);
125            waitNotVisible(visibleLocator);
126        }
127    
128        protected void fireEvent(String locator, String event) {
129            selenium.fireEvent(locator, event);
130        }
131    
132        protected void focus(String locator) {
133            selenium.focus(locator);
134        }
135    
136        protected void focusAndType(String fieldLocator, String typeText) {
137            selenium.focus(fieldLocator);
138            selenium.type(fieldLocator, typeText);
139        }
140    
141        protected String[] getAllWindowTitles() {
142            return selenium.getAllWindowTitles();
143        }
144    
145        protected String getAttribute(String attributeLocator) {
146            return selenium.getAttribute(attributeLocator);
147        }
148    
149        protected String getConfirmation() {
150            return selenium.getConfirmation();
151        }
152    
153        protected Number getCssCount(String cssCountRows) {
154            return selenium.getCssCount(cssCountRows);
155        }
156    
157        protected String getSelectedLabel(String locator) {
158            return selenium.getSelectedLabel(locator);
159        }
160    
161        protected String[] getSelectOptions(String locator) {
162            return selenium.getSelectOptions(locator);
163        }
164        
165        protected String getEval(String script) {
166            return selenium.getEval(script);
167        }
168        
169        protected String getLocation() {
170            return selenium.getLocation();
171        }
172        
173        protected String getText(String locator) {
174            return selenium.getText(locator);
175        }
176    
177        protected String getTitle() {
178            return selenium.getTitle();
179        }
180    
181        protected String getValue(String locator) {
182            return selenium.getValue(locator);
183        }
184    
185        protected boolean isElementPresent(String locator) {
186            return selenium.isElementPresent(locator);
187        }
188        
189        protected boolean isTextPresent(String locator) {
190            return selenium.isTextPresent(locator);
191        }
192    
193        protected boolean isVisible(String locator) {
194            return selenium.isVisible(locator);
195        }
196    
197        protected void keyDown(String locator, String key) {
198            selenium.keyDown(locator, key);
199        }
200    
201        protected void keyPress(String locator, String key) {
202            selenium.keyPress(locator, key);
203        }
204    
205        protected void keyUp(String locator, String key) {
206            selenium.keyUp(locator, key);
207        }
208    
209        protected void mouseOver(String locator) {
210            selenium.mouseOver(locator);
211        }
212        
213        protected void mouseOut(String locator) {
214            selenium.mouseOut(locator);
215        }
216        
217        protected void open(String url) {
218            selenium.open(url);
219        }
220        
221        protected void removeAllSelections(String locator) {
222            selenium.removeAllSelections(locator);
223        }
224        
225        protected void select(String locator, String select) {
226            selenium.select(locator, select);
227        }
228    
229        protected void selectFrame(String frameName) {
230            selenium.selectFrame(frameName);
231        }
232    
233        protected void setSpeed(String speed) {
234            selenium.setSpeed(speed);
235        }
236    
237        protected void selectWindow(String windowName) {
238            selenium.selectWindow(windowName);
239        }
240    
241        protected void uncheck(String locator) {
242            selenium.uncheck(locator);
243        }
244        
245        protected void waitAndClick(String locator) throws InterruptedException {
246            waitAndClick(locator, "");
247        }
248    
249        protected void waitAndClick(String locator, String message) throws InterruptedException {
250            ITUtil.waitAndClick(selenium, locator, message);
251        }
252    
253        protected String waitForDocId() throws InterruptedException {
254            ITUtil.waitForElement(selenium, AdminMenuITBase.DOC_ID_LOCATOR);
255            return selenium.getText(AdminMenuITBase.DOC_ID_LOCATOR);
256        }
257    
258        protected void waitAndType(String elementLocator, String text) throws InterruptedException {
259            waitAndType(elementLocator, text, "");
260        }
261    
262        protected void waitAndType(String elementLocator, String text, String message) throws InterruptedException {
263            ITUtil.waitAndType(selenium, elementLocator, text, message);
264        }
265    
266        protected void waitNotVisible(String visibleLocator) throws InterruptedException {
267            for (int second = 0;; second++) {
268                if (second >= 15) {
269                    Assert.fail("timeout");
270                }
271    
272                if (!isVisible(visibleLocator)) {
273                    break;
274                }
275    
276                Thread.sleep(1000);
277            }
278        }
279    
280        protected void waitIsVisible(String visibleLocator) throws InterruptedException {
281            for (int second = 0;; second++) {
282                if (second >= 15) {
283                    Assert.fail("timeout");
284                }
285                if (isVisible(visibleLocator)) {
286                    break;
287                }
288                Thread.sleep(1000);
289            }
290        }
291    
292        protected void waitForElementPresent(String locator) throws InterruptedException {
293            waitForElementPresent(locator, "");
294        }
295    
296        // TODO this should be message first
297        protected void waitForElementPresent(String locator, String message) throws InterruptedException {
298            ITUtil.waitForElement(selenium, locator, message);
299        }
300        
301        protected void waitForElementVisible(String locator, String message) throws InterruptedException {
302            ITUtil.waitForElementVisible(selenium, locator, message);
303        }
304    
305        protected void waitForPageToLoad() {
306            waitForPageToLoad(ITUtil.DEFAULT_WAIT_FOR_PAGE_TO_LOAD_TIMEOUT);
307        }
308    
309        protected void waitForPageToLoad50000() {
310            waitForPageToLoad("50000");
311        }
312    
313        protected void waitForPageToLoad(String number) {
314            selenium.waitForPageToLoad(number);
315        }
316        
317        protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
318            waitForTitleToEqualKualiPortalIndex("");
319        }
320    
321        protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
322            ITUtil.waitForTitleToEqual(selenium, ITUtil.KUALI_PORTAL_TITLE, message);
323        }
324    
325        protected void windowFocus() {
326            selenium.windowFocus();
327        }
328    
329        /**
330         * Useful to set -Dremote.driver.dontTearDown=f  -Dremote.driver.dontTearDown=n to not shutdown the browser when
331         * working on tests.
332         * @throws Exception
333         */
334        @After
335        public void tearDown() throws Exception {
336            if (ITUtil.dontTearDownPropertyNotSet()) {
337                selenium.stop();
338                driver.quit(); // TODO not tested with chrome, the service stop might need this check too
339            }
340        }
341    }