View Javadoc

1   package edu.samplu.common;
2   
3   import java.io.BufferedReader;
4   import java.io.InputStreamReader;
5   import java.net.HttpURLConnection;
6   import java.net.URL;
7   import java.util.List;
8   import java.util.concurrent.TimeUnit;
9   
10  //import com.saucelabs.common.SauceOnDemandAuthentication;
11  //import com.saucelabs.common.SauceOnDemandSessionIdProvider;
12  //import com.saucelabs.junit.SauceOnDemandTestWatcher;
13  //import com.saucelabs.saucerest.SauceREST;
14  import org.junit.After;
15  import org.junit.Assert;
16  import org.junit.Before;
17  import org.junit.BeforeClass;
18  import org.junit.Rule;
19  import org.junit.rules.TestName;
20  import org.openqa.selenium.By;
21  import org.openqa.selenium.JavascriptExecutor;
22  import org.openqa.selenium.WebDriver;
23  import org.openqa.selenium.WebElement;
24  import org.openqa.selenium.chrome.ChromeDriverService;
25  import org.openqa.selenium.remote.RemoteWebDriver;
26  
27  import static com.thoughtworks.selenium.SeleneseTestBase.fail;
28  import static org.junit.Assert.assertEquals;
29  
30  /**
31   * Class to upgrade UpgradedSeleniumITBase tests to WebDriver.
32   * @deprecated Use WebDriverITBase for new tests.
33   * @author Kuali Rice Team (rice.collab@kuali.org)
34   */
35  public abstract class WebDriverLegacyITBase { //} implements SauceOnDemandSessionIdProvider {
36  
37      public static final int DEFAULT_WAIT_SEC = 60;
38      public static final String SAUCE_USER = "SAUCE_USER";
39      public static final String SAUCE_KEY = "SAUCE_KEY";
40  
41      public abstract String getTestUrl();
42  
43      protected WebDriver driver;
44      protected String user = "admin";
45      protected boolean passed = false;
46      static ChromeDriverService chromeDriverService;
47  
48  //    public SauceOnDemandAuthentication authentication = new SauceOnDemandAuthentication(SAUCE_USER, SAUCE_KEY);
49  //
50  //    public @Rule SauceOnDemandTestWatcher resultReportingTestWatcher = new SauceOnDemandTestWatcher(this, authentication);
51  
52      public @Rule TestName testName= new TestName();
53  
54      String sessionId = null;
55  
56      public String getSessionId() {
57          return sessionId;
58      }
59  
60      @BeforeClass
61      public static void createAndStartService() throws Exception {
62          chromeDriverService = WebDriverUtil.createAndStartService();
63          if (chromeDriverService != null) chromeDriverService.start();
64      }
65  
66      /**
67       * Setup the WebDriver test, login and load the tested web page
68       *
69       * @throws Exception
70       */
71      @Before
72      public void setUp() throws Exception {
73          // {"test":"1","user":"1"}
74  //        String userResponse = getHTML("http://testuserpool.appspot.com/userpool?test=" + this.toString().trim());
75  //        user = userResponse.substring(userResponse.lastIndexOf(":" ) + 2, userResponse.lastIndexOf("\""));
76          driver = WebDriverUtil.setUp(getUserName(), ITUtil.getBaseUrlString() + "/" + getTestUrl(),
77                  getClass().getSimpleName(), testName);
78          this.sessionId = ((RemoteWebDriver)driver).getSessionId().toString();
79      }
80  
81      @After
82      public void tearDown() throws Exception {
83  //        SauceREST client = new SauceREST(SAUCE_USER, SAUCE_KEY);
84  //        /* Using a map of udpates:
85  //         * (http://saucelabs.com/docs/sauce-ondemand#alternative-annotation-methods)
86  //         *
87  //         * Map<String, Object> updates = new HashMap<String, Object>();
88  //         * updates.put("name", "this job has a name");
89  //         * updates.put("passed", true);
90  //         * updates.put("build", "c234");
91  //         * client.updateJobInfo("<your-job-id>", updates);
92  //         */
93  //        if (passed) {
94  //            client.jobPassed(sessionId);
95  //        } else {
96  //            client.jobFailed(sessionId);
97  //        }
98  //
99  //        getHTML("http://testuserpool.appspot.com/userpool?test=" + this.toString() + "&user=" + user);
100         driver.close();
101         driver.quit();
102     }
103 
104    protected String getHTML(String urlToRead) {
105       URL url;
106       HttpURLConnection conn;
107       BufferedReader rd;
108       String line;
109       String result = "";
110       try {
111          url = new URL(urlToRead);
112          conn = (HttpURLConnection) url.openConnection();
113          conn.setRequestMethod("GET");
114          rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
115          while ((line = rd.readLine()) != null) {
116             result += line;
117          }
118          rd.close();
119       } catch (Exception e) {
120          e.printStackTrace();
121       }
122       return result;
123    }
124 
125     protected void passed() {
126         passed = true;
127     }
128 
129     protected void assertElementPresentByName(String name) {
130         driver.findElement(By.name(name));
131     }
132     
133     protected void assertElementPresentByName(String name,String message) {
134         try{
135                 driver.findElement(By.name(name));
136         }catch(Exception e){
137                 Assert.fail(name+ " not present "+ message);                
138         }
139     }
140 
141     protected void assertElementPresentByXpath(String locator) {
142         driver.findElement(By.xpath(locator));
143     }
144     
145     protected void assertElementPresentByXpath(String locator,String message) {
146         try{
147                 driver.findElement(By.xpath(locator));
148         }catch(Exception e){
149                 Assert.fail(locator+ " not present "+ message);                
150         }
151     }
152     
153     protected void assertElementPresent(String locator) {
154         driver.findElement(By.cssSelector(locator));
155     }
156     
157     protected void assertTextPresent(String text) {
158         assertTextPresent(text, "");
159     }
160 
161     protected void assertTextPresent(String text, String message) {
162         if (!driver.getPageSource().contains(text)) {
163             Assert.fail(text + " not present " + message);
164         }
165     }
166 
167     protected void blanketApproveTest() throws InterruptedException {
168         ITUtil.checkForIncidentReport(driver.getPageSource(), "methodToCall.blanketApprove", "");
169         waitAndClickByName("methodToCall.blanketApprove", "No blanket approve button does the user " + getUserName() + " have permission?");
170         Thread.sleep(2000);
171 
172         if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size()>0) {
173             String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
174             if (errorText != null && errorText.contains("error(s) found on page.")) {
175                 errorText = ITUtil.blanketApprovalCleanUpErrorText(errorText);
176                 if (driver.findElements(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).size()>0) { // not present if errors are at the bottom of the page (see left-errmsg below)
177                     errorText = ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).getText()); // replacing errorText as DIV_EXCOL_LOCATOR includes the error count
178                 }
179 
180                 //                if (selenium.isElementPresent("//div[@class='left-errmsg']/div")) {
181                 //                    errorText = errorText + " " + selenium.getText("//div[@class='left-errmsg']/div/div[1]");
182                 //                }
183                 Assert.fail(errorText);
184             }
185         }
186         ITUtil.checkForIncidentReport(driver.getPageSource(), "//img[@alt='doc search']", "Blanket Approve failure");
187         waitAndClickByXpath("//img[@alt='doc search']");
188         assertEquals("Kuali Portal Index", driver.getTitle());
189         selectFrame("iframeportlet");
190         waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
191     }
192 
193     protected void checkForIncidentReport() {
194         checkForIncidentReport("", "");
195     }
196 
197     protected void checkForIncidentReport(String locator) {
198         checkForIncidentReport(locator, "");
199     }
200 
201     protected void checkForIncidentReport(String locator, String message) {
202         WebDriverUtil.checkForIncidentReport(driver, locator, message);
203     }
204 
205     protected String getAttribute(By by, String attribute) throws InterruptedException {
206         waitFor(by);
207         return driver.findElement(by).getAttribute(attribute);
208     }
209     
210     /**
211      * Get value of any attribute by using element name
212      *
213      *@param name name of an element
214      *@param attribute the name of an attribute whose value is to be retrieved
215     */
216     protected String getAttributeByName(String name,String attribute) throws InterruptedException {
217         return getAttribute(By.name(name),attribute);
218     }
219     
220     /**
221      * Get value of any attribute by using element xpath
222      *
223      *@param locator locating mechanism of an element
224      *@param attribute the name of an attribute whose value is to be retrieved
225     */
226     protected String getAttributeByXpath(String locator,String attribute) throws InterruptedException {
227         return getAttribute(By.xpath(locator),attribute);
228     }
229            
230     protected String getBaseUrlString() {
231         return ITUtil.getBaseUrlString();
232     }
233 
234     protected String getText(By by)  throws InterruptedException {
235         return driver.findElement(by).getText();
236     }
237 
238     protected String getTextByName(String name) throws InterruptedException {
239         return getText(By.name(name));
240     }
241     
242     protected String getText(String locator) throws InterruptedException {
243         return getText(By.cssSelector(locator));
244     }
245 
246     protected String getTextByXpath(String locator) throws InterruptedException {
247         return getText(By.xpath(locator));
248     }
249 
250     protected String getTitle() {
251         return driver.getTitle();
252     }
253 
254     /**
255      * Override in test to define a user other than admin
256      * @return
257      */
258     public String getUserName() {
259         return user;
260     }
261 
262     protected boolean isElementPresent(By by) {
263         return (driver.findElements(by)).size()>0;
264     }
265     
266     protected boolean isElementPresentByName(String name) {
267         return isElementPresent(By.name(name));
268     }
269     
270     protected boolean isElementPresentByXpath(String locator) {
271         return isElementPresent(By.xpath(locator));
272     }
273     
274     protected void open(String url) {
275         driver.get(url);
276     }
277 
278     protected void selectFrame(String locator) {
279         driver.switchTo().frame(locator);
280     }
281     
282     protected void selectTopFrame() {
283         driver.switchTo().defaultContent();
284     }
285     
286     protected void selectWindow(String locator) {
287         driver.switchTo().window(locator);
288     }
289 
290     protected String waitForDocId() throws InterruptedException {
291         waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]");
292         return driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText();
293     }
294     
295     protected void waitForElementPresent(String locator) throws InterruptedException {
296         waitFor(By.cssSelector(locator));
297     }
298 
299     protected void waitForElementPresentByXpath(String locator) throws InterruptedException {
300         waitFor(By.xpath(locator));
301     }
302     
303     protected void waitForElementPresentByName(String name) throws InterruptedException {
304         waitFor(By.name(name));
305     }
306 
307     protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
308         waitForTitleToEqualKualiPortalIndex("");
309     }
310 
311     protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
312         boolean failed = false;
313         for (int second = 0;; second++) {
314             Thread.sleep(1000);
315             if (second >= 60) failed = true;
316             try { if (failed || ITUtil.KUALI_PORTAL_TITLE.equals(driver.getTitle())) break; } catch (Exception e) {}
317         }
318         WebDriverUtil.checkForIncidentReport(driver, message); // after timeout to be sure page is loaded
319         if (failed) fail("timeout of " + 60 + " seconds " + message);
320     }
321 
322     protected void waitAndClick(String locator) throws InterruptedException {
323         waitAndClick(locator, "");
324     }
325 
326     protected void waitForPageToLoad() {
327         // noop webdriver doesn't it need it, except when it does...
328     }
329 
330     protected void waitFor(By by) throws InterruptedException {
331         waitFor(by, "");
332     }
333 
334     protected void waitFor(By by, String message) throws InterruptedException {
335 //        for (int second = 0;; second++) {
336             Thread.sleep(1000);
337         driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
338 
339 //            if (second >= DEFAULT_WAIT_SEC) fail(by.toString() + " " + message + " " + DEFAULT_WAIT_SEC + " sec timeout.");
340             try { driver.findElement(by);
341                 //break;
342             } catch (Exception e) {}
343         driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
344 //        }
345     }
346 
347     protected void waitAndClick(By by) throws InterruptedException {
348         waitAndClick(by, "");
349     }
350 
351     protected void waitAndClick(By by, String message) throws InterruptedException {
352         waitFor(by, message);
353         try {
354             (driver.findElement(by)).click();
355         } catch (Exception e) {
356             fail(e.getMessage() + " " + by.toString() + " " + message);
357             e.printStackTrace();
358         }
359     }
360 
361     protected void waitAndClick(String locator, String message) throws InterruptedException {
362         waitAndClick(By.cssSelector(locator), message);
363     }
364 
365     protected void waitAndClickByLinkText(String text) throws InterruptedException {
366         waitAndClick(By.linkText(text),"");
367     }
368 
369     protected void waitAndClickByLinkText(String text, String message) throws InterruptedException {
370         waitAndClick(By.linkText(text), message);
371     }
372 
373     protected void waitAndClickByName(String name) throws InterruptedException {
374         waitAndClick(By.name(name), "");
375     }
376 
377     protected void waitAndClickByXpath(String xpath) throws InterruptedException {
378         waitAndClick(By.xpath(xpath));
379     }
380 
381     protected void waitAndClickByName(String name, String message) throws InterruptedException {
382         waitAndClick(By.name(name), message);
383     }
384     
385     protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException {
386         waitAndClick(By.xpath(xpath), message);
387     }
388 
389     protected void waitAndType(By by, String text) throws InterruptedException {
390         waitFor(by, "");
391         try {
392             (driver.findElement(by)).sendKeys(text);
393         } catch (Exception e) {
394             fail(e.getMessage() + " " + by.toString() + " " + text);
395             e.printStackTrace();
396         }
397     }
398     
399     protected void waitAndType(By by, String text, String message) throws InterruptedException {
400         waitFor(by, "");
401         try {
402             (driver.findElement(by)).sendKeys(text);
403         } catch (Exception e) {
404             fail(e.getMessage() + " " + by.toString() + " " + text + "  "+message);
405             e.printStackTrace();
406         }
407     }
408     
409     protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException {
410         waitAndType(By.xpath(locator), text);
411     }
412     
413     protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException {
414         waitAndType(By.xpath(locator), text, message);
415     }
416     
417     protected void waitAndTypeByName(String name, String text) throws InterruptedException {
418         waitAndType(By.name(name), text);
419     }
420     
421     protected void selectByXpath(String locator, String select) throws InterruptedException {
422         select(By.xpath(locator), select);
423     }
424     
425     protected void selectByName(String name, String select) throws InterruptedException {
426         select(By.name(name), select);
427     }
428     
429     protected void select(By by, String select)  throws InterruptedException {
430         WebElement select1 = driver.findElement(by);
431         List<WebElement> options = select1.findElements(By.tagName("option"));
432         for(WebElement option : options){
433             if(option.getText().equals(select)){
434                 option.click();
435                 break;
436             }
437         }
438     }
439     
440     protected String[] getSelectOptions(By by) throws InterruptedException {
441         WebElement select1 = driver.findElement(by);
442         List<WebElement> options = select1.findElements(By.tagName("option"));
443         String[] optionValues = new String[options.size()];
444         int counter=0;
445         for(WebElement option : options){
446             optionValues[counter] = option.getAttribute("value");
447             counter++;
448         }
449         return optionValues;
450     }
451     
452     protected String[] getSelectOptionsByName(String name) throws InterruptedException {
453         return getSelectOptions(By.name(name));
454     }
455     
456     protected String[] getSelectOptionsByXpath(String locator) throws InterruptedException {
457         return getSelectOptions(By.xpath(locator));
458     }
459     
460     protected int getCssCount(String selector) {
461         return getCssCount(By.cssSelector(selector));
462     }
463     
464     protected int getCssCount(By by) {
465         return (driver.findElements(by)).size();
466     }
467     
468     protected void checkErrorMessageItem(String message)
469     {
470         final String error_locator = "//li[@class='uif-errorMessageItem']";
471         assertElementPresentByXpath(error_locator);
472         String errorText=null;
473         try {
474             errorText = getTextByXpath(error_locator);
475         } catch (InterruptedException e) {
476             e.printStackTrace();
477         }
478         if (errorText != null && errorText.contains("errors")) {
479             Assert.fail(errorText + message);
480         }
481                
482     }
483     
484     protected boolean isVisibleByXpath(String locator) {
485         return isVisible(By.xpath(locator));
486     }
487     
488     protected boolean isVisible(String locator) {
489         return driver.findElement(By.cssSelector(locator)).isDisplayed();
490     }
491         
492     protected boolean isVisible(By by) {
493         return driver.findElement(by).isDisplayed();
494     }
495     
496     protected void waitNotVisibleByXpath(String locator) throws InterruptedException {
497         for (int second = 0;; second++) {
498             if (second >= 15) {
499                 Assert.fail("timeout");
500             }
501 
502             if (!isVisibleByXpath(locator)) {
503                 break;
504             }
505 
506             Thread.sleep(1000);
507         }
508     }
509 
510     protected void waitIsVisibleByXpath(String locator) throws InterruptedException {
511         for (int second = 0;; second++) {
512             if (second >= 15) {
513                 Assert.fail("timeout");
514             }
515             if (isVisibleByXpath(locator)) {
516                 break;
517             }
518             Thread.sleep(1000);
519         }
520     }
521     
522     protected void colapseExpandByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
523         waitAndClickByXpath(clickLocator);
524         waitNotVisibleByXpath(visibleLocator);
525 
526         waitAndClickByXpath(clickLocator);
527         waitIsVisibleByXpath(visibleLocator);
528     }
529 
530     protected void expandColapseByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
531         waitAndClickByXpath(clickLocator); 
532         waitIsVisibleByXpath(visibleLocator);
533 
534         waitAndClickByXpath(clickLocator);
535         waitNotVisibleByXpath(visibleLocator);
536     }
537     
538     protected void fireEvent(String name, String event) {    
539         ((JavascriptExecutor)driver).executeScript("document.getElementsByName('"+name+"')[0]."+event+"()");
540     }
541     
542     protected void clearTextByName(String name) throws InterruptedException {
543         clearText(By.name(name));
544     }
545     
546     protected void clearTextByXpath(String locator) throws InterruptedException {
547         clearText(By.xpath(locator));
548     }
549     
550     protected void clearText(By by)  throws InterruptedException {
551         driver.findElement(by).clear();        
552     }
553 }