1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package edu.samplu.common;
17  
18  import com.thoughtworks.selenium.SeleneseTestBase;
19  import edu.samplu.admin.test.AdminTmplMthdSTNavBase;
20  import org.apache.commons.lang.RandomStringUtils;
21  import org.apache.commons.logging.Log;
22  import org.apache.commons.logging.LogFactory;
23  import org.junit.After;
24  import org.junit.Before;
25  import org.junit.BeforeClass;
26  import org.junit.Rule;
27  import org.junit.rules.TestName;
28  import org.openqa.selenium.Alert;
29  import org.openqa.selenium.By;
30  import org.openqa.selenium.JavascriptExecutor;
31  import org.openqa.selenium.NoSuchElementException;
32  import org.openqa.selenium.NoSuchWindowException;
33  import org.openqa.selenium.WebDriver;
34  import org.openqa.selenium.WebElement;
35  import org.openqa.selenium.chrome.ChromeDriverService;
36  import org.openqa.selenium.interactions.Actions;
37  import org.openqa.selenium.remote.RemoteWebDriver;
38  import org.openqa.selenium.support.ui.Select;
39  
40  import java.lang.reflect.Method;
41  import java.util.ArrayList;
42  import java.util.Calendar;
43  import java.util.LinkedList;
44  import java.util.List;
45  import java.util.Set;
46  import java.util.concurrent.TimeUnit;
47  
48  import static org.junit.Assert.assertEquals;
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  public abstract class WebDriverLegacyITBase implements Failable { 
68  
69      
70  
71  
72      public static final String ADMINISTRATION_LINK_TEXT = "Administration";
73  
74      
75  
76  
77      public static final String AGENDA_LOOKUP_LINK_TEXT = "Agenda Lookup";
78  
79      
80  
81  
82      public static final String ARIA_INVALID_XPATH = "//input[@aria-invalid]";
83  
84      
85  
86  
87      public static final String BLANKET_APPROVE_NAME = "methodToCall.blanketApprove";
88  
89      
90  
91  
92  
93      public static final String CANCEL_NAME = "methodToCall.cancel";
94  
95      
96  
97  
98  
99      public static final String CANCEL2_XPATH = "//a[contains(text(), 'ancel')]";
100 
101     
102 
103 
104     public static final String CLOSE_WINDOW_XPATH_TITLE = "//*[@title='close this window']";
105 
106     
107 
108 
109     public static final String COLLECTIONS_LINK_TEXT = "Collections";
110 
111     
112 
113 
114     public static final String CONFIGURATION_VIEW_WINDOW_TITLE = "Kuali :: Configuration Test View";
115 
116     
117 
118 
119     public static final String CONFIGURATION_VIEW_XPATH = "(//a[contains(text(),'Configuration Test View')])";
120 
121     
122 
123 
124     public static final String COPY_LINK_TEXT = "copy";
125 
126     
127 
128 
129     public static final String CREATE_NEW_DOCUMENT_NOT_SUBMITTED_SUCCESSFULLY_MESSAGE_TEXT = "New Document not submitted successfully";
130 
131     
132 
133 
134     public static final String CREATE_NEW_XPATH = "//img[@alt='create new']";
135 
136     
137 
138 
139     public static final int DEFAULT_WAIT_SEC = 30;
140 
141     
142 
143 
144     public static final String DIV_LEFT_ERRMSG = "//div[@class='left-errmsg-tab']/div/div";
145 
146     
147 
148 
149     public static final String DOC_CODE_XPATH = "//input[@id='document.newMaintainableObject.code']";
150 
151     
152 
153 
154     public static final String DOC_ID_XPATH = "//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]";
155 
156     
157 
158 
159     public static final String DOC_ID_XPATH_2 = "//table[@id='row']/tbody/tr[1]/td[1]";
160 
161     
162 
163 
164     public static final String DOC_ID_XPATH_3 ="//table[@id='row']/tbody/tr[1]/td[1]/a";
165 
166     
167 
168 
169     public static final String DOC_DESCRIPTION_XPATH ="//input[@id='document.documentHeader.documentDescription']";
170 
171     
172 
173 
174     public static final String DOC_SEARCH_XPATH = "//img[@alt='doc search']";
175 
176     
177 
178 
179     public static final String DOC_SEARCH_XPATH_TITLE = "//a[@title='Document Search']";
180 
181     
182 
183 
184     public static final String DOC_STATUS_ENROUTE = "ENROUTE";
185 
186     
187 
188 
189     public static final String DOC_STATUS_FINAL = "FINAL";
190 
191     
192 
193 
194     public static final String DOC_STATUS_SAVED = "SAVED";
195 
196     
197 
198 
199     public static final String DOC_STATUS_XPATH = "//table[@class='headerinfo']//tr[1]/td[2]";
200 
201     
202 
203 
204     public static final String DOC_STATUS_XPATH_2 = "//table[@id='row']/tbody/tr[1]/td[4]";
205 
206     
207 
208 
209     public static final String DOC_SUBMIT_SUCCESS_MSG_XPATH ="//div[contains(div,'Document was successfully submitted.')]";
210 
211     
212 
213 
214     public static final String DONT_TEAR_DOWN_ON_FAILURE_PROPERTY = "remote.driver.dontTearDownOnFailure";
215 
216     
217 
218 
219     public static final String EDIT_LINK_TEXT = "edit";
220 
221     
222 
223 
224     public static final String IFRAMEPORTLET_NAME = "iframeportlet";
225 
226     
227 
228 
229     public static final String KITCHEN_SINK_XPATH = "(//a[contains(text(),'Uif Components (Kitchen Sink)')])";
230 
231     
232 
233 
234     public static final String KRAD_XPATH = "KRAD";
235 
236     
237 
238 
239     public static final String KUALI_UIF_COMPONENTS_WINDOW_XPATH = "Kuali :: Uif Components";
240 
241     
242 
243 
244     public static final String KUALI_VIEW_WINDOW_TITLE = "Kuali :: View Title";
245 
246     
247 
248 
249     public static final String LOGOUT_XPATH = "//input[@name='imageField' and @value='Logout']";
250 
251     
252 
253 
254     public static final String MAIN_MENU_LINK_TEXT = "Main Menu";
255 
256     
257 
258 
259     public static final String REGEX_ERROR = "^[\\s\\S]*error[\\s\\S]*$";
260 
261     
262 
263 
264     public static final String REGEX_VALID = "^.*\\bvalid\\b.*$";
265 
266     
267 
268 
269     public static final String REMOTE_PUBLIC_USER_PROPERTY = "remote.public.user";
270 
271     
272 
273 
274     public static final String REMOTE_PUBLIC_USERPOOL_PROPERTY = "remote.public.userpool";
275 
276     
277 
278 
279     public static final String REMOTE_PUBLIC_WAIT_SECONDS_PROPERTY = "remote.public.wait.seconds";
280 
281     
282 
283 
284     public static final String RETURN_VALUE_LINK_TEXT = "return value";
285 
286     
287 
288 
289     public static final String RICH_MESSAGES_WINDOW_TITLE = "Kuali :: Rich Messages";
290 
291     
292 
293 
294     public static final String SAVE_SUCCESSFUL_XPATH = "//div[contains(div,'Document was successfully saved.')]";
295 
296     
297 
298 
299     public static final String SAVE_XPATH="//input[@name='methodToCall.save' and @alt='save']";
300 
301     
302 
303 
304 
305     public static final String SAVE_XPATH_2 = "//*[@name='methodToCall.save' and @alt='save']";
306 
307     
308 
309 
310     public static final String SAVE_XPATH_3 = "//input[@title='search' and @name='methodToCall.search']";
311 
312     
313 
314 
315     public static final String SEARCH_XPATH="//input[@name='methodToCall.search' and @value='search']";
316 
317     
318 
319 
320     public static final String SUBMIT_XPATH="//input[@name='methodToCall.route' and @alt='submit']";
321 
322     
323 
324 
325     public static final String SEARCH_XPATH_2 = "//input[@value='search']";
326 
327     
328 
329 
330     public static final String SEARCH_XPATH_3 = "//button[contains(text(),'earch')]";
331 
332     
333 
334 
335     public static final String SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH =
336             "div.uif-group.uif-collectionGroup.uif-tableCollectionGroup.uif-tableSubCollection.uif-disclosure span.uif-headerText-span";
337 
338     
339 
340 
341     public static final String TIMEOUT_MESSAGE = "timeout";
342 
343     
344 
345 
346     public static final String TRAVEL_ACCOUNT_LOOKUP_LINK_TEXT = "Travel Account Lookup";
347 
348     
349 
350 
351     public static final String UIF_COMPONENTS_KITCHEN_SINK_LINK_TEXT = "Uif Components (Kitchen Sink)";
352 
353     
354 
355 
356     public static final String VALIDATION_FRAMEWORK_DEMO_XPATH = "(//a[contains(text(),'Validation Framework Demo')])";
357 
358     
359 
360 
361     public static final String KUALI_COLLECTION_TOTALLING_WINDOW_XPATH = "Kuali :: Collection Totaling";
362 
363     
364 
365 
366     public static final String KUALI_COLLECTION_TOTALLING_XPATH = "//a[text()='Collection Totaling']";
367     
368     
369 
370 
371     public static final String XML_INGESTER_LINK_TEXT = "XML Ingester";
372 
373     
374 
375 
376     public static final String FISCAL_OFFICER_INFO_MAINTENANCE_NEW_XPATH = "//a[@title='FiscalOfficerInfo Maintenance (New)']";
377 
378     static ChromeDriverService chromeDriverService;
379 
380     protected WebDriver driver;
381     protected String user = "admin";
382     protected int waitSeconds = DEFAULT_WAIT_SEC;
383     protected boolean passed = false;
384     protected String uiFramework = ITUtil.REMOTE_UIF_KNS;   
385 
386     private Log log = LogFactory.getLog(getClass());
387 
388     public @Rule
389     TestName testName = new TestName();
390 
391     protected String testMethodName;
392 
393     protected String jGrowlHeader;
394 
395     String sessionId = null;
396 
397     
398 
399 
400 
401 
402     @BeforeClass
403     public static void chromeDriverService() throws Exception {
404         chromeDriverService = WebDriverUtil.chromeDriverCreateCheck();
405         if (chromeDriverService != null)
406             chromeDriverService.start();
407     }
408 
409     
410 
411 
412 
413 
414 
415     public abstract String getTestUrl();
416 
417     
418 
419 
420 
421     protected void navigateInternal() throws Exception {
422         
423     }
424 
425     protected void startSession(Method method) throws Exception {
426         testMethodName = method.getName(); 
427     }
428 
429     
430 
431 
432 
433 
434 
435     @Before
436     public void testSetUp() {
437         
438         try { 
439             if (testName != null && testName.getMethodName() != null) { 
440                 testMethodName = testName.getMethodName();
441             }
442 
443             waitSeconds = Integer.parseInt(System.getProperty(REMOTE_PUBLIC_WAIT_SECONDS_PROPERTY, DEFAULT_WAIT_SEC + ""));
444             String givenUser = WebDriverUtil.determineUser(this.toString());
445             if (givenUser != null) {
446                 user = givenUser;
447             }
448 
449             String testUrl = kulrice9804(); 
450 
451             driver = WebDriverUtil.setUp(getUserName(), testUrl , getClass().getSimpleName(), testMethodName);
452             this.sessionId = ((RemoteWebDriver) driver).getSessionId().toString();
453 
454             jGrowlHeader = getClass().getSimpleName() + "." + testMethodName;
455             System.out.println(jGrowlHeader + " sessionId is " + sessionId);
456             WebDriverUtil.loginKradOrKns(driver, user, this);
457 
458             navigateInternal(); 
459 
460         } catch (Throwable t) {
461             System.out.println("Throwable " + t.getMessage() + " in Before annotated method is very bad, ignoring and letting first method of test class to fail.");
462             t.printStackTrace();
463             System.out.println("Throwable " + t.getMessage() + " in Before annotated method is very bad, ignoring and letting first method of test class to fail.");
464         }
465     }
466 
467     
468 
469 
470 
471     private String kulrice9804() {
472         String testUrl = getTestUrl();
473         if (testUrl.contains(ITUtil.HIDE_RETURN_LINK) &&
474             !testUrl.contains("&showMaintenanceLinks=true")) {
475             testUrl += "&showMaintenanceLinks=true";
476         }
477         return testUrl;
478     }
479 
480     
481 
482 
483 
484 
485 
486 
487     @After
488     public void tearDown() {
489         try {
490             if (!passed) { 
491                 jGrowlSticky("FAILURE!");
492             }
493 
494             WebDriverUtil.tearDown(passed, sessionId, this.toString().trim(), user);
495         } catch (Throwable t) {
496             System.out.println("Exception in tearDown " + t.getMessage());
497             t.printStackTrace();
498         }
499 
500         finally {
501             try {
502                 closeAndQuitWebDriver();
503             } catch (Throwable t) {
504                 System.out.println(t.getMessage() + " occured during tearDown, ignoring to avoid killing test run.");
505                 t.printStackTrace();
506                 System.out.println(t.getMessage() + " occured during tearDown, ignoring to avoid killing test run.");
507             }
508         }
509     }
510 
511     private void closeAndQuitWebDriver() {
512         if (driver != null) {
513             if (ITUtil.dontTearDownPropertyNotSet() && dontTearDownOnFailure()) {
514                 try {
515                     driver.close();
516                 } catch (NoSuchWindowException nswe) {
517                     System.out.println("NoSuchWindowException closing WebDriver " + nswe.getMessage());
518                 } finally {
519                     if (driver != null) {
520                         driver.quit();
521                     }
522                 }
523             }
524         }
525         
526         else {
527             System.out.println("WebDriver is null for " + this.getClass().toString() + ", if using saucelabs, has" +
528                     " sauceleabs been uncommented in WebDriverUtil.java?  If using a remote hub did you include the port?");
529         }
530     }
531 
532     private boolean dontTearDownOnFailure() {
533         if (!"n".equalsIgnoreCase(System.getProperty(DONT_TEAR_DOWN_ON_FAILURE_PROPERTY, "n"))) {
534             return passed;
535         }
536         return true;
537     }
538 
539     
540 
541 
542     protected void passed() {
543         passed = true;
544         jGrowlSticky("Passed");
545     }
546 
547     protected void agendaLookupAssertions() throws Exception {
548         testLookUp();
549         assertTextPresent("Rules");
550         waitAndClick(By.xpath(CANCEL2_XPATH));
551     }
552 
553     
554 
555 
556 
557     protected void alertAccept() {
558         Alert alert = driver.switchTo().alert();
559         
560         alert.accept();
561     }
562 
563     
564 
565 
566 
567     protected void alertDismiss() {
568         Alert alert = driver.switchTo().alert();
569         
570         alert.dismiss();
571     }
572 
573     protected void assertAttributeClassRegexDoesntMatch(String field, String regex) throws InterruptedException {
574         Thread.sleep(1000);
575         String attribute = getAttributeByName(field, "class");
576         SeleneseTestBase.assertTrue("getAttributeByName(" + field + ", \"class\") should not be null", attribute != null);
577         SeleneseTestBase.assertFalse("attribute " + attribute + " matches regex " + regex + " and it should not",
578                 attribute.matches(regex));
579     }
580 
581     protected void assertAttributeClassRegexMatches(String field, String regex) throws InterruptedException {
582         Thread.sleep(1000);
583         String attribute = getAttributeByName(field, "class");
584         SeleneseTestBase.assertTrue("getAttributeByName(" + field + ", \"class\") should not be null", attribute != null);
585         SeleneseTestBase.assertTrue("attribute " + attribute + " doesn't match regex " + regex, attribute.matches(
586                 regex));
587     }
588 
589     protected void assertBlanketApproveButtonsPresent() {
590         assertElementPresentByName("methodToCall.route");
591         assertElementPresentByName("methodToCall.save");
592         assertElementPresentByName(BLANKET_APPROVE_NAME, "Blanket Approve button not present does " + user + " have permssion?");
593         assertElementPresentByName("methodToCall.close");
594         assertElementPresentByName(CANCEL_NAME);
595     }
596 
597     protected void assertCancelConfirmation() throws InterruptedException {
598         waitAndClickByLinkText("Cancel");
599         alertDismiss();
600     }
601 
602     protected void assertDocFinal(String docId) throws InterruptedException {
603         jiraAwareWaitFor(By.linkText("spreadsheet"), "");
604 
605         if (isElementPresent(By.linkText(docId))) {
606             SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getDocStatus());
607         } else {
608             SeleneseTestBase.assertEquals(docId,driver.findElement(By.xpath(DOC_ID_XPATH_2)));
609             SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getDocStatus());
610         }
611     }
612 
613     protected void assertElementPresentByName(String name) {
614         driver.findElement(By.name(name));
615     }
616 
617     protected void assertElementPresentByName(String name, String message) {
618         try {
619             driver.findElement(By.name(name));
620         } catch (Exception e) {
621             failableFail(name + " not present " + message);
622         }
623     }
624 
625     protected void assertElementPresentByXpath(String locator) {
626         driver.findElement(By.xpath(locator));
627     }
628 
629     protected void assertElementPresentByXpath(String locator, String message) {
630         try {
631             driver.findElement(By.xpath(locator));
632         } catch (Exception e) {
633             jiraAwareFail(By.xpath(locator), message, e);
634         }
635     }
636 
637     protected void assertElementPresentByLinkText(String linkText) {
638         driver.findElement(By.linkText(linkText));
639     }
640 
641     protected void assertElementPresent(String locator) {
642         driver.findElement(By.cssSelector(locator));
643     }
644 
645     protected void assertFocusTypeBlurError(String field, String textToType) throws InterruptedException {
646         fireEvent(field, "focus");
647         waitAndTypeByName(field, textToType);
648         fireEvent(field, "blur");
649         Thread.sleep(200);
650         assertAttributeClassRegexMatches(field, REGEX_ERROR);
651     }
652 
653     protected void assertFocusTypeBlurError(String field, String[] errorInputs) throws InterruptedException {
654         for (String errorInput: errorInputs) {
655             assertFocusTypeBlurError(field, errorInput);
656             clearTextByName(field);
657         }
658     }
659 
660     protected void assertFocusTypeBlurValid(String field, String textToType) throws InterruptedException {
661         fireEvent(field, "focus");
662         waitAndTypeByName(field, textToType);
663         fireEvent(field, "blur");
664         Thread.sleep(200);
665         assertAttributeClassRegexMatches(field, REGEX_VALID);
666         assertAttributeClassRegexDoesntMatch(field, REGEX_ERROR);
667     }
668 
669     protected void assertFocusTypeBlurValid(String field, String[] validInputs) throws InterruptedException {
670         for (String validInput: validInputs) {
671             assertFocusTypeBlurValid(field, validInput);
672             clearTextByName(field);
673         }
674     }
675 
676     protected void assertIsVisibleByXpath(String xpath, String message) {
677         if (!isVisibleByXpath(xpath)) {
678             jiraAwareFail(xpath + " not visiable " + message);
679         }
680     }
681 
682     protected void assertIsNotVisibleByXpath(String xpath, String message) {
683         if (isVisibleByXpath(xpath)) {
684             jiraAwareFail(xpath + " not visiable " + message);
685         }
686     }
687 
688     protected void assertIsVisible(String locator) {
689         if (!isVisible(locator)) {
690             jiraAwareFail(locator + " is not visible and should be");
691         }
692     }
693 
694     protected void assertIsVisibleById(String id) {
695         if (!isVisibleById(id)) {
696             jiraAwareFail(id + " is not visible and should be");
697         }
698     }
699 
700     protected void assertIsNotVisible(String locator) {
701         if (isVisible(locator)) {
702             jiraAwareFail(locator + " is visible and should not be");
703         }
704     }
705 
706     protected void assertLabelFor(String forElementId, String labelText) {
707         SeleneseTestBase.assertEquals(labelText, getForLabelText(forElementId));
708     }
709 
710     
711 
712 
713 
714 
715 
716 
717     protected void assertPopUpWindowUrl(By by, String windowName, String url) {
718         driver.findElement(by).click();
719         String parentWindowHandle = driver.getWindowHandle();
720         
721         driver.switchTo().window(windowName).findElements(By.tagName("head"));
722         SeleneseTestBase.assertEquals(url, driver.getCurrentUrl());
723         driver.switchTo().window(parentWindowHandle);
724     }
725 
726     protected void assertTableLayout() {
727         String pageSource = driver.getPageSource();
728         SeleneseTestBase.assertTrue(pageSource.contains("Table Layout"));
729         SeleneseTestBase.assertTrue(pageSource.contains("Field 1"));
730         SeleneseTestBase.assertTrue(pageSource.contains("Field 2"));
731         SeleneseTestBase.assertTrue(pageSource.contains("Field 3"));
732         SeleneseTestBase.assertTrue(pageSource.contains("Field 4"));
733         SeleneseTestBase.assertTrue(pageSource.contains("Actions"));
734     }
735 
736     protected void assertTextPresent(String text) {
737         assertTextPresent(text, "");
738     }
739 
740     protected void assertTextPresent(String text, String message) {
741         String pageSource = driver.getPageSource();
742         if (!pageSource.contains(text)) {
743             failableFail(text + " not present " + message);
744         }
745     }
746 
747     protected void assertTextPresent(String text, String cssSelector, String message){
748         WebElement element = driver.findElement(By.cssSelector(cssSelector));
749         if (!element.getText().contains(text)){
750             failableFail(text + " for " + cssSelector + " not present " + message);
751         }
752     }
753 
754     
755 
756 
757 
758     protected void assertTextNotPresent(String text) {
759         assertTextNotPresent(text, "");
760     }
761 
762     
763 
764 
765 
766 
767     protected void assertTextNotPresent(String text, String message) {
768         if (driver.getPageSource().contains(text)) {
769             failableFail(text + " not present " + message);
770         }
771     }
772 
773     protected void back() {
774         driver.navigate().back();
775     }
776 
777     private void blanketApproveAssert() throws InterruptedException {
778         checkForDocError();
779         ITUtil.checkForIncidentReport(driver.getPageSource(), DOC_SEARCH_XPATH, this, "Blanket Approve failure");
780         waitAndClickDocSearch();
781         waitForElementsPresentByClassName("footer-copyright", "footer-copyright");
782         SeleneseTestBase.assertEquals("Kuali Portal Index", driver.getTitle());
783         selectFrameIframePortlet();
784         waitAndClickSearch();
785     }
786 
787     protected void blanketApproveCheck() throws InterruptedException {
788         ITUtil.checkForIncidentReport(driver.getPageSource(), BLANKET_APPROVE_NAME, this, "");
789         waitAndClickByName(BLANKET_APPROVE_NAME,
790                 "No blanket approve button does the user " + getUserName() + " have permission?");
791         Thread.sleep(2000);
792     }
793 
794     
795 
796 
797 
798 
799 
800 
801     protected void blanketApproveTest() throws InterruptedException {
802         ITUtil.checkForIncidentReport(driver.getPageSource(), BLANKET_APPROVE_NAME, this, "");
803         waitAndClickByName(BLANKET_APPROVE_NAME,
804                 "No blanket approve button does the user " + getUserName() + " have permission?");
805         Thread.sleep(2000);
806 
807         blanketApproveAssert();
808     }
809 
810     protected void check(By by) throws InterruptedException {
811         WebElement element = driver.findElement(by);
812 
813         if (!element.isSelected()) {
814             element.click();
815         }
816     }
817 
818     protected void checkById(String id) throws InterruptedException {
819         check(By.id(id));
820     }
821 
822     protected void checkByName(String name) throws InterruptedException {
823         check(By.name(name));
824     }
825 
826     protected void checkByXpath(String locator) throws InterruptedException {
827         check(By.xpath(locator));
828     }
829 
830     protected void checkErrorMessageItem(String message) {
831         final String error_locator = "//li[@class='uif-errorMessageItem']";
832         assertElementPresentByXpath(error_locator);
833         String errorText = null;
834 
835         try {
836             errorText = getTextByXpath(error_locator);
837         } catch (InterruptedException e) {
838             e.printStackTrace();
839         }
840 
841         if (errorText != null && errorText.contains("errors")) {
842             failableFail(errorText + message);
843         }
844     }
845 
846     
847 
848 
849     public void checkForDocError() {
850         checkForIncidentReport();
851         if (hasDocError()) {
852             String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
853             errorText = ITUtil.blanketApprovalCleanUpErrorText(errorText);
854             if (driver.findElements(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).size() > 0) { 
855                 errorText = ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(
856                         By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).getText()); 
857             }
858             if (driver.findElements(By.xpath(DIV_LEFT_ERRMSG)).size() > 0) {
859                 errorText = errorText + ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(By.xpath(DIV_LEFT_ERRMSG)).getText());
860             }
861             failableFail(errorText);
862         }
863     }
864 
865     
866 
867 
868 
869     public boolean hasDocError() {
870         if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size() > 0) {
871             String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
872             if (errorText != null && errorText.contains("error(s) found on page.")) {
873                 return true;
874             }
875         }
876         return false;
877     }
878 
879     
880 
881 
882 
883 
884     public boolean hasDocError(String errorTextToMatch) {
885         if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size() > 0) {
886             String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
887             if (errorText != null && errorText.contains("error(s) found on page.")) {
888                 WebElement errorDiv = driver.findElement(By.xpath("//div[@class='left-errmsg']/div[2]/div"));
889                 if (errorDiv != null) {
890                     errorText = errorDiv.getText();
891                     return errorText != null && errorText.contains(errorTextToMatch);
892                 }
893             }
894         }
895         return false;
896     }
897 
898     protected void checkForIncidentReport() {
899         checkForIncidentReport("", "");
900     }
901 
902     protected void checkForIncidentReport(String locator) {
903         checkForIncidentReport(locator, "");
904     }
905 
906     protected void checkForIncidentReport(String locator, String message) {
907         ITUtil.checkForIncidentReport(driver.getPageSource(), locator, this, message);
908     }
909 
910     protected void checkForIncidentReport(String locator, Failable failable, String message) {
911         ITUtil.checkForIncidentReport(driver.getPageSource(), locator, failable, message);
912     }
913 
914     protected void clearText(By by) throws InterruptedException {
915         driver.findElement(by).clear();
916     }
917 
918     protected void clearText(String selector) throws InterruptedException {
919         clearText(By.cssSelector(selector));
920     }
921 
922     protected void clearTextByName(String name) throws InterruptedException {
923         clearText(By.name(name));
924     }
925 
926     protected void clearTextByXpath(String locator) throws InterruptedException {
927         clearText(By.xpath(locator));
928     }
929 
930     protected void close() {
931         driver.close();
932     }
933 
934     protected void colapseExpandByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
935         waitAndClickByXpath(clickLocator);
936         waitNotVisibleByXpath(visibleLocator);
937         waitAndClickByXpath(clickLocator);
938         waitIsVisibleByXpath(visibleLocator);
939     }
940 
941     protected String configNameSpaceBlanketApprove() throws Exception {
942         String docId = waitForDocId();
943         String dtsPlusTwoChars = ITUtil.createUniqueDtsPlusTwoRandomChars();
944         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Namespace " + ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits());
945         assertBlanketApproveButtonsPresent();
946         waitAndTypeByXpath(DOC_CODE_XPATH, "VTN" + dtsPlusTwoChars);
947         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']",
948                 "Validation Test NameSpace " + dtsPlusTwoChars);
949         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.applicationId']", "RICE");
950 
951         return docId;
952     }
953 
954     protected void contextLookupAssertions() throws Exception {
955         testLookUp();
956         assertTextPresent("Notes and Attachments");
957         waitAndClick(By.xpath(CANCEL2_XPATH));
958         passed();
959     }
960 
961 
962 
963 
964 
965 
966 
967 
968 
969 
970 
971 
972 
973 
974 
975 
976 
977 
978 
979 
980 
981 
982 
983 
984 
985 
986 
987 
988 
989 
990 
991     protected void expandColapseByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
992         waitAndClickByXpath(clickLocator);
993         waitIsVisibleByXpath(visibleLocator);
994         waitAndClickByXpath(clickLocator);
995         waitNotVisibleByXpath(visibleLocator);
996     }
997 
998 
999     
1000 
1001 
1002 
1003     public String[] getAllWindowTitles() {
1004         return (String[]) driver.getWindowHandles().toArray();
1005     }
1006 
1007     protected String getAttribute(By by, String attribute) throws InterruptedException {
1008         jiraAwareWaitFor(by, "");
1009         
1010         return driver.findElement(by).getAttribute(attribute);
1011     }
1012 
1013     
1014 
1015 
1016 
1017 
1018 
1019     protected String getAttributeByName(String name, String attribute) throws InterruptedException {
1020         return getAttribute(By.name(name), attribute);
1021     }
1022 
1023     
1024 
1025 
1026 
1027 
1028 
1029     protected String getAttributeByXpath(String locator, String attribute) throws InterruptedException {
1030         return getAttribute(By.xpath(locator), attribute);
1031     }
1032 
1033     protected String getBaseUrlString() {
1034         return ITUtil.getBaseUrlString();
1035     }
1036 
1037     protected int getCssCount(String selector) {
1038         return getCssCount(By.cssSelector(selector));
1039     }
1040 
1041     
1042 
1043 
1044 
1045 
1046     protected int getCssCount(By by) {
1047         return (driver.findElements(by)).size();
1048     }
1049 
1050     protected String getDocStatus() {
1051         return driver.findElement(By.xpath(DOC_STATUS_XPATH_2)).getText();
1052     }
1053 
1054     
1055 
1056 
1057 
1058 
1059 
1060     protected String[] getSelectOptions(By by) throws InterruptedException {
1061         WebElement select1 = driver.findElement(by);
1062         List<WebElement> options = select1.findElements(By.tagName("option"));
1063         String[] optionValues = new String[options.size()];
1064         int counter = 0;
1065 
1066         for (WebElement option : options) {
1067             optionValues[counter] = option.getAttribute("value");
1068             counter++;
1069         }
1070 
1071         return optionValues;
1072     }
1073 
1074     protected String[] getSelectOptionsByName(String name) throws InterruptedException {
1075         return getSelectOptions(By.name(name));
1076     }
1077 
1078     protected String[] getSelectOptionsByXpath(String locator) throws InterruptedException {
1079         return getSelectOptions(By.xpath(locator));
1080     }
1081 
1082     
1083 
1084 
1085 
1086     public String getSessionId() {
1087         return sessionId;
1088     }
1089 
1090     protected String getText(By by) throws InterruptedException {
1091         return driver.findElement(by).getText();
1092     }
1093 
1094     protected String getTextByClassName(String className) throws InterruptedException {
1095         return getText(By.className(className));
1096     }
1097 
1098     protected String getTextById(String id) throws InterruptedException {
1099         return getText(By.id(id));
1100     }
1101 
1102     protected String getTextByName(String name) throws InterruptedException {
1103         return getText(By.name(name));
1104     }
1105 
1106     protected String getText(String locator) throws InterruptedException {
1107         return getText(By.cssSelector(locator));
1108     }
1109 
1110     protected String getTextByXpath(String locator) throws InterruptedException {
1111         return getText(By.xpath(locator));
1112     }
1113 
1114     protected String getTitle() {
1115         return driver.getTitle();
1116     }
1117 
1118     
1119 
1120 
1121 
1122     public String getUserName() {
1123         return user;
1124     }
1125 
1126     
1127 
1128 
1129 
1130 
1131     protected void gotoNestedFrame() {
1132         driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
1133         driver.switchTo().defaultContent();
1134        
1135         if (driver.findElements(By.xpath("//iframe")).size() > 0) {
1136             WebElement containerFrame = driver.findElement(By.xpath("//iframe"));
1137             driver.switchTo().frame(containerFrame);
1138         }
1139         
1140         if (driver.findElements(By.xpath("//iframe")).size() > 0) {
1141             WebElement contentFrame = driver.findElement(By.xpath("//iframe"));
1142             driver.switchTo().frame(contentFrame);
1143         }
1144         
1145         driver.manage().timeouts().implicitlyWait(waitSeconds, TimeUnit.SECONDS);
1146     }
1147 
1148     
1149 
1150 
1151 
1152     public void failableFail(String message) {
1153         passed = false;
1154         jGrowlSticky(message);
1155         fail(message); 
1156     }
1157 
1158     protected WebElement findElement(By by, WebElement elementToFindOn) {
1159         WebElement found = elementToFindOn.findElement(by);
1160         WebDriverUtil.highlightElement(driver, found);
1161         return found;
1162     }
1163 
1164     protected List<WebElement> findVisibleElements(By by) {
1165         List<WebElement> webElements = driver.findElements(by);
1166         List<WebElement> visibleWebElements = new LinkedList<WebElement>();
1167         for (WebElement webElement: webElements) {
1168             if (webElement.isDisplayed()) {
1169                 visibleWebElements.add(webElement);
1170             }
1171         }
1172 
1173         return visibleWebElements;
1174     }
1175 
1176     protected void fireEvent(String name, String event) {
1177         ((JavascriptExecutor) driver).executeScript("var elements=document.getElementsByName(\"" + name + "\");" +
1178                 "for (var i = 0; i < elements.length; i++){" +
1179                 "elements[i]." + event + "();}");
1180     }
1181 
1182     protected void fireEvent(String name, String value, String event) {
1183         ((JavascriptExecutor) driver).executeScript("var elements=document.getElementsByName(\"" + name + "\");" +
1184                 "for (var i = 0; i < elements.length; i++){" +
1185                 "if(elements[i].value=='" + value + "')" +
1186                 "elements[i]." + event + "();}");
1187     }
1188 
1189     
1190 
1191 
1192 
1193     public void fireMouseOverEventByName(String name) {
1194         this.fireMouseOverEvent(By.name(name));
1195     }
1196 
1197     
1198 
1199 
1200 
1201     public void fireMouseOverEventByXpath(String locator) {
1202         this.fireMouseOverEvent(By.xpath(locator));
1203     }
1204 
1205     
1206 
1207 
1208 
1209     public void fireMouseOverEvent(By by) {
1210         Actions builder = new Actions(driver);
1211         Actions hover = builder.moveToElement(driver.findElement(by));
1212         hover.perform();
1213     }
1214 
1215     protected boolean isChecked(By by) {
1216         return driver.findElement(by).isSelected();
1217     }
1218 
1219     protected boolean isCheckedById(String id) {
1220         return isChecked(By.id(id));
1221     }
1222 
1223     protected boolean isCheckedByName(String name) {
1224         return isChecked(By.name(name));
1225     }
1226 
1227     protected boolean isCheckedByXpath(String locator) {
1228         return isChecked(By.xpath(locator));
1229     }
1230 
1231     protected boolean isEnabled(By by) {
1232         return driver.findElement(by).isEnabled();
1233     }
1234 
1235     protected boolean isEnabledById(String id) {
1236         return isEnabled(By.id(id));
1237     }
1238 
1239     protected boolean isEnabledByName(String name) {
1240         return isEnabled(By.name(name));
1241     }
1242 
1243     protected boolean isEnabledByXpath(String locator) {
1244         return isEnabled(By.xpath(locator));
1245     }
1246 
1247     protected int howManyAreVisible(By by) throws InterruptedException {
1248         int count = 0;
1249         if (by == null) {
1250 
1251             return count;
1252         }
1253 
1254         List<WebElement> webElementsFound = driver.findElements(by);
1255         for (WebElement webElement: webElementsFound) {
1256             if (webElement.isDisplayed()) {
1257                 count++;
1258             }
1259         }
1260 
1261         return count;
1262     }
1263 
1264     
1265 
1266 
1267 
1268 
1269     protected boolean isElementPresent(By by) {
1270         return (driver.findElements(by)).size() > 0;
1271     }
1272 
1273     
1274 
1275 
1276 
1277 
1278     protected boolean isElementPresent(String locator) {
1279         return (driver.findElements(By.cssSelector(locator))).size() > 0;
1280     }
1281 
1282     protected boolean isElementPresentById(String id) {
1283         return isElementPresent(By.id(id));
1284     }
1285 
1286     protected boolean isElementPresentByName(String name) {
1287         return isElementPresent(By.name(name));
1288     }
1289 
1290     protected boolean isElementPresentByXpath(String locator) {
1291         return isElementPresent(By.xpath(locator));
1292     }
1293 
1294     protected boolean isElementPresentByLinkText(String locator) {
1295         return isElementPresent(By.linkText(locator));
1296     }
1297 
1298     protected boolean isElementPresentByDataAttributeValue(String dataAttributeName, String dataAttributeValue) {
1299         return isElementPresent(By.cssSelector("[data-" + dataAttributeName +"='"+ dataAttributeValue +"']"));
1300     }
1301 
1302     protected Boolean isTextPresent(String text) {
1303         if (driver.getPageSource().contains(text)) {
1304             return Boolean.TRUE;
1305         }
1306 
1307         return Boolean.FALSE;
1308     }
1309 
1310     protected boolean isVisible(String locator) {
1311         return isVisible(By.cssSelector(locator));
1312     }
1313 
1314     protected boolean isVisible(By by) {
1315         List<WebElement> elements = driver.findElements(by);
1316         for (WebElement element: elements) {
1317             if (element.isDisplayed()) {
1318                 return true;
1319             }
1320         }
1321         return false;
1322     }
1323 
1324     protected boolean isVisibleById(String id) {
1325         return isVisible(By.id(id));
1326     }
1327 
1328     protected boolean isVisibleByXpath(String locator) {
1329         return isVisible(By.xpath(locator));
1330     }
1331 
1332     protected void jGrowl(String message) {
1333         WebDriverUtil.jGrowl(driver, jGrowlHeader, false, message);
1334     }
1335 
1336     
1337 
1338 
1339 
1340     protected void jGrowlSticky(String message) {
1341         WebDriverUtil.jGrowl(driver, jGrowlHeader, true, message);
1342     }
1343 
1344     private void jiraAwareFail(By by, String message, Throwable t) {
1345         JiraAwareFailureUtil.failOnMatchedJira(by.toString(), message, this);
1346         
1347         checkForIncidentReport(by.toString(), message);
1348         failableFail(t.getMessage() + " " + by.toString() + " " + message + " " + driver.getCurrentUrl());
1349     }
1350 
1351     private void jiraAwareFail(String message) {
1352         JiraAwareFailureUtil.failOnMatchedJira(message, message, this);
1353         
1354         checkForIncidentReport(message, message);
1355         failableFail(message + " " + driver.getCurrentUrl());
1356     }
1357 
1358     protected void jiraAwareWaitAndClick(By by, String message) throws InterruptedException {
1359         jiraAwareWaitAndClick(by, message, this);
1360     }
1361 
1362     protected void jiraAwareWaitAndClick(By by, String message, Failable failable) throws InterruptedException {
1363         try {
1364             jiraAwareWaitFor(by, message, failable);
1365             WebElement element = driver.findElement(by);
1366             WebDriverUtil.highlightElement(driver, element);
1367             element.click();
1368         } catch (Exception e) {
1369             jiraAwareFail(by, message, e);
1370         }
1371     }
1372 
1373     protected void jiraAwareWaitFor(By by, String message) throws InterruptedException {
1374         try {
1375             WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
1376         } catch (Throwable t) {
1377             jiraAwareFail(by, message, t);
1378         }
1379     }
1380 
1381     protected void jiraAwareWaitFors(By by, String message) throws InterruptedException {
1382         try {
1383             WebDriverUtil.waitFors(this.driver, this.waitSeconds, by, message);
1384         } catch (Throwable t) {
1385             jiraAwareFail(by, message, t);
1386         }
1387     }
1388 
1389     protected void jiraAwareWaitFor(By by, String message, Failable failable) throws InterruptedException {
1390         try {
1391             WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
1392         } catch (Throwable t) {
1393             jiraAwareFail(by, message, t);
1394         }
1395     }
1396 
1397     protected void open(String url) {
1398         driver.get(url);
1399     }
1400 
1401     protected void selectFrameIframePortlet() {
1402         selectFrame(IFRAMEPORTLET_NAME);
1403     }
1404 
1405     protected void selectFrame(String locator) {
1406         
1407         if (IFRAMEPORTLET_NAME.equals(locator)) {
1408             gotoNestedFrame();
1409         } else {
1410            WebDriverUtil.selectFrameSafe(driver, locator);
1411         }
1412     }
1413 
1414     protected void selectTopFrame() {
1415         driver.switchTo().defaultContent();
1416     }
1417 
1418     protected void selectWindow(String locator) {
1419         driver.switchTo().window(locator);
1420     }
1421 
1422     protected void selectByXpath(String locator, String selectText) throws InterruptedException {
1423         select(By.xpath(locator), selectText);
1424     }
1425 
1426     protected void selectByName(String name, String selectText) throws InterruptedException {
1427         select(By.name(name), selectText);
1428     }
1429 
1430     
1431 
1432 
1433 
1434 
1435 
1436     protected void select(By by, String selectText) throws InterruptedException {
1437         WebElement select1 = driver.findElement(by);
1438         List<WebElement> options = select1.findElements(By.tagName("option"));
1439 
1440         for (WebElement option : options) {
1441             if (option.getText().equals(selectText)) {
1442                 option.click();
1443                 break;
1444             }
1445         }
1446     }
1447 
1448     protected void selectOptionByName(String name, String optionValue) throws InterruptedException {
1449         selectOption(By.name(name), optionValue);
1450     }
1451 
1452     protected void selectOptionByXpath(String locator, String optionValue) throws InterruptedException {
1453         selectOption(By.name(locator), optionValue);
1454     }
1455 
1456     
1457 
1458 
1459 
1460 
1461 
1462     protected void selectOption(By by, String optionValue) throws InterruptedException {
1463         WebElement select1 = driver.findElement(by);
1464         List<WebElement> options = select1.findElements(By.tagName("option"));
1465 
1466         if (options == null || options.size() == 0) {
1467             failableFail("No options for select " + select1.toString() + " was looking for value " + optionValue + " using " + by.toString());
1468         }
1469 
1470         for (WebElement option : options) {
1471             if (option.getAttribute("value").equals(optionValue)) {
1472                 option.click();
1473                 break;
1474             }
1475         }
1476     }
1477 
1478     
1479 
1480 
1481 
1482     public void switchToWindow(String title) {
1483         Set<String> windows = driver.getWindowHandles();
1484 
1485         for (String window : windows) {
1486             driver.switchTo().window(window);            
1487             if (driver.getTitle().contains(title)) {
1488                 return;
1489             }
1490         }
1491     }
1492 
1493     
1494     protected void testAddingNamespace() throws Exception {
1495         testAddingNamespace(this);
1496     }
1497 
1498     
1499     protected void testAddingNamespace(Failable failable) throws Exception {
1500         selectFrameIframePortlet();
1501         waitAndCreateNew();
1502         waitForPageToLoad();
1503         assertElementPresentByXpath(SAVE_XPATH_2, "save button does not exist on the page");
1504 
1505         
1506         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding PEANUTS");
1507         waitAndTypeByXpath("//*[@id='document.documentHeader.explanation']", "I want to add PEANUTS to test KIM");
1508         waitAndTypeByXpath(DOC_CODE_XPATH, "PEANUTS");
1509         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "The Peanuts Gang");
1510         checkByXpath("//input[@id='document.newMaintainableObject.active']");
1511         waitAndClickByXpath(SAVE_XPATH_2);
1512         waitForPageToLoad();
1513         checkForIncidentReport();
1514         assertDocumentStatusSaved();
1515 
1516         
1517         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, driver.findElement(By.xpath(
1518                 "//table[@class='headerinfo']/tbody/tr[1]/td[2]")).getText());
1519         SeleneseTestBase.assertEquals("admin", driver.findElement(By.xpath(
1520                 "//table[@class='headerinfo']/tbody/tr[2]/td[1]/a")).getText());
1521     }
1522 
1523     protected void assertDocumentStatusSaved() {
1524         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH,
1525                 "Document is not saved successfully");
1526     }
1527 
1528     protected void testAddingBrownGroup() throws Exception {
1529         selectFrameIframePortlet();
1530         waitAndCreateNew();
1531         waitForPageToLoad();
1532         String docId = waitForDocId();
1533 
1534         
1535         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Brown Group");
1536         waitAndTypeByName("document.documentHeader.explanation", "I want to add Brown Group to test KIM");
1537         selectOptionByName("document.groupNamespace", "KR-IDM");
1538         waitForPageToLoad();
1539         String groupName = "BrownGroup " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1540         waitAndTypeByName("document.groupName", groupName);
1541         checkByName("document.active");
1542         waitAndClickByXpath(SAVE_XPATH_2);
1543         waitForPageToLoad();
1544         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH,"Document is not saved successfully");
1545         checkForIncidentReport();
1546 
1547         
1548         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, driver.findElement(By.xpath("//table[@class='headerinfo']/tbody/tr[1]/td[2]")).getText());
1549         SeleneseTestBase.assertEquals("admin", driver.findElement(By.xpath("//table[@class='headerinfo']/tbody/tr[2]/td[1]/a")).getText());
1550         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
1551         waitForPageToLoad();
1552         waitAndClickSearch();
1553         waitForPageToLoad();
1554         waitAndClickReturnValue();
1555         waitForPageToLoad();
1556         waitAndClickByName("methodToCall.addMember.anchorAssignees");
1557         waitForPageToLoad();
1558         waitAndClickSave();
1559         waitAndClickSubmit();
1560         waitForPageToLoad();
1561         Thread.sleep(2000);
1562         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1563         selectTopFrame();
1564         waitAndClickByLinkText("Administration");
1565         waitForPageToLoad();
1566         waitAndClickByLinkText("Group");
1567         waitForPageToLoad();
1568         selectFrameIframePortlet();
1569         waitAndTypeByName("name", groupName);
1570         waitAndClickSearch();
1571         isElementPresentByLinkText(groupName);
1572     }
1573 
1574     protected void testAttributeDefinitionLookUp() throws Exception {
1575         waitForPageToLoad();
1576         selectFrameIframePortlet();
1577         checkForIncidentReport("testAttributeDefinitionLookUp");
1578         waitAndClickByXpath("//button[contains(.,'earch')]");
1579         Thread.sleep(3000);
1580         waitForPageToLoad();
1581         driver.findElement(By.tagName("body")).getText().contains("Actions"); 
1582         waitAndClickByLinkText("1000");
1583         waitForPageToLoad();
1584         driver.findElement(By.tagName("body")).getText().contains("Attribute Inquiry");
1585         driver.findElement(By.tagName("body")).getText().contains("KRMS Attributes");
1586         driver.findElement(By.tagName("body")).getText().contains("Attribute Label");
1587         driver.findElement(By.tagName("body")).getText().contains("1000");
1588         driver.findElement(By.tagName("body")).getText().contains("peopleFlowId");
1589         driver.findElement(By.tagName("body")).getText().contains("KR-RULE");
1590         driver.findElement(By.tagName("body")).getText().contains("PeopleFlow");
1591 
1592         
1593         
1594         
1595         
1596         
1597         
1598         
1599         
1600         
1601         
1602         
1603         
1604         passed();
1605     }
1606 
1607     protected void testCancelConfirmation() throws InterruptedException {
1608         waitAndCancelConfirmation();
1609         passed();
1610     }
1611 
1612     protected void testConfigParamaterBlanketApprove() throws Exception {
1613         selectFrameIframePortlet();
1614         waitAndCreateNew();
1615         String docId = waitForDocId();
1616         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Parameter ");
1617         assertBlanketApproveButtonsPresent();
1618         SeleneseTestBase.assertEquals("", getTextByName(CANCEL_NAME));
1619         selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']", "KR-NS - Kuali Nervous System");
1620         String componentLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.coreservice.impl.component.ComponentBo!!).(((code:document.newMaintainableObject.componentCode,namespaceCode:document.newMaintainableObject.namespaceCode,))).((`document.newMaintainableObject.componentCode:code,document.newMaintainableObject.namespaceCode:namespaceCode,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1621                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1622         waitAndClickByXpath(componentLookUp);
1623         waitAndClickSearch();
1624         waitAndClickReturnValue();
1625         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomChars();
1626         String parameterName = "ValidationTestParameter" + dtsTwo;
1627         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", parameterName);
1628         waitAndTypeByXpath("//textarea[@id='document.newMaintainableObject.description']",
1629                 "Validation Test Parameter Description" + dtsTwo);
1630         selectByXpath("//select[@id='document.newMaintainableObject.parameterTypeCode']", "Document Validation");
1631         waitAndClickByXpath("//input[@id='document.newMaintainableObject.evaluationOperatorCodeAllowed']");
1632         waitForPageToLoad();
1633         blanketApproveTest();
1634         assertDocFinal(docId);
1635     }
1636 
1637     protected void testCreateNewAgenda() throws Exception {
1638         selectFrameIframePortlet();
1639         selectByName("document.newMaintainableObject.dataObject.namespace", "Kuali Rules Test");
1640         String agendaName = "Agenda Date :" + Calendar.getInstance().getTime().toString();
1641         waitAndTypeByName("document.newMaintainableObject.dataObject.agenda.name", "Agenda " + agendaName);
1642         waitAndTypeByName("document.newMaintainableObject.dataObject.contextName", "Context1");
1643         fireEvent("document.newMaintainableObject.dataObject.contextName", "blur");
1644         fireEvent("document.newMaintainableObject.dataObject.contextName", "focus");
1645         waitForElementPresentByName("document.newMaintainableObject.dataObject.agenda.typeId");
1646         selectByName("document.newMaintainableObject.dataObject.agenda.typeId", "Campus Agenda");
1647         waitForElementPresentByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]");
1648         waitAndTypeByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]", "BL");
1649         waitAndClickByXpath("//div[2]/button");
1650         waitForPageToLoad();
1651         waitAndClickByXpath("//div[2]/button[3]");
1652         waitForPageToLoad();
1653         selectTopFrame();
1654         waitAndClickByXpath("(//input[@name='imageField'])[2]");
1655         passed();
1656     }
1657 
1658     protected void testCreateDocType() throws Exception {
1659         selectFrameIframePortlet();
1660         waitAndCreateNew();
1661         assertElementPresentByXpath("//*[@name='methodToCall.route' and @alt='submit']","save button does not exist on the page");
1662         
1663         
1664         
1665         String docId = waitForDocId();
1666         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Creating new Document Type");
1667         String parentDocType = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.kew.doctype.bo.DocumentType!!).(((name:document.newMaintainableObject.parentDocType.name,documentTypeId:document.newMaintainableObject.docTypeParentId,))).((`document.newMaintainableObject.parentDocType.name:name,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1668                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1669         waitAndClickByXpath(parentDocType);
1670         waitForPageToLoad();
1671         Thread.sleep(2000);
1672         waitAndClickSearch();
1673         waitForPageToLoad();
1674         waitAndClickReturnValue();
1675         String docTypeName = "TestDocType" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1676         waitForElementPresentByXpath("//input[@id='document.newMaintainableObject.name']");
1677         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
1678         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']","${kr.url}/maintenance.do?methodToCall=docHandler");
1679         
1680         
1681         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']", "Label for " + docTypeName);
1682         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']","default.htm?turl=WordDocuments%2Fdocumenttype.htm");
1683         waitAndClickByXpath("//*[@name='methodToCall.route' and @alt='submit']");
1684         checkForIncidentReport();
1685         waitForPageToLoad();
1686         driver.switchTo().defaultContent();
1687         waitAndClickDocSearchTitle();
1688         waitForPageToLoad();
1689         selectFrameIframePortlet();
1690         waitAndClickSearch();
1691         Thread.sleep(2000);
1692         SeleneseTestBase.assertEquals(docId, driver.findElement(By.xpath(DOC_ID_XPATH_2)).getText());
1693     }
1694 
1695     protected void testCreateNewCancel() throws Exception {
1696         selectFrameIframePortlet();
1697         waitAndCreateNew();
1698         testCancelConfirmation();
1699     }
1700 
1701     protected List<String> testCreateNewParameter(String docId, String parameterName) throws Exception {
1702         waitForPageToLoad();
1703         docId = waitForDocId();
1704         
1705         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Parameter");
1706         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-WKFLW");
1707         waitAndTypeByName("document.newMaintainableObject.componentCode", "ActionList");
1708         waitAndTypeByName("document.newMaintainableObject.applicationId", "KUALI");
1709         parameterName = "TestIndicator" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1710         waitAndTypeByName("document.newMaintainableObject.name", parameterName);
1711         waitAndTypeByName("document.newMaintainableObject.value", "Y");
1712         waitAndTypeByName("document.newMaintainableObject.description", "for testing");
1713         selectOptionByName("document.newMaintainableObject.parameterTypeCode", "HELP");
1714         waitAndClickByXpath("//input[@name='document.newMaintainableObject.evaluationOperatorCode' and @value='A']");
1715         waitAndClickSave();
1716         waitAndClickSubmit();
1717         waitForPageToLoad();
1718         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1719         selectTopFrame();
1720         waitAndClickDocSearchTitle();
1721         waitForPageToLoad();
1722         selectFrameIframePortlet();
1723         waitAndClickSearch();
1724         Thread.sleep(2000);
1725         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1726         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1727         selectTopFrame();
1728         List<String> params = new ArrayList<String>();
1729         params.add(docId);
1730         params.add(parameterName);
1731 
1732         return params;
1733     }
1734 
1735     protected List<String> testCreateNewParameterType(String docId, String parameterType, String parameterCode)throws Exception {
1736         waitForPageToLoad();
1737         docId = waitForDocId();
1738 
1739         
1740         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Parameter Type");
1741         parameterCode = RandomStringUtils.randomAlphabetic(4).toLowerCase();
1742         waitAndTypeByName("document.newMaintainableObject.code", parameterCode);
1743         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1744         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1745         waitAndClickSave();
1746         waitAndClickSubmit();
1747         waitForPageToLoad();
1748         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1749         selectTopFrame();
1750         waitAndClickDocSearchTitle();
1751         waitForPageToLoad();
1752         selectFrameIframePortlet();
1753         waitAndClickSearch();
1754         Thread.sleep(2000);
1755         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1756         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1757         selectTopFrame();
1758         List<String> params = new ArrayList<String>();
1759         params.add(docId);
1760         params.add(parameterType);
1761         params.add(parameterCode);
1762 
1763         return params;
1764     }
1765 
1766     protected void testCreateNewSearchReturnValueCancelConfirmation() throws InterruptedException, Exception {
1767         selectFrameIframePortlet();
1768         waitAndCreateNew();
1769         waitAndClickSearch2();
1770         waitAndClickReturnValue();
1771         waitAndCancelConfirmation();
1772         passed();
1773     }
1774 
1775     protected List<String> testCopyParameter(String docId, String parameterName) throws Exception {
1776         selectFrameIframePortlet();
1777         waitAndClickCopy();
1778         waitForPageToLoad();
1779         docId = waitForDocId();
1780         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Parameter");
1781         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-WKFLW");
1782         waitAndTypeByName("document.newMaintainableObject.componentCode", "ActionList");
1783         waitAndTypeByName("document.newMaintainableObject.applicationId", "KUALI");
1784         parameterName = "TestIndicator" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1785         waitAndTypeByName("document.newMaintainableObject.name", parameterName);
1786         waitAndClickSave();
1787         waitAndClickSubmit();
1788         waitForPageToLoad();
1789         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1790         selectTopFrame();
1791         waitAndClickDocSearchTitle();
1792         waitForPageToLoad();
1793         selectFrameIframePortlet();
1794         waitAndClickSearch();
1795         Thread.sleep(2000);
1796         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1797         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1798         selectTopFrame();
1799         List<String> params = new ArrayList<String>();
1800         params.add(docId);
1801         params.add(parameterName);
1802 
1803         return params;
1804     }
1805 
1806     protected List<String> testCopyParameterType(String docId, String parameterType, String parameterCode) throws Exception {
1807         selectFrameIframePortlet();
1808         waitAndClickCopy();
1809         waitForPageToLoad();
1810         docId = waitForDocId();
1811         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Parameter");
1812         parameterCode = RandomStringUtils.randomAlphabetic(4).toLowerCase();
1813         waitAndTypeByName("document.newMaintainableObject.code", parameterCode);
1814         clearTextByName("document.newMaintainableObject.name");
1815         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1816         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1817         waitAndClickSave();
1818         waitAndClickSubmit();
1819         waitForPageToLoad();
1820         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1821         selectTopFrame();
1822         waitAndClickDocSearchTitle();
1823         waitForPageToLoad();
1824         selectFrameIframePortlet();
1825         waitAndClickSearch();
1826         Thread.sleep(2000);
1827         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1828         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1829         selectTopFrame();
1830         List<String> params = new ArrayList<String>();
1831         params.add(docId);
1832         params.add(parameterType);
1833         params.add(parameterCode);
1834 
1835         return params;
1836     }
1837 
1838 
1839     protected void testDocTypeLookup() throws Exception {
1840         selectFrameIframePortlet();
1841         waitAndClickByXpath("//input[@title='Search Parent Name']");
1842         waitForPageToLoad();
1843         waitAndClickByXpath(SAVE_XPATH_3);
1844         waitAndClickByXpath("//table[@id='row']/tbody/tr[contains(td[3],'RiceDocument')]/td[1]/a");
1845         waitForPageToLoad();
1846         waitAndClickByXpath(SAVE_XPATH_3);
1847         SeleneseTestBase.assertEquals("RiceDocument", getTextByXpath("//table[@id='row']/tbody/tr/td[4]/a"));
1848         waitAndClickByName("methodToCall.clearValues");
1849         waitAndTypeByName("name", "Kuali*D");
1850         waitAndClickByXpath(SAVE_XPATH_3);
1851         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[3], 'KualiDocument')]");
1852         String docIdOld = getTextByXpath("//table[@id='row']/tbody/tr[contains(td[3], 'KualiDocument')]/td[2]/a");
1853         waitAndClickByName("methodToCall.clearValues");
1854         waitAndTypeByName("label", "KualiDocument");
1855         waitAndClickByXpath(SAVE_XPATH_3);
1856         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[5], 'KualiDocument')]");
1857         waitAndClickByName("methodToCall.clearValues");
1858         waitAndTypeByName("documentTypeId", docIdOld);
1859         waitAndClickByXpath(SAVE_XPATH_3);
1860         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[2], '" + docIdOld + "')]");
1861     }
1862 
1863 
1864     protected List<String> testEditParameterType(String docId, String parameterType, String parameterCode) throws Exception {
1865         selectFrameIframePortlet();
1866         waitAndClickEdit();
1867         waitForPageToLoad();
1868         docId = waitForDocId();
1869         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Parameter");
1870         clearTextByName("document.newMaintainableObject.name");
1871         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1872         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1873         waitAndClickSave();
1874         waitAndClickSubmit();
1875         waitForPageToLoad();
1876         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1877         selectTopFrame();
1878         waitAndClickDocSearchTitle();
1879         waitForPageToLoad();
1880         selectFrameIframePortlet();
1881         waitAndClickSearch();
1882         Thread.sleep(2000);
1883         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1884         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1885         selectTopFrame();
1886         List<String> params = new ArrayList<String>();
1887         params.add(docId);
1888         params.add(parameterType);
1889         params.add(parameterCode);
1890 
1891         return params;
1892     }
1893 
1894     protected List<String> testEditParameter(String docId, String parameterName) throws Exception
1895     {
1896         selectFrameIframePortlet();
1897         waitAndClickEdit();
1898         waitForPageToLoad();
1899         docId = waitForDocId();
1900         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Parameter");
1901         clearTextByName("document.newMaintainableObject.value");
1902         waitAndTypeByName("document.newMaintainableObject.value", "N");
1903         waitAndClickSave();
1904         waitAndClickSubmit();
1905         waitForPageToLoad();
1906         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1907         selectTopFrame();
1908         waitAndClickDocSearchTitle();
1909         waitForPageToLoad();
1910         selectFrameIframePortlet();
1911         waitAndClickSearch();
1912         Thread.sleep(2000);
1913         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1914         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1915         selectTopFrame();
1916         List<String> params = new ArrayList<String>();
1917         params.add(docId);
1918         params.add(parameterName);
1919         return params;
1920     }
1921 
1922     protected void testEditRouteRulesDelegation() throws Exception {
1923         waitForPageToLoad();
1924         Thread.sleep(3000);
1925         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
1926         selectFrameIframePortlet();
1927         waitAndClickSearch();
1928         waitForPageToLoad();
1929         Thread.sleep(3000);
1930         waitAndClickEdit();
1931         waitForPageToLoad();
1932         Thread.sleep(3000);
1933         SeleneseTestBase.assertTrue(isElementPresentByName(CANCEL_NAME));
1934         waitAndClickCancel();
1935         waitForPageToLoad();
1936         Thread.sleep(3000);
1937         waitAndClickByName("methodToCall.processAnswer.button0");
1938         waitForPageToLoad();
1939         passed();
1940     }
1941 
1942     protected void testFiscalOfficerInfoMaintenanceNew() throws Exception {
1943         selectFrameIframePortlet();
1944         checkForIncidentReport("", "https://jira.kuali.org/browse/KULRICE-7723 FiscalOfficerInfoMaintenanceNewIT.testUntitled need a better name and user permission error");
1945         String docId = getTextByXpath("//*[@id='u13_control']");
1946         waitAndTypeByXpath("//input[@name='document.documentHeader.documentDescription']", "New FO Doc");
1947         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.dataObject.id']", "5");
1948         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.dataObject.userName']", "Jigar");
1949         waitAndClickByXpath("//button[@id='usave']");
1950         Integer docIdInt = Integer.valueOf(docId).intValue();
1951         selectTopFrame();
1952         waitAndClickByXpath("//img[@alt='action list']");
1953         selectFrameIframePortlet();
1954 
1955         if(isElementPresentByLinkText("Last")){
1956             waitAndClickByLinkText("Last");
1957             waitAndClickByLinkText(docIdInt.toString());
1958         } else {
1959             waitAndClickByLinkText(docIdInt.toString());
1960         }
1961 
1962         
1963         
1964         
1965         
1966         
1967         
1968         
1969 
1970         
1971         
1972         
1973         
1974         
1975         
1976 
1977         
1978         
1979         
1980         
1981         
1982         
1983         
1984         
1985         
1986         
1987 
1988         
1989         
1990         
1991         
1992         
1993         
1994         
1995     }
1996 
1997     protected void testIdentityGroupBlanketApprove() throws Exception {
1998         selectFrameIframePortlet();
1999         waitAndCreateNew();                
2000         String docId = waitForDocId();
2001         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2002         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Group " + dtsTwo);
2003         assertBlanketApproveButtonsPresent();
2004         selectByXpath("//select[@id='document.groupNamespace']", AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2005         waitAndTypeByXpath("//input[@id='document.groupName']", "Validation Test Group1 " + dtsTwo);
2006         waitAndClickByName(
2007                 "methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
2008         waitAndClickSearch();
2009         waitAndClickReturnValue();
2010         waitAndClickByName("methodToCall.addMember.anchorAssignees");
2011         waitForPageToLoad();
2012         blanketApproveTest();
2013         assertDocFinal(docId);
2014     }
2015 
2016     protected void testIdentityPermissionBlanketApprove() throws Exception {
2017         selectFrameIframePortlet();
2018         waitAndCreateNew();        
2019         String docId = waitForDocId();
2020         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2021         waitAndTypeByXpath("//input[@name='document.documentHeader.documentDescription']",
2022                 "Validation Test Permission " + dtsTwo);
2023         assertBlanketApproveButtonsPresent();
2024         waitAndTypeByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']", "10012");
2025         selectByXpath("//select[@name='document.newMaintainableObject.namespaceCode']",
2026                 AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2027         selectByXpath("//select[@name='document.newMaintainableObject.templateId']",
2028                 AdminTmplMthdSTNavBase.LABEL_KUALI_DEFAULT);
2029         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.name']",
2030                 "ValidationTestPermission" + dtsTwo);
2031         blanketApproveTest();
2032         assertDocFinal(docId);
2033     }
2034 
2035     protected void testIdentityPersonBlanketApprove() throws Exception {
2036         selectFrameIframePortlet();
2037         waitAndCreateNew();        
2038         String docId = waitForDocId();
2039         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Person");
2040         assertBlanketApproveButtonsPresent();
2041         waitAndTypeByXpath("//input[@id='document.principalName']", "principal" + RandomStringUtils.randomAlphabetic(3).toLowerCase());
2042         selectByName("newAffln.affiliationTypeCode", "Affiliate");
2043         selectByName("newAffln.campusCode", "BX - BLGTN OFF CAMPUS");
2044         selectByName("newAffln.campusCode", "BL - BLOOMINGTON");
2045         assertElementPresentByName("newAffln.dflt");
2046         waitAndClickByName("newAffln.dflt");
2047         waitAndClickByName("methodToCall.addAffln.anchor");
2048         waitAndClickByName("methodToCall.toggleTab.tabContact");
2049         selectByName("newName.namePrefix", "Mr");
2050         waitAndTypeByName("newName.firstName", "First");
2051         waitAndTypeByName("newName.lastName", "Last");
2052         selectByName("newName.nameSuffix", "Mr");
2053         waitAndClickByName("newName.dflt");
2054         waitAndClickByName("methodToCall.addName.anchor");
2055         waitForPageToLoad();
2056         blanketApproveTest();
2057         assertDocFinal(docId);
2058     }
2059 
2060     protected void testIdentityResponsibilityBlanketApprove() throws Exception {
2061         selectFrameIframePortlet();
2062         waitAndCreateNew();        
2063         String docId = waitForDocId();
2064         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2065         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Responsibility " + dtsTwo);
2066         assertBlanketApproveButtonsPresent();
2067         selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']",
2068                 AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2069         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']",
2070                 "Validation Test Responsibility " + dtsTwo);
2071         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.documentTypeName']", "Test " + dtsTwo);
2072         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.routeNodeName']", "Test " + dtsTwo);
2073         waitAndClickByXpath("//input[@id='document.newMaintainableObject.actionDetailsAtRoleMemberLevel']");
2074         waitAndClickByXpath("//input[@id='document.newMaintainableObject.required']");
2075         blanketApproveTest();
2076         assertDocFinal(docId);
2077     }
2078 
2079     protected void testIdentityRoleBlanketApprove() throws Exception {
2080         selectFrameIframePortlet();
2081         waitAndCreateNew();
2082         waitAndClickByXpath(SEARCH_XPATH, "No search button to click.");
2083         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT, "No return value link");        
2084         String docId = waitForDocId();
2085         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2086         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Role " + dtsTwo);
2087         assertBlanketApproveButtonsPresent();
2088         selectByXpath("//select[@id='document.roleNamespace']", AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2089         waitAndTypeByXpath("//input[@id='document.roleName']", "Validation Test Role " + dtsTwo,
2090                 "No Role Name input to type in.");
2091         waitAndClickByName(
2092                 "methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
2093         waitAndClickByXpath(SEARCH_XPATH, "No search button to click.");
2094         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT, "No return value link");
2095         waitAndClickByName("methodToCall.addMember.anchorAssignees");
2096         waitForPageToLoad();
2097         blanketApproveTest();
2098         assertDocFinal(docId);
2099     }
2100 
2101     protected void testLocationCampusBlanketApprove() throws Exception {
2102         selectFrameIframePortlet();
2103         waitAndCreateNew();        
2104         String docId = waitForDocId();
2105         String twoLetters = RandomStringUtils.randomAlphabetic(2);
2106         waitAndTypeByName("document.documentHeader.documentDescription", "Validation Test Campus " + twoLetters);
2107         assertBlanketApproveButtonsPresent();
2108         waitAndTypeByName("document.newMaintainableObject.code", RandomStringUtils.randomAlphabetic(2));
2109         waitAndTypeByName("document.newMaintainableObject.name", "Validation Test Campus" + ITUtil.createUniqueDtsPlusTwoRandomChars());
2110         waitAndTypeByName("document.newMaintainableObject.shortName", "VTC " + twoLetters);
2111         selectByName("document.newMaintainableObject.campusTypeCode", "B - BOTH");
2112         blanketApproveTest();
2113         assertDocFinal(docId);
2114     }
2115 
2116     protected void testLocationCountryBlanketApprove() throws InterruptedException {
2117         selectFrameIframePortlet();
2118         waitAndCreateNew();        
2119         String docId = waitForDocId();
2120         assertBlanketApproveButtonsPresent();
2121         String twoUpperCaseLetters = RandomStringUtils.randomAlphabetic(2).toUpperCase();
2122         String countryName = "Validation Test Country " + ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2123         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, countryName);
2124         waitAndTypeByXpath(DOC_CODE_XPATH, twoUpperCaseLetters);
2125         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countryName);
2126         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.alternateCode']", "V" + twoUpperCaseLetters);
2127         int attemptCount = 0;
2128         blanketApproveCheck();
2129         while (hasDocError("same primary key already exists") && attemptCount < 25) {
2130             clearTextByXpath(DOC_CODE_XPATH);
2131             waitAndTypeByXpath(DOC_CODE_XPATH, twoUpperCaseLetters.substring(0, 1) + Character.toString((char) ('A' + attemptCount++)));
2132             blanketApproveCheck();
2133         }
2134         blanketApproveAssert();
2135         assertDocFinal(docId);
2136     }
2137 
2138     protected void testLocationCountyBlanketApprove() throws Exception {
2139         selectFrameIframePortlet();
2140         waitAndCreateNew();        
2141         String docId = waitForDocId();
2142         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test County");
2143         assertBlanketApproveButtonsPresent();
2144         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2145                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2146         waitAndClickByXpath(countryLookUp);
2147         waitAndTypeByName("code", "US");
2148         waitAndClickSearch();
2149         waitAndClickReturnValue();
2150         waitAndTypeByXpath(DOC_CODE_XPATH, RandomStringUtils.randomAlphabetic(2).toUpperCase());
2151         String stateLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.state.StateBo!!).(((countryCode:document.newMaintainableObject.countryCode,code:document.newMaintainableObject.stateCode,))).((`document.newMaintainableObject.countryCode:countryCode,document.newMaintainableObject.stateCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2152                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2153         waitAndClickByXpath(stateLookUp);
2154         waitAndTypeByName("code", "IN");
2155         waitAndClickSearch();
2156         waitAndClickReturnValue();
2157         String countyName = "Validation Test County" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2158         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countyName);
2159         waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
2160         blanketApproveTest();
2161         assertDocFinal(docId);
2162     }
2163 
2164     protected void testLocationPostBlanketApprove() throws Exception {
2165         selectFrameIframePortlet();
2166         waitAndCreateNew();        
2167         String docId = waitForDocId();
2168         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Postal Code");
2169         assertBlanketApproveButtonsPresent();
2170         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2171                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2172         waitAndClickByXpath(countryLookUp);
2173         waitAndTypeByName("code", "US");
2174         waitAndClickSearch();
2175         waitAndClickReturnValue();
2176         String code = RandomStringUtils.randomNumeric(5);
2177         waitAndTypeByXpath(DOC_CODE_XPATH, code);
2178         String stateLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.state.StateBo!!).(((countryCode:document.newMaintainableObject.countryCode,code:document.newMaintainableObject.stateCode,))).((`document.newMaintainableObject.countryCode:countryCode,document.newMaintainableObject.stateCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2179                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2180         waitAndClickByXpath(stateLookUp);
2181         waitAndClickSearch();
2182         waitAndClickByXpath("//table[@id='row']/tbody/tr[4]/td[1]/a");
2183         String cityName = "Validation Test Postal Code " + code;
2184         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.cityName']", cityName);
2185         blanketApproveTest();
2186         assertDocFinal(docId);
2187     }
2188 
2189     protected void testLocationStateBlanketApprove() throws Exception {
2190         selectFrameIframePortlet();
2191         waitAndCreateNew();
2192         String docId = waitForDocId();
2193         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test State");
2194         assertBlanketApproveButtonsPresent();
2195         
2196         
2197         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2198                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2199         waitAndClickByXpath(countryLookUp);
2200         waitAndClickSearch();
2201         waitAndClickReturnValue();
2202         String code = RandomStringUtils.randomAlphabetic(2).toUpperCase();
2203         waitAndTypeByXpath(DOC_CODE_XPATH, code);
2204         String state = "Validation Test State " + code;
2205         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", state);
2206         waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
2207         blanketApproveTest();
2208         assertDocFinal(docId);
2209     }
2210 
2211     protected void testLookUp() throws Exception {
2212         waitForPageToLoad();
2213         selectFrameIframePortlet();
2214 
2215         
2216         waitAndClick(By.xpath(SEARCH_XPATH_3));
2217         waitAndClickByLinkText(EDIT_LINK_TEXT, "edit button not present does user " + user + " have permission?");
2218         checkForIncidentReport("submit");
2219         assertTextPresent("ubmit");
2220         assertTextPresent("ave");
2221         assertTextPresent("pprove");
2222         assertTextPresent("lose");
2223         assertTextPresent("ancel");
2224     }
2225 
2226     protected void performParameterInquiry(String parameterField) throws Exception {
2227         waitAndTypeByName("name", parameterField);
2228         waitAndClickSearch();
2229         isElementPresentByLinkText(parameterField);
2230         waitAndClickByLinkText(parameterField);
2231         waitForPageToLoad();
2232         Thread.sleep(2000);
2233         switchToWindow("Kuali :: Inquiry");
2234         Thread.sleep(2000);
2235     }
2236 
2237     protected List<String> testLookUpParameterType(String docId, String parameterType, String parameterCode) throws Exception {
2238         performParameterInquiry(parameterType);
2239         SeleneseTestBase.assertEquals(parameterCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim().toLowerCase());
2240         SeleneseTestBase.assertEquals(parameterType, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim().toLowerCase());
2241         waitAndClickCloseWindow();
2242         switchToWindow("null");
2243         List<String> params = new ArrayList<String>();
2244         params.add(docId);
2245         params.add(parameterType);
2246         params.add(parameterCode);
2247 
2248         return params;
2249     }
2250 
2251     protected List<String> testLookUpParameter(String docId, String parameterName) throws Exception {
2252         performParameterInquiry(parameterName);
2253         SeleneseTestBase.assertEquals(parameterName, getTextByXpath(
2254                 "//div[@class='tab-container']/table//span[@id='name.div']").trim());
2255         SeleneseTestBase.assertEquals("Y", getTextByXpath("//div[@class='tab-container']/table//span[@id='value.div']")
2256                 .trim());
2257         waitAndClickCloseWindow();
2258         switchToWindow("null");
2259         List<String> params = new ArrayList<String>();
2260         params.add(docId);
2261         params.add(parameterName);
2262 
2263         return params;
2264     }
2265 
2266     protected void testPeopleFlow() throws Exception {
2267         selectFrameIframePortlet();
2268         
2269         
2270         
2271         
2272         jGrowl("Create New");
2273         waitAndClickByLinkText("Create New");
2274         
2275         
2276         
2277         waitForElementPresent("div[data-header_for='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
2278         String docId = getText("div[data-header_for='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
2279         jGrowlSticky("Doc Id is " + docId);
2280         driver.findElement(By.name("document.documentHeader.documentDescription")).clear();
2281         driver.findElement(By.name("document.documentHeader.documentDescription")).sendKeys("Description for Document");
2282         new Select(driver.findElement(By.name("document.newMaintainableObject.dataObject.namespaceCode"))).selectByVisibleText("KUALI - Kuali Systems");
2283         driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).clear();
2284         driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).sendKeys("Document Name" + ITUtil.DTS);
2285 
2286         jGrowl("Add Member kr");
2287         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
2288         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).sendKeys("kr");
2289         driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
2290         Thread.sleep(3000);
2291 
2292         jGrowl("Add Member admin");
2293         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
2294         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).sendKeys("admin");
2295         driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
2296         Thread.sleep(3000);
2297 
2298         driver.findElement(By.cssSelector("div[data-parent='PeopleFlow-MaintenanceView'] > div.uif-footer button~button~button")).click();
2299         jGrowl("Blanket Approve");
2300         Thread.sleep(5000);
2301         
2302         
2303         
2304         
2305         driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
2306         driver.findElement(By.cssSelector("img[alt=\"doc search\"]")).click();
2307         Thread.sleep(5000);
2308         jGrowl("Document Search is " + docId + " present?");
2309         selectFrameIframePortlet();
2310         driver.findElement(By.cssSelector("td.infoline > input[name=\"methodToCall.search\"]")).click();
2311         Thread.sleep(5000);
2312         jGrowl("Is doc status final?");
2313         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, driver.findElement(By.xpath("//table[@id='row']/tbody/tr/td[4]")).getText());
2314         driver.switchTo().defaultContent();
2315         driver.findElement(By.name("imageField")).click();
2316         Thread.sleep(5000);
2317         
2318     }
2319 
2320     protected void testTermLookupAssertions() throws Exception {
2321         testLookUp();
2322         assertTextPresent("Term Parameters");
2323         waitAndClick(By.xpath(CANCEL2_XPATH));
2324         passed();
2325     }
2326 
2327     protected void testTermSpecificationLookupAssertions() throws Exception {
2328         testLookUp();
2329         assertTextPresent("Context");
2330         waitAndClick(By.xpath(CANCEL2_XPATH));
2331         passed();
2332     }
2333 
2334     protected List<String> testVerifyModifiedParameter(String docId, String parameterName) throws Exception {
2335         performParameterInquiry(parameterName);
2336         SeleneseTestBase.assertEquals(parameterName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
2337         SeleneseTestBase.assertEquals("N", getTextByXpath("//div[@class='tab-container']/table//span[@id='value.div']").trim());
2338         waitAndClickCloseWindow();
2339         switchToWindow("null");
2340         List<String> params = new ArrayList<String>();
2341         params.add(docId);
2342         params.add(parameterName);
2343 
2344         return params;
2345     }
2346 
2347     protected List<String> testVerifyCopyParameterType(String docId, String parameterType, String parameterCode) throws Exception
2348     {
2349         performParameterInquiry(parameterType);
2350         SeleneseTestBase.assertEquals(parameterType, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim().toLowerCase());
2351         waitAndClickCloseWindow();
2352         switchToWindow("null");
2353         List<String> params = new ArrayList<String>();
2354         params.add(docId);
2355         params.add(parameterType);
2356         params.add(parameterCode);
2357         
2358         return params;
2359     }
2360 
2361     protected List<String> testCreateNewPermission(String docId, String permissionName) throws Exception
2362     {
2363         waitForPageToLoad();
2364         Thread.sleep(2000);
2365         docId = waitForDocId();
2366         waitAndClickSave();
2367         waitForPageToLoad();
2368         assertElementPresentByXpath("//div[contains(.,'Document Description (Description) is a required field.')]/img[@alt='error']");
2369         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding Permission removeme");
2370         waitAndClickSubmit();
2371         waitForPageToLoad();
2372         assertElementPresentByXpath("//div[@class='error']");
2373         assertElementPresentByXpath("//div[contains(.,'Template (Template) is a required field.')]/img[@alt='error']");
2374         assertElementPresentByXpath("//div[contains(.,'Permission Namespace (Permission Namespace) is a required field.')]/img[@alt='error']");
2375         assertElementPresentByXpath("//div[contains(.,'Permission Name (Permission Name) is a required field.')]/img[@alt='error']");
2376         selectOptionByName("document.newMaintainableObject.templateId", "36");
2377         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-SYS");
2378         permissionName = "removeme" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2379         waitAndTypeByName("document.newMaintainableObject.name", permissionName);
2380         waitAndTypeByName("document.newMaintainableObject.description", "namespaceCode=KR*");
2381         checkByName("document.newMaintainableObject.active");
2382         waitAndClickSave();
2383         waitForPageToLoad();
2384         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH);
2385         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, getTextByXpath(DOC_STATUS_XPATH));
2386         waitAndClickSubmit();
2387         waitForPageToLoad();
2388         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
2389         SeleneseTestBase.assertEquals(DOC_STATUS_ENROUTE, getTextByXpath(DOC_STATUS_XPATH));
2390         List<String> params = new ArrayList<String>();
2391         params.add(docId);
2392         params.add(permissionName);
2393         
2394         return params;
2395     }
2396 
2397     protected List<String> testLookUpPermission(String docId, String permissionName) throws Exception
2398     {
2399         waitForPageToLoad();
2400         waitAndTypeByName("name", permissionName);
2401         waitAndClickSearch();
2402         isElementPresentByLinkText(permissionName);
2403         List<String> params = new ArrayList<String>();
2404         params.add(docId);
2405         params.add(permissionName);
2406         
2407         return params;
2408     }
2409 
2410     protected List<String> testEditPermission(String docId, String permissionName) throws Exception
2411     {
2412         waitAndClickEdit();
2413         waitForPageToLoad();
2414         Thread.sleep(2000);
2415         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Editing Permission removeme");
2416         uncheckByName("document.newMaintainableObject.active");
2417         waitAndClickSubmit();
2418         waitForPageToLoad();
2419         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
2420         List<String> params = new ArrayList<String>();
2421         params.add(docId);
2422         params.add(permissionName);
2423         
2424         return params;
2425     }
2426 
2427     protected List<String> testVerifyPermission(String docId, String permissionName) throws Exception
2428     {
2429         waitForPageToLoad();
2430         waitAndTypeByName("name", permissionName);
2431         waitAndClickByXpath("//input[@title='Active Indicator - No']");
2432         waitAndClickSearch();
2433         isElementPresentByLinkText(permissionName);
2434         List<String> params = new ArrayList<String>();
2435         params.add(docId);
2436         params.add(permissionName);
2437         
2438         return params;
2439     }
2440 
2441     protected List<String> testCreateNewPerson(String docId, String personName) throws Exception
2442     {
2443         waitForPageToLoad();
2444         docId = waitForDocId();
2445         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding Charlie Brown");
2446         waitAndTypeByName("document.documentHeader.explanation", "I want to add Charlie Brown to test KIM");
2447         
2448         
2449         personName = "cbrown" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2450         waitAndTypeByName("document.principalName", personName);
2451         waitAndClickSave();
2452         waitForPageToLoad();
2453         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH);
2454         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, getTextByXpath(DOC_STATUS_XPATH));
2455         waitAndClickSubmit();
2456         waitForPageToLoad();
2457         assertElementPresentByXpath("//div[contains(.,'At least one affiliation must be entered.')]/img[@alt='error']");
2458         assertElementPresentByXpath("//div[contains(.,'At least one name must be entered.')]/img[@alt='error']");
2459         selectOptionByName("newAffln.affiliationTypeCode", "STDNT");
2460         selectOptionByName("newAffln.campusCode", "BL");
2461         checkByName("newAffln.dflt");
2462         waitAndClickByName("methodToCall.addAffln.anchor");
2463         waitForPageToLoad();
2464         Thread.sleep(3000);
2465         selectOptionByName("newName.nameCode", "PRM");
2466         selectOptionByName("newName.namePrefix", "Mr");
2467         waitAndTypeByName("newName.firstName", "Charlie");
2468         waitAndTypeByName("newName.lastName", "Brown");
2469         checkByName("newName.dflt");
2470         waitAndClickByName("methodToCall.addName.anchor");
2471         waitForPageToLoad();
2472         waitAndClickSubmit();
2473         waitForPageToLoad();
2474         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
2475         SeleneseTestBase.assertEquals(DOC_STATUS_ENROUTE, getTextByXpath(DOC_STATUS_XPATH));
2476         List<String> params = new ArrayList<String>();
2477         params.add(docId);
2478         params.add(personName);
2479         
2480         return params;
2481     }
2482 
2483     protected List<String> testLookUpPerson(String docId, String personName) throws Exception
2484     {
2485         waitForPageToLoad();
2486         waitAndTypeByName("principalName", personName);
2487         waitAndClickSearch();
2488         isElementPresentByLinkText(personName);
2489         waitAndClickByName("methodToCall.clearValues");
2490         waitAndTypeByName("firstName", "Charlie");
2491         waitAndClickSearch();
2492         isElementPresentByLinkText(personName);
2493         waitAndClickByName("methodToCall.clearValues");
2494         waitAndTypeByName("lastName", "Brown");
2495         waitAndClickSearch();
2496         isElementPresentByLinkText(personName);
2497         waitAndClickByName("methodToCall.clearValues");
2498         waitAndTypeByName("campusCode", "BL");
2499         waitAndClickSearch();
2500         isElementPresentByLinkText(personName);
2501         List<String> params = new ArrayList<String>();
2502         params.add(docId);
2503         params.add(personName);
2504         
2505         return params;
2506     }
2507 
2508     protected List<String> testVerifyPerson(String docId, String personName) throws Exception
2509     {
2510         waitAndClickByLinkText(personName);
2511         waitForPageToLoad();
2512         Thread.sleep(5000);
2513         switchToWindow("Kuali :: Person");
2514         Thread.sleep(2000);
2515         SeleneseTestBase.assertEquals(personName, getTextByXpath("//div[@class='tab-container']/table//tr[2]/td[1]/div").trim());
2516         SeleneseTestBase.assertEquals("BL - BLOOMINGTON", getTextByXpath("//div[@class='tab-container']/table[3]//tr[2]/td[2]/div").trim());
2517         SeleneseTestBase.assertEquals("Student", getTextByXpath("//select/option[@selected]").trim());
2518         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Overview']");
2519         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Contact']");
2520         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Privacy Preferences']");
2521         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Membership']");
2522         waitAndClickByName("methodToCall.showAllTabs");
2523         Thread.sleep(3000);
2524         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Overview']");
2525         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Contact']");
2526         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Privacy Preferences']");
2527         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Membership']");
2528         waitAndClickByName("methodToCall.hideAllTabs");
2529         Thread.sleep(3000);
2530         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Overview']");
2531         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Contact']");
2532         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Privacy Preferences']");
2533         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Membership']");
2534         waitAndClickCloseWindow();
2535         switchToWindow("null");
2536         List<String> params = new ArrayList<String>();
2537         params.add(docId);
2538         params.add(personName);
2539         
2540         return params;
2541     }
2542 
2543     protected void testUifTooltip(String NAME_FIELD_1, String NAME_FIELD_2) throws Exception {
2544         
2545         fireEvent(NAME_FIELD_1, "focus");
2546         fireMouseOverEventByName(NAME_FIELD_1);
2547         
2548         
2549         SeleneseTestBase.assertEquals("This tooltip is triggered by focus or and mouse over.", getText(
2550                 "td.jquerybubblepopup-innerHtml"));
2551 
2552         
2553         fireEvent(NAME_FIELD_1, "blur");
2554         SeleneseTestBase.assertFalse(isVisible("div.jquerybubblepopup.jquerybubblepopup-black") && isVisible(
2555                 "td.jquerybubblepopup-innerHtml"));
2556         Thread.sleep(5000);
2557         fireEvent("field119", "focus");
2558         
2559         
2560         fireMouseOverEventByName(NAME_FIELD_2);        
2561         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(.,\"This is a tool-tip with different position and tail options\")]"));
2562 
2563         
2564         waitAndTypeByName(NAME_FIELD_2, "a");
2565         Thread.sleep(5000);
2566         SeleneseTestBase.assertFalse(isVisibleByXpath(
2567                 "//td[contains(.,\"This is a tool-tip with different position and tail options\")]"));
2568 
2569         
2570         waitAndTypeByName(NAME_FIELD_1, "1");
2571         fireEvent(NAME_FIELD_1, "blur");
2572         fireMouseOverEventByName(NAME_FIELD_1);
2573         Thread.sleep(10000);
2574         SeleneseTestBase.assertTrue("https://jira.kuali.org/browse/KULRICE-8141 Investigate why UifTooltipIT.testTooltip fails around jquerybubblepopup",
2575                         isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']") &&
2576                                 !(isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-black']")));
2577        
2578         
2579         passed();
2580     }
2581 
2582     protected void testValidCharsConstraintIT() throws Exception {
2583         assertFocusTypeBlurValidation("field50", new String[]{"12.333", "-123.33"}, new String[]{"123.33"});
2584         assertFocusTypeBlurValidation("field51", new String[]{"A"}, new String[]{"-123.33"});
2585 
2586         
2587         assertFocusTypeBlurValidation("field77", new String[]{"1.1"},new String[]{"12"});
2588         assertFocusTypeBlurValidation("field52", new String[]{"5551112222"},new String[]{"555-111-1111"});
2589         assertFocusTypeBlurValidation("field53", new String[]{"1ClassName.java"},new String[]{"ClassName.java"});
2590         assertFocusTypeBlurValidation("field54", new String[]{"aaaaa"},new String[]{"aaaaa@kuali.org"});
2591         assertFocusTypeBlurValidation("field84", new String[]{"aaaaa"},new String[]{"http://www.kuali.org"});       
2592         assertFocusTypeBlurValidation("field55", new String[]{"023512"},new String[]{"022812"});
2593         assertFocusTypeBlurValidation("field75", new String[]{"02/35/12"},new String[]{"02/28/12"});
2594         assertFocusTypeBlurValidation("field82", new String[]{"13:22"},new String[]{"02:33"});
2595         assertFocusTypeBlurValidation("field83", new String[]{"25:22"},new String[]{"14:33"});
2596         assertFocusTypeBlurValidation("field57", new String[]{"0"},new String[]{"2020"});      
2597         assertFocusTypeBlurValidation("field58", new String[]{"13"},new String[]{"12"});  
2598         assertFocusTypeBlurValidation("field61", new String[]{"5555-444"},new String[]{"55555-4444"});
2599         assertFocusTypeBlurValidation("field62", new String[]{"aa5bb6_a"},new String[]{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"});       
2600         assertFocusTypeBlurValidation("field63", new String[]{"fff555"},new String[]{"aa22 _/"});       
2601         assertFocusTypeBlurValidation("field64", new String[]{"AABB55"},new String[]{"ABCDEFGHIJKLMNOPQRSTUVWXY,Z abcdefghijklmnopqrstuvwxy,z"});       
2602         assertFocusTypeBlurValidation("field76", new String[]{"AA~BB%"},new String[]{"abcABC %$#@&<>\\{}[]*-+!=.()/\"\"',:;?"});       
2603         assertFocusTypeBlurValidation("field65", new String[]{"sdfs$#$# dsffs"},new String[]{"sdfs$#$#sffs"});      
2604         assertFocusTypeBlurValidation("field66", new String[]{"abcABCD"},new String[]{"ABCabc"});
2605         assertFocusTypeBlurValidation("field67", new String[]{"(111)B-(222)A"},new String[]{"(12345)-(67890)"});  
2606         assertFocusTypeBlurValidation("field68", new String[]{"A.66"},new String[]{"a.4"});
2607         assertFocusTypeBlurValidation("field56", new String[]{"2020-06-02"},new String[]{"2020-06-02 03:30:30.22"});
2608     }
2609 
2610     protected void assertFocusTypeBlurValidation(String field, String[] errorInputs, String[] validInputs) throws InterruptedException {
2611         assertFocusTypeBlurError(field, errorInputs);
2612         clearTextByName(field);
2613         assertFocusTypeBlurValid(field, validInputs);
2614     }
2615 
2616     protected void testSubCollectionSize() throws Exception {
2617         checkForIncidentReport(COLLECTIONS_LINK_TEXT);
2618         
2619         
2620         waitAndClickByLinkText(COLLECTIONS_LINK_TEXT);
2621         
2622         
2623         for (int second = 0;; second++) {                   
2624             if (second >= waitSeconds)
2625                 failableFail(TIMEOUT_MESSAGE + " looking for " + SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH);
2626             try {                
2627                 if (getText(SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH).equals("SubCollection - (3 lines)"))
2628                 {
2629                     break;
2630                 }
2631             } catch (Exception e) {}
2632             Thread.sleep(1000);
2633         }
2634         
2635         
2636         SeleneseTestBase.assertEquals("SubCollection - (3 lines)", getText(SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH));
2637         SeleneseTestBase.assertEquals("SubCollection - (2 lines)", getTextByXpath(
2638                 "//a[@id='subCollection1_line1_toggle']/span"));
2639     }
2640 
2641     protected void testConfigurationTestView(String idPrefix) throws Exception {
2642         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2643         
2644         
2645         String styleValue = getAttributeByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']", "style");
2646         
2647         
2648         SeleneseTestBase.assertTrue(idPrefix + "textInputField label does not contain expected style", styleValue.replace(" ", "").contains("color:red"));
2649         
2650         
2651         String refreshTextSelectLocator = "//select[@id='" + idPrefix + "RefreshTextField_control']";
2652         String[] options1 = getSelectOptionsByXpath(refreshTextSelectLocator);
2653         String dropDownSelectLocator = "//select[@id='" + idPrefix + "DropDown_control']";
2654         selectByXpath(dropDownSelectLocator, "Vegetables");
2655         Thread.sleep(3000);
2656         
2657         
2658         String[] options2 = getSelectOptionsByXpath(refreshTextSelectLocator);
2659         
2660         
2661         SeleneseTestBase.assertFalse(
2662                 "Field 1 selection did not change Field 2 options https://jira.kuali.org/browse/KULRICE-8163 Configuration Test View Conditional Options doesn't change Field 2 options based on Field 1 selection",
2663                 options1[options1.length - 1].equalsIgnoreCase(options2[options2.length - 1]));
2664         
2665         
2666         selectByXpath(dropDownSelectLocator, "None");
2667         Thread.sleep(3000);
2668         SeleneseTestBase.assertEquals("true", getAttributeByXpath(refreshTextSelectLocator, "disabled"));
2669     }
2670 
2671     
2672 
2673 
2674     protected void confirmAddLineControlsPresent(String idPrefix, String addLineIdSuffix) {
2675         String[] addLineIds = {"StartTime", "StartTimeAmPm", "AllDay"};
2676 
2677         for (String id : addLineIds) {
2678             String tagId = "//*[@id='" + idPrefix + id + addLineIdSuffix + "']";
2679             SeleneseTestBase.assertTrue("Did not find id " + tagId, isElementPresentByXpath(tagId));
2680         }
2681     }
2682 
2683     protected void testAddLineWithSpecificTime(String idPrefix, String addLineIdSuffix) throws Exception {
2684         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2685         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2686         String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
2687         String inputTime = "7:06";
2688         waitAndTypeByXpath(startTimeId, inputTime);
2689         String amPmSelectLocator = "//*[@id='" + idPrefix + "StartTimeAmPm" + addLineIdSuffix + "']";
2690         selectByXpath(amPmSelectLocator, "PM");
2691         SeleneseTestBase.assertEquals("PM", getAttributeByXpath(amPmSelectLocator, "value"));
2692         Thread.sleep(5000); 
2693         waitAndClickByXpath("//button");
2694         Thread.sleep(5000); 
2695         
2696         
2697         SeleneseTestBase.assertTrue("line (//input[@value='7:06'])is not present https://jira.kuali.org/browse/KULRICE-8162 Configuration Test View Time Info add line button doesn't addline",
2698                         isElementPresentByXpath("//input[@value='7:06']"));
2699     }
2700 
2701     protected void testAddLineWithAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
2702         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2703         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2704         String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
2705         String inputTime = "5:20";
2706         waitAndTypeByXpath(startTimeId, inputTime);
2707         String allDaySelector = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
2708         Thread.sleep(5000); 
2709         waitAndClickByXpath(allDaySelector);
2710         Thread.sleep(5000); 
2711         waitAndClick("div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button");
2712         Thread.sleep(5000); 
2713     }
2714 
2715     protected void testAddLineAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
2716         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2717         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2718         
2719         
2720         String cssCountRows = "div#ConfigurationTestView-ProgressiveRender-TimeInfoSection.uif-group div#ConfigurationTestView-ProgressiveRender-TimeInfoSection_disclosureContent.uif-disclosureContent table tbody tr";
2721         int rowCount = (getCssCount(cssCountRows));
2722         String allDayId = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
2723         Thread.sleep(5000); 
2724         waitAndClickByXpath(allDayId);
2725         waitAndClick("div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button");
2726         Thread.sleep(5000); 
2727         
2728         
2729         assertEquals("line was not added", rowCount + 1, (getCssCount(cssCountRows)));
2730     }
2731 
2732 
2733 
2734 
2735 
2736 
2737 
2738 
2739 
2740 
2741 
2742 
2743 
2744 
2745 
2746 
2747 
2748 
2749 
2750 
2751 
2752 
2753 
2754 
2755 
2756 
2757     protected void testCategoryLookUp() throws Exception {
2758         waitForPageToLoad();
2759         selectFrameIframePortlet();
2760         waitAndClickByXpath("//button[contains(.,'earch')]");
2761         Thread.sleep(3000);
2762         waitForPageToLoad();
2763         driver.findElement(By.tagName("body")).getText().contains("Actions"); 
2764         
2765         
2766         
2767         
2768         
2769         
2770         
2771         
2772         
2773         
2774     }
2775 
2776     protected void testCreateSampleEDocLite() throws Exception {
2777         waitForPageToLoad();
2778         Thread.sleep(3000);
2779         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2780         selectFrameIframePortlet();
2781         waitAndClickByXpath("//input[@name='methodToCall.search' and @alt='search']");
2782         waitForPageToLoad();
2783         
2784         
2785         waitAndClickByLinkText("Create Document");
2786         waitForPageToLoad();
2787         Thread.sleep(3000);
2788         String docId = getTextByXpath("//table/tbody/tr[4]/td[@class='datacell1']");
2789         waitAndTypeByName("userName", "Viral Chauhan");
2790         waitAndTypeByName("rqstDate", "12/03/2020");
2791         checkByName("fundedBy");
2792         waitAndTypeByName("addText", "Note Added.");
2793         waitAndClickByXpath("//td[@class='datacell']/div/img");
2794         waitForPageToLoad();
2795         waitAndClickByXpath("//input[@value='submit']");
2796         SeleneseTestBase.assertEquals(Boolean.FALSE,(Boolean) isElementPresentByXpath("//input[@value='submit']"));
2797         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByXpath("//input[@value='save']"));
2798         SeleneseTestBase.assertEquals(Boolean.FALSE,(Boolean) isElementPresentByXpath("//input[@value='cancel']"));
2799         waitForPageToLoad();
2800         selectTopFrame();
2801         waitAndClickDocSearch();
2802         waitForPageToLoad();
2803         selectFrameIframePortlet();
2804         waitAndClickByXpath("//input[@name='methodToCall.search' and @alt='search']");
2805         waitForPageToLoad();
2806         isElementPresent(By.linkText(docId));
2807     }
2808 
2809     protected void testTermLookUp() throws Exception {
2810         testLookUp();
2811         assertTextPresent("Term Parameters");
2812         waitAndClick(By.xpath(CANCEL2_XPATH));
2813         passed();
2814     }
2815 
2816     protected void testWorkFlowRouteRulesBlanketApp() throws Exception {
2817         waitForPageToLoad();
2818         Thread.sleep(3000);
2819         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2820         selectFrameIframePortlet();
2821         
2822         
2823         waitAndClickCreateNew();
2824         waitForPageToLoad();
2825         
2826         
2827         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.doctype.bo.DocumentType!!).(((name:documentTypeName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2828         waitForPageToLoad();
2829         
2830         
2831         waitAndTypeByName("name", "RoutingRuleDocument");
2832         
2833         
2834         waitAndClickSearch();
2835         waitForPageToLoad();
2836         
2837         
2838         waitAndClickReturnValue();
2839         waitForPageToLoad();
2840         
2841         
2842         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.rule.bo.RuleTemplateBo!!).(((name:ruleTemplateName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2843         waitForPageToLoad();
2844         
2845         
2846         waitAndTypeByName("name", "RuleRoutingTemplate");
2847         
2848         
2849         waitAndClickSearch();
2850         waitForPageToLoad();
2851         
2852         
2853         waitAndClickReturnValue();
2854         waitForPageToLoad();
2855         
2856         
2857         waitAndClickByName("methodToCall.createRule");
2858         waitForPageToLoad();
2859         String docId = waitForDocId();
2860         SeleneseTestBase.assertTrue(isElementPresentByName(CANCEL_NAME));
2861        
2862         
2863         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Test Routing Rule");
2864        
2865         
2866         waitAndClickByXpath("//input[@id='document.newMaintainableObject.forceAction']");
2867        
2868         
2869         waitAndTypeByXpath("//textarea[@id='document.newMaintainableObject.description']", "Test Routing Rule1");
2870        
2871         
2872         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.fieldValues(1321~docTypeFullName)']",
2873                 "DocumentTypeDocument");
2874         
2875         
2876         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalName:document.newMaintainableObject.add.personResponsibilities.principalName,))).((`document.newMaintainableObject.add.personResponsibilities.principalName:principalName,`)).((<>)).(([])).((**)).((^^)).((&&)).((/personImpl/)).((~~)).(::::;"
2877                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor15");
2878         waitForPageToLoad();
2879        
2880         
2881         waitAndClickSearch();
2882         waitForPageToLoad();
2883         
2884         
2885         waitAndClickReturnValue();
2886         waitForPageToLoad();
2887         
2888         
2889         selectByXpath("//select[@id='document.newMaintainableObject.add.personResponsibilities.actionRequestedCd']",
2890                 "ACKNOWLEDGE");
2891         
2892         
2893         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.add.personResponsibilities.priority']", "1");
2894        
2895         
2896         waitAndClickByName("methodToCall.addLine.personResponsibilities.(!!org.kuali.rice.kew.rule.PersonRuleResponsibility!!).(:::;15;:::).anchor15");
2897         waitForPageToLoad();
2898         checkForIncidentReport(BLANKET_APPROVE_NAME);
2899         waitAndClickByName(BLANKET_APPROVE_NAME);
2900         waitForPageToLoad();
2901         driver.switchTo().defaultContent(); 
2902         Thread.sleep(2000);
2903         waitAndClickDocSearch();
2904         waitForPageToLoad();
2905         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2906         selectFrameIframePortlet();
2907         waitAndClickSearch();
2908         waitForPageToLoad();
2909         SeleneseTestBase.assertTrue(isElementPresent(By.linkText(docId)));
2910         
2911         if (isElementPresent(By.linkText(docId))) {
2912             assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2), "https://jira.kuali.org/browse/KULRICE-9051 WorkFlow Route Rules Blanket Approval submit status results in Enroute, not Final");
2913         } else {
2914             SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_2));
2915             SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
2916         }
2917     }
2918 
2919     protected void testCreateNewRRDTravelRequestDestRouting() throws Exception {
2920         selectFrameIframePortlet();
2921         waitAndClick("img[alt=\"create new\"]");
2922         waitForPageToLoad();
2923         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.rule.RuleBaseValues!!).(((id:parentRuleId))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2924         waitForPageToLoad();
2925         waitAndClickByXpath("//td[@class='infoline']/input[@name='methodToCall.search']");
2926         waitForPageToLoad();
2927         waitAndClick("a[title=\"return valueRule Id=1046 \"]");
2928         waitForPageToLoad();
2929         waitAndClickByName("parentResponsibilityId");
2930         waitAndClickByName("methodToCall.createDelegateRule");
2931         waitForPageToLoad();
2932         Thread.sleep(3000);
2933         waitAndClickCancel();
2934         waitForPageToLoad();
2935         waitAndClickByName("methodToCall.processAnswer.button0");
2936         waitForPageToLoad();
2937         driver.switchTo().defaultContent();
2938         waitAndClickByXpath("(//input[@name='imageField'])[2]");
2939         waitForPageToLoad();
2940         passed();
2941     }
2942 
2943     protected void testWorkFlowRouteRulesCreateNew() throws Exception {
2944         waitForPageToLoad();
2945         Thread.sleep(5000);
2946         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2947         selectFrameIframePortlet();
2948         waitAndClickCreateNew();
2949         waitForPageToLoad();
2950         Thread.sleep(3000);
2951         waitAndClickByName(CANCEL_NAME,"https://jira.kuali.org/browse/KULRICE-8161 Work Flow Route Rules cancel new yields 404 not found");
2952    
2953         
2954         waitForPageToLoad();
2955         Thread.sleep(3000);
2956         waitAndClickByName("methodToCall.processAnswer.button0",
2957                 "https://jira.kuali.org/browse/KULRICE-7753 : WorkFlowRouteRulesIT cancel confirmation missing from create new Route Rules.");
2958         passed();
2959     }
2960 
2961     
2962 
2963 
2964 
2965     protected void testWorkFlowRouteRulesEditRouteRules() throws Exception {
2966         waitForPageToLoad();
2967         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2968         selectFrameIframePortlet();
2969         waitAndClickSearch();
2970         waitAndClickEdit();
2971         waitForPageToLoad();
2972         selectFrameIframePortlet();
2973         Thread.sleep(3000);
2974         waitAndClickCancel();
2975         waitForPageToLoad();
2976         Thread.sleep(3000);
2977         waitAndClickByName("methodToCall.processAnswer.button0");
2978         passed();
2979     }
2980 
2981     protected String testCreateNewComponent(String componentName, String componentCode) throws Exception {
2982         return testCreateNewComponent(componentName, componentCode, "");
2983     }
2984 
2985     protected String testCreateNewComponent(String componentName, String componentCode, String message) throws Exception {
2986         waitForPageToLoad();
2987         String docId = waitForDocId();
2988         
2989         
2990         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Component");
2991         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-IDM");
2992         waitAndTypeByName("document.newMaintainableObject.code", componentCode);
2993         waitAndTypeByName("document.newMaintainableObject.name", componentName);
2994         checkByName("document.newMaintainableObject.active");
2995         waitAndClickSave();
2996         waitAndClickSubmit();
2997         waitForPageToLoad();
2998         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, CREATE_NEW_DOCUMENT_NOT_SUBMITTED_SUCCESSFULLY_MESSAGE_TEXT  + message);
2999         selectTopFrame();
3000         waitAndClickDocSearchTitle();
3001         waitForPageToLoad();
3002         selectFrameIframePortlet();
3003         waitAndClickSearch();
3004         Thread.sleep(2000);
3005         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3006         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3007         selectTopFrame();
3008         return docId;
3009     }
3010     
3011     
3012     protected void testLookUpComponent(String docId, String componentName, String componentCode) throws Exception {
3013         selectFrameIframePortlet();
3014         
3015         waitAndTypeByName("name", componentName);
3016         waitAndClickSearch();
3017         isElementPresentByLinkText(componentName);
3018         waitAndClickByLinkText(componentName);
3019         waitForPageToLoad();
3020         Thread.sleep(2000);
3021         switchToWindow("Kuali :: Inquiry");
3022         Thread.sleep(2000);
3023         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3024         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3025         waitAndClickCloseWindow();
3026         switchToWindow("null");
3027     }
3028     
3029     protected void testEditComponent(String docId, String componentName, String componentCode) throws Exception {
3030         selectFrameIframePortlet();
3031         waitAndClickEdit();
3032         waitForPageToLoad();
3033         docId = waitForDocId();
3034         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Component");
3035         clearTextByName("document.newMaintainableObject.name");
3036         waitAndTypeByName("document.newMaintainableObject.name", componentName);
3037         waitAndClickSave();
3038         waitAndClickSubmit();
3039         waitForPageToLoad();
3040         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
3041         selectTopFrame();
3042         waitAndClickDocSearchTitle();
3043         waitForPageToLoad();
3044         selectFrameIframePortlet();
3045         waitAndClickSearch();
3046         Thread.sleep(2000);
3047         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3048         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3049         selectTopFrame();
3050     }
3051     
3052     protected void testCopyComponent(String docId, String componentName, String componentCode) throws Exception {
3053         selectFrameIframePortlet();
3054         waitAndClickCopy();
3055         waitForPageToLoad();
3056         docId = waitForDocId();
3057         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Component");
3058         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-IDM");
3059         waitAndTypeByName("document.newMaintainableObject.code", componentCode);
3060         clearTextByName("document.newMaintainableObject.name");
3061         waitAndTypeByName("document.newMaintainableObject.name", componentName);
3062         waitAndClickSave();
3063         waitAndClickSubmit();
3064         waitForPageToLoad();
3065         checkForDocError();
3066         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
3067         selectTopFrame();
3068         waitAndClickDocSearchTitle();
3069         waitForPageToLoad();
3070         selectFrameIframePortlet();
3071         waitAndClickSearch();
3072         Thread.sleep(2000);
3073         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3074         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3075         selectTopFrame();
3076     }
3077 
3078     protected void testVerifyCopyComponent(String docId, String componentName, String componentCode) throws Exception {
3079         selectFrameIframePortlet();
3080         waitAndTypeByName("name", componentName);
3081         waitAndClickSearch();
3082         isElementPresentByLinkText(componentName);
3083         waitAndClickByLinkText(componentName);
3084         waitForPageToLoad();
3085         Thread.sleep(2000);
3086         switchToWindow("Kuali :: Inquiry");
3087         Thread.sleep(2000);
3088         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3089         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3090         waitAndClickCloseWindow();
3091         switchToWindow("null");
3092     }
3093     
3094     
3095 
3096 
3097     protected void testPageHelp() throws Exception {
3098         
3099         fireMouseOverEventByXpath("//h2/span[@class='uif-headerText-span']");
3100         SeleneseTestBase.assertEquals("Sample text for page help", getText("td.jquerybubblepopup-innerHtml"));
3101 
3102         
3103         waitAndClickByXpath("//input[@alt='Help for Help Page']");
3104         Thread.sleep(5000);
3105         switchToWindow("Kuali Foundation");
3106         Thread.sleep(5000);      
3107         switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
3108     }
3109 
3110     
3111 
3112 
3113     protected void testTooltipHelp() throws Exception {
3114         
3115         if (isElementPresentByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]")) {
3116             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3117         }
3118         
3119         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label left')]")) {
3120             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3121         }
3122         
3123         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label right')]")) {
3124             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label right')]"));
3125         }
3126         
3127         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label top')]")) {
3128             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3129         }
3130         
3131         if (isElementPresentByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]")) {
3132             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]"));
3133         }
3134         
3135         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]")) {
3136             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]"));
3137         }
3138         
3139         if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
3140             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]"));
3141         }
3142         
3143         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]")) {
3144             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3145         }
3146         
3147         if (isElementPresentByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]")) {
3148             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3149         }
3150         
3151         if (isElementPresentByXpath("//td[contains(text(),'Sample text for check box help')]")) {
3152             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3153         }
3154        
3155         
3156         fireMouseOverEventByXpath("//div[@id='ConfigurationTestView-Help-Section1']/div/h3[@class='uif-headerText']");
3157         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3158         String javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[0].style.display='none'"; 
3159         ((JavascriptExecutor) driver).executeScript(javascript);
3160         Thread.sleep(3000);
3161         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3162         
3163         
3164         SeleneseTestBase.assertFalse(isElementPresent("#ConfigurationTestView-Help-Section1 input.uif-helpImage"));
3165     
3166         
3167         fireMouseOverEventByXpath("//label[@id='field-label-left_label']");
3168         Thread.sleep(3000);
3169         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3170         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3171                 "element[1].style.display='none'"; 
3172         Thread.sleep(3000);
3173         ((JavascriptExecutor) driver).executeScript(javascript);
3174         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3175         
3176         
3177         fireMouseOverEventByXpath("//label[@id='field-label-right_label']");
3178         Thread.sleep(3000);
3179         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label righ')]"));
3180         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +"element[2].style.display='none'"; 
3181         ((JavascriptExecutor) driver).executeScript(javascript);
3182         Thread.sleep(3000);
3183         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label righ')]"));
3184 
3185         
3186         fireMouseOverEventByXpath("//label[@id='field-label-top_label']");
3187         Thread.sleep(3000);
3188         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3189         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[3].style.display='none'"; 
3190         ((JavascriptExecutor) driver).executeScript(javascript);
3191         Thread.sleep(3000);
3192         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3193 
3194         
3195         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@id='standalone-help-not-rendered']"));
3196 
3197         
3198         fireMouseOverEventByXpath("//label[@id='override-tooltip_label']");
3199         Thread.sleep(3000);
3200         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]"));
3201         if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
3202             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]"));
3203         }        
3204         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[4].style.display='none'"; 
3205         ((JavascriptExecutor) driver).executeScript(javascript);
3206         Thread.sleep(3000);
3207         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]"));
3208 
3209         
3210         fireMouseOverEventByXpath("//input[@id='on-focus-tooltip_control']");
3211         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3212         fireMouseOverEventByXpath("//label[@id='on-focus-tooltip_label']");
3213         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3214         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +"element[5].style.display='none'"; 
3215         ((JavascriptExecutor) driver).executeScript(javascript);
3216         Thread.sleep(3000);                
3217         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[6].style.display='none'"; 
3218         ((JavascriptExecutor) driver).executeScript(javascript);
3219         Thread.sleep(3000);    
3220         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3221         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3222 
3223         
3224         fireMouseOverEventByXpath("//label[@id='checkbox_label']");
3225         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3226         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[7].style.display='none'"; 
3227         ((JavascriptExecutor) driver).executeScript(javascript);
3228         Thread.sleep(3000);
3229         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3230     }
3231 
3232     
3233 
3234 
3235      protected void testDisplayOnlyTooltipHelp() throws Exception {
3236         
3237         if (isElementPresentByXpath("//td[contains(text(),'Sample text for sub-section help')]")) {
3238             SeleneseTestBase.assertFalse(isVisible("//td[contains(text(),'Sample text for sub-section help')]"));
3239         }
3240         
3241         if (isElementPresentByXpath("//td[contains(text(),'Sample text for read only field help')]")) {
3242             SeleneseTestBase.assertFalse(isVisible("//td[contains(text(),'Sample text for read only field help')]"));
3243         }
3244 
3245         
3246         fireMouseOverEventByXpath("//span[contains(text(),'Display only fields')]");
3247         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for sub-section help')]"));
3248         String javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3249                 "element[0].style.display='none'"; 
3250         ((JavascriptExecutor) driver).executeScript(javascript);
3251         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for sub-section help')]"));
3252 
3253         
3254         fireMouseOverEventByXpath("//label[@for='display-field_control']");
3255         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for read only field help')]"));
3256         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3257                 "element[0].style.display='none'"; 
3258         ((JavascriptExecutor) driver).executeScript(javascript);
3259     }
3260 
3261     
3262 
3263 
3264     protected void testMissingTooltipHelp() throws Exception {
3265         
3266         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3267 
3268         
3269         SeleneseTestBase.assertFalse(isElementPresent("#ConfigurationTestView-Help-Section2 input.uif-helpImage"));
3270        
3271         
3272         fireMouseOverEventByXpath("//div[@id='ConfigurationTestView-Help-Section2']/div");
3273         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3274         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3275 
3276         
3277         fireMouseOverEventByXpath("//label[@id='missing-tooltip-help_label']");
3278         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3279         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3280     }
3281 
3282     
3283 
3284 
3285 
3286     protected void testExternalHelp2() throws Exception {
3287         
3288         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for External Help\"]"), "HelpWindow", "http://www.kuali.org/?section");
3289 
3290         
3291         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-left-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3292                 "http://www.kuali.org/?label_left");
3293 
3294         
3295         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-right-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3296                 "http://www.kuali.org/?label_right");
3297 
3298         
3299         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-top-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3300                 "http://www.kuali.org/?system_parm");
3301 
3302         
3303         assertPopUpWindowUrl(By.id("standalone-external-help"), "HelpWindow", "http://www.kuali.org/?widget_only");
3304     }
3305 
3306     
3307 
3308 
3309 
3310     protected void testDisplayOnlyExternalHelp2() throws Exception {
3311         
3312         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for Display only fields\"]"), "HelpWindow", "http://www.kuali.org/?sub_section");
3313 
3314         
3315         assertPopUpWindowUrl(By.xpath("//div[@id='display-field-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3316                 "http://www.kuali.org/?display_field");
3317     }
3318 
3319     
3320 
3321 
3322 
3323     protected void testMissingExternalHelp2() throws Exception {
3324         
3325         SeleneseTestBase.assertFalse(isElementPresent(By.cssSelector("input[title=\"Help for Missing External Help\"]")));
3326 
3327         
3328         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-externalHelpUrl-empty']/*[@class='uif-helpImage']"));
3329 
3330         
3331         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-helpdefinition-empty']/*[@class='uif-helpImage']"));
3332 
3333         
3334         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-system-parm-missing']/*[@class='uif-helpImage']"));
3335 
3336         
3337         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='standalone-external-help-missing']"));
3338     }
3339     
3340     protected void testReferenceCampusTypeBlanketApprove() throws Exception {
3341         selectFrameIframePortlet();
3342         waitAndCreateNew();
3343         String docId = waitForDocId();
3344         assertBlanketApproveButtonsPresent();
3345         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
3346         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Campus Type " + dtsTwo);
3347         waitAndTypeByXpath(DOC_CODE_XPATH, RandomStringUtils.randomAlphabetic(1));
3348         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "Indianapolis" + dtsTwo);
3349         int attemptCount = 1;
3350         blanketApproveCheck();
3351         while (hasDocError("same primary key already exists") && attemptCount < 25) {
3352             clearTextByXpath(DOC_CODE_XPATH);
3353             waitAndTypeByXpath(DOC_CODE_XPATH, Character.toString((char) ('A' + attemptCount++)));
3354             blanketApproveCheck();
3355         }
3356         blanketApproveAssert();
3357         assertDocFinal(docId);
3358     }
3359 
3360     protected void testSearchEditCancel() throws InterruptedException {
3361         selectFrameIframePortlet();
3362         waitAndClickSearch2();
3363         waitAndClickEdit();
3364         testCancelConfirmation();
3365     }
3366 
3367     protected void testServerErrorsIT() throws Exception {
3368         waitAndClickByXpath("//button[contains(.,'Get Error Messages')]");
3369         waitForPageToLoad();
3370         Thread.sleep(5000);
3371         assertElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-errorMessageItem-field");
3372         waitIsVisibleByXpath("//div[@data-header_for='Demo-ValidationLayout-Section1']");
3373         assertElementPresentByXpath("//*[@data-messageitemfor='Demo-ValidationLayout-Section1' and @class='uif-errorMessageItem']");
3374         assertElementPresent("div[data-role=\"InputField\"] img[alt=\"Error\"]");
3375         assertElementPresentByXpath("//a[contains(.,'Section 1 Title')]");
3376         fireMouseOverEventByXpath("//a[contains(.,'Field 1')]");
3377         assertElementPresent(".uif-errorMessageItem-field");
3378         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3379         Thread.sleep(2000);
3380         waitIsVisible(".jquerybubblepopup-innerHtml");
3381         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems");
3382         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3383         waitAndTypeByName("field1", "");
3384         fireEvent("field1", "blur");
3385         fireEvent("field1", "focus");
3386         waitIsVisible(".jquerybubblepopup-innerHtml");
3387         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3388         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems");
3389         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field");
3390         waitAndTypeByName("field1", "t");
3391 
3392         for (int second = 0;; second++) {
3393             if (second >= waitSeconds) {
3394                 failableFail(TIMEOUT_MESSAGE);
3395             }
3396             try {
3397                 if (!isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems")) {
3398                     break;
3399                 }
3400             } catch (Exception e) {}
3401             Thread.sleep(1000);
3402         }
3403 
3404         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3405         SeleneseTestBase.assertFalse(isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3406     }
3407 
3408     protected void testServerInfoIT() throws Exception {
3409         waitAndClickByXpath("//button[contains(.,'Get Info Messages')]");
3410         waitIsVisibleByXpath("//div[@data-messagesfor='Demo-ValidationLayout-SectionsPage']");
3411         SeleneseTestBase.assertTrue(isVisibleByXpath("//div[@data-messagesfor='Demo-ValidationLayout-SectionsPage']"));
3412         SeleneseTestBase.assertTrue(isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-infoMessageItem"));
3413         SeleneseTestBase.assertTrue(isVisible("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"]"));
3414         SeleneseTestBase.assertTrue(isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-infoMessageItem"));
3415         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@data-role='InputField']//img[@alt='Information']"));
3416         fireMouseOverEventByXpath("//a[contains(.,'Field 1')]");
3417         SeleneseTestBase.assertTrue(isElementPresent(".uif-infoHighlight"));
3418         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3419 
3420         for (int second = 0;; second++) {
3421             if (second >= waitSeconds)
3422                 failableFail(TIMEOUT_MESSAGE);
3423             try {
3424                 if (isVisible(".jquerybubblepopup-innerHtml"))
3425                     break;
3426             } catch (Exception e) {}
3427             Thread.sleep(1000);
3428         }
3429 
3430         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems"));
3431         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3432         waitAndTypeByName("field1", "");
3433         fireEvent("field1", "blur");
3434         fireEvent("field1", "focus");
3435 
3436         for (int second = 0;; second++) {
3437             if (second >= waitSeconds)
3438                 failableFail(TIMEOUT_MESSAGE);
3439             try {
3440                 if (isVisible(".jquerybubblepopup-innerHtml"))
3441                     break;
3442             } catch (Exception e) {}
3443             Thread.sleep(1000);
3444         }
3445 
3446         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3447         for (int second = 0;; second++) {
3448             if (second >= waitSeconds)
3449                 failableFail(TIMEOUT_MESSAGE);
3450             try {
3451                 if (isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"))
3452                     break;
3453             } catch (Exception e) {}
3454             Thread.sleep(1000);
3455         }
3456 
3457         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field"));
3458         waitAndTypeByName("field1", "b");
3459         fireEvent("field1", "blur");
3460         fireEvent("field1", "focus");
3461 
3462         for (int second = 0;; second++) {
3463             if (second >= waitSeconds)
3464                 failableFail(TIMEOUT_MESSAGE);
3465             try {
3466                 if (!isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"))
3467                     break;
3468             } catch (Exception e) {}
3469             Thread.sleep(1000);
3470         }
3471 
3472         fireEvent("field1", "blur");
3473         Thread.sleep(3000);
3474         SeleneseTestBase.assertTrue(!isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3475         SeleneseTestBase.assertFalse(isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3476         fireEvent("field1", "focus");
3477         clearTextByName("field1");
3478         fireEvent("field1", "blur");
3479         SeleneseTestBase.assertTrue(isElementPresent("div.uif-hasError"));
3480         SeleneseTestBase.assertTrue(isElementPresent("img[src*=\"error.png\"]"));
3481     }
3482 
3483     protected void testServerWarningsIT() throws Exception {
3484         waitAndClickByXpath("//button[contains(.,'Get Warning Messages')]");
3485         waitForPageToLoad();
3486         Thread.sleep(3000);
3487         com.thoughtworks.selenium.SeleneseTestBase.assertTrue("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] not visible",
3488                 isVisible("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"]"));
3489         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3490                 "div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-warningMessageItem not present",
3491                 isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-warningMessageItem"));
3492         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3493                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] not visible", isVisible(
3494                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"]"));
3495         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3496                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-warningMessageItem not present",
3497                 isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-warningMessageItem"));
3498         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3499                 "div[data-role=\"InputField\"] img[alt=\"Warning\"] not present", isElementPresent(
3500                 "div[data-role=\"InputField\"] img[alt=\"Warning\"]"));
3501         fireMouseOverEvent(By.xpath("//a[contains(.,'Field 1')]"));
3502         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3503                 ".uif-warningHighlight no present when //a[contains(.,'Field 1')] is moused over",
3504                 isElementPresent(".uif-warningHighlight"));
3505         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3506         waitForElementVisible(".jquerybubblepopup-innerHtml", " after click on //a[contains(.,'Field 1')]");
3507         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3508                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems not visible", isVisible(
3509                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems"));
3510         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3511                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible",
3512                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3513         waitAndTypeByName("field1", "");
3514         fireEvent("field1", "blur");
3515         fireMouseOverEventByName("field1");
3516         waitForElementVisible(".jquerybubblepopup-innerHtml",
3517                 " not visible after typing nothing in name=field1 then firing blur and focus events");
3518         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3519                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible after typing nothing in name=field1 then firing blur and focus events",
3520                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3521         waitForElementVisible(".jquerybubblepopup-innerHtml> .uif-clientMessageItems",
3522                 " not visible after typing nothing in name=field1 then firing blur and focus events");
3523         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3524                 ".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field not visible after typing nothing in name=field1 then firing blur and focus events",
3525                 isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field"));
3526         waitAndTypeByName("field1", "b");
3527         fireEvent("field1", "blur");
3528         fireMouseOverEventByName("field1");
3529         waitForElementVisible(".jquerybubblepopup-innerHtml> .uif-serverMessageItems", "");
3530         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3531                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible after typing b in name=field1 then firing blur and focus events",
3532                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3533         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(".jquerybubblepopup-innerHtml > .uif-clientMessageItems",
3534                 !isElementPresent(
3535                         ".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3536         clearTextByName("field1");
3537         fireEvent("field1", "blur");
3538         fireMouseOverEventByName("field1");
3539         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3540                 ".uif-hasError is not present after typing nothing in name=field1 and then firing focus and blur events",
3541                 isElementPresent(".uif-hasError"));
3542         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3543                 "img[src*=\"error.png\"] is not present after typing nothing in name=field1 and then firing focus and blur events",
3544                 isElementPresent("img[src*=\"error.png\"]"));
3545         passed();
3546     }
3547 
3548     
3549 
3550 
3551     protected void testViewHelp() throws Exception {
3552         
3553         fireMouseOverEventByXpath("//h1/span[@class='uif-headerText-span']");
3554         SeleneseTestBase.assertEquals("Sample text for view help", getText("td.jquerybubblepopup-innerHtml"));
3555 
3556         
3557         waitAndClickByXpath("//input[@alt='Help for Configuration Test View - Help']");
3558         Thread.sleep(5000);
3559         switchToWindow("Kuali Foundation");
3560         Thread.sleep(5000);
3561         switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
3562     }
3563 
3564     
3565 
3566 
3567     protected void testViewHelp2() throws Exception {
3568         
3569         if (isElementPresentByXpath("//td[@class='jquerybubblepopup-innerHtml']")) {
3570             SeleneseTestBase.assertFalse(driver.findElement(By.cssSelector("td.jquerybubblepopup-innerHtml")).isDisplayed());
3571         }
3572 
3573         
3574         fireMouseOverEventByXpath("//h1/span[@class='uif-headerText-span']");
3575         Thread.sleep(2000);
3576         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'View help')]"));
3577         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for Configuration Test View\"]"), "HelpWindow", "http://www.kuali.org/");
3578     }
3579 
3580     protected void testVerifyAddDeleteFiscalOfficerLegacy() throws Exception {
3581         selectFrameIframePortlet();
3582         checkForIncidentReport("testVerifyAddDeleteFiscalOfficerLegacy");
3583         waitAndTypeByName("document.documentHeader.documentDescription", ITUtil.createUniqueDtsPlusTwoRandomChars());
3584         waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number","1234567890");
3585         waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId", "2");
3586         waitAndClickByXpath("//button[@data-loadingmessage='Adding Line...']");
3587         waitForElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number");
3588         SeleneseTestBase.assertEquals("1234567890", getAttributeByName(
3589                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number", "value"));
3590         SeleneseTestBase.assertEquals("2", getAttributeByName(
3591                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].foId", "value"));
3592         waitAndClickByXpath("//button[@data-loadingmessage='Deleting Line...']");
3593         Thread.sleep(3000);
3594         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByName(
3595                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number"));
3596         passed();
3597     }
3598 
3599     protected void testVerifyAddDeleteNoteLegacy() throws Exception {
3600         selectFrameIframePortlet();
3601         waitAndClick("div.tableborders.wrap.uif-boxLayoutVerticalItem.clearfix  span.uif-headerText-span > img.uif-disclosure-image");
3602         waitForElementPresent("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3603         waitAndClickByName("newCollectionLines['document.notes'].noteText");
3604         waitAndTypeByName("newCollectionLines['document.notes'].noteText", "Test note");
3605         waitAndClick("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3606 
3607         SeleneseTestBase.assertEquals("Test note", getTextByXpath("//pre"));
3608         waitAndClick("button[title='Delete a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3609         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByName("document.notes[0].noteText"));
3610         passed();
3611     }
3612 
3613     protected void testVerifyAdHocRecipientsLegacy() throws Exception {
3614         selectFrameIframePortlet();
3615         waitAndClickByLinkText("Fiscal Officer Accounts");
3616         assertElementPresentByXpath(
3617                 "//select[@name=\"newCollectionLines['document.adHocRoutePersons'].actionRequested\"]");
3618         assertElementPresentByXpath(
3619                 "//input[@name=\"newCollectionLines['document.adHocRoutePersons'].name\" and @type=\"text\"]");
3620         assertElementPresentByXpath(
3621                 "//select[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].actionRequested\"]");
3622         assertElementPresentByXpath(
3623                 "//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientNamespaceCode\" and @type='text']");
3624         assertElementPresentByXpath(
3625                 "//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientName\" and @type='text']");
3626         passed();
3627     }
3628 
3629     protected void testVerifyButtonsLegacy() throws Exception {
3630         selectFrameIframePortlet();
3631         assertElementPresentByXpath("//button[contains(.,'ubmit')]");
3632         assertElementPresentByXpath("//button[contains(.,'ave')]");
3633         assertElementPresentByXpath("//button[contains(.,'lanket approve')]");
3634         assertElementPresentByXpath("//button[contains(.,'lose')]");
3635         assertElementPresentByXpath("//a[contains(.,'ancel')]");
3636         passed();
3637     }
3638 
3639     protected void testVerifyConstraintText() throws Exception {
3640         selectFrameIframePortlet();
3641         SeleneseTestBase.assertEquals("* indicates required field", getText(
3642                 "div.uif-boxLayout.uif-horizontalBoxLayout.clearfix > span.uif-message.uif-requiredInstructionsMessage.uif-boxLayoutHorizontalItem"));
3643         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3644                 "div.uif-group.uif-gridGroup.uif-gridSection.uif-disclosure.uif-boxLayoutVerticalItem.clearfix div[data-label='Travel Account Number'].uif-field.uif-inputField span.uif-message.uif-constraintMessage"));
3645         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3646                 "div.uif-group.uif-gridGroup.uif-gridSection.uif-disclosure.uif-boxLayoutVerticalItem.clearfix div[data-label='Travel Sub Account Number'].uif-field.uif-inputField span.uif-message.uif-constraintMessage"));
3647         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3648                 "div.uif-group.uif-gridGroup.uif-collectionItem.uif-gridCollectionItem.uif-collectionAddItem div[data-label='Travel Account Number'].uif-field.uif-inputField span.uif-message.uif-constraintMessage"));
3649         passed();
3650     }
3651 
3652     protected void testVerifyEditedComponent(String docId, String componentName, String componentCode) throws Exception {
3653         selectFrameIframePortlet();
3654         waitAndTypeByName("name", componentName);
3655         waitAndClickSearch();
3656         isElementPresentByLinkText(componentName);
3657         waitAndClickByLinkText(componentName);
3658         waitForPageToLoad();
3659         Thread.sleep(2000);
3660         switchToWindow("Kuali :: Inquiry");
3661         Thread.sleep(2000);
3662         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3663         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3664         waitAndClickCloseWindow();
3665         switchToWindow("null");
3666         List<String> parameterList=new ArrayList<String>();
3667     }
3668 
3669     protected void testVerifyDisclosures() throws Exception {
3670         selectFrameIframePortlet();
3671         assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
3672         assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
3673         assertElementPresentByXpath("//span[contains(text(),'Account Information')]");
3674         assertElementPresentByXpath("//span[contains(text(),'Fiscal Officer Accounts')]");
3675         assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
3676         assertElementPresentByXpath("//span[contains(text(),'Ad Hoc Recipients')]");
3677         assertElementPresentByXpath("//span[contains(text(),'Route Log')]");
3678         colapseExpandByXpath("//span[contains(text(),'Document Overview')]//img", "//label[contains(text(),'Organization Document Number')]");
3679         colapseExpandByXpath("//span[contains(text(),'Account Information')]//img","//label[contains(text(),'Travel Account Type Code')]");
3680         colapseExpandByXpath("//span[contains(text(),'Fiscal Officer Accounts')]//img","//a[contains(text(),'Lookup/Add Multiple Lines')]");
3681         expandColapseByXpath("//span[contains(text(),'Notes and Attachments')]//img","//label[contains(text(),'Note Text')]");
3682         expandColapseByXpath("//span[contains(text(),'Ad Hoc Recipients')]","//span[contains(text(),'Ad Hoc Group Requests')]");
3683 
3684         
3685         waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
3686         selectFrame("routeLogIFrame");
3687         waitIsVisibleByXpath("//img[@alt='refresh']");
3688 
3689         
3690         selectTopFrame();
3691         selectFrameIframePortlet();
3692         waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
3693         selectFrame("routeLogIFrame");
3694         waitNotVisibleByXpath("//img[@alt='refresh']");
3695         passed();
3696     }
3697 
3698     protected void testVerifyDocumentOverviewLegacy() throws Exception {
3699         selectFrameIframePortlet();
3700         assertTextPresent("Document Overview");
3701         assertElementPresentByXpath("//input[@name='document.documentHeader.documentDescription']");
3702         assertElementPresentByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']");
3703         assertElementPresentByXpath("//textarea[@name='document.documentHeader.explanation']");
3704         passed();
3705     }
3706 
3707     protected void testVerifyExpandCollapse() throws Exception {
3708         selectFrameIframePortlet();
3709         assertElementPresentByXpath("//button[contains(@class, 'uif-expandDisclosuresButton')]");
3710         assertElementPresentByXpath("//button[contains(@class, 'uif-collapseDisclosuresButton')]");
3711         passed();
3712     }
3713 
3714     protected void testVerifyFieldsLegacy() throws Exception {
3715         selectFrameIframePortlet();
3716         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.number' and @type='text' and @size=10 and @maxlength=10]");
3717         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.extension.accountTypeCode' and @type='text' and @size=2 and @maxlength=3]");
3718         assertElementPresentByXpath(
3719                 "//input[@name='document.newMaintainableObject.dataObject.subAccount' and @type='text' and @size=10 and @maxlength=10]");
3720         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent' and @type='text' and @size=6 and @maxlength=20]");
3721         assertElementPresentByXpath(
3722                 "//input[@name='document.newMaintainableObject.dataObject.foId' and @type='text' and @size=5 and @maxlength=10]");
3723         assertElementPresentByXpath(
3724                 "//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number\" and @type='text' and @size=10 and @maxlength=10]");
3725         assertElementPresentByXpath(
3726                 "//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId\" and @type='text' and @size=5 and @maxlength=10]");
3727         passed();
3728     }
3729 
3730     protected void testVerifyHeaderFieldsLegacy() throws Exception {
3731         selectFrameIframePortlet();
3732         assertElementPresentByXpath("//div[contains(@class, 'uif-documentNumber')]");
3733         assertElementPresentByXpath("//div[contains(@class, 'uif-documentInitiatorNetworkId')]");
3734         assertElementPresentByXpath("//div[contains(@class, 'uif-documentStatus')]");
3735         assertElementPresentByXpath("//div[contains(@class, 'uif-documentCreateDate')]");
3736         passed();
3737     }
3738 
3739     protected void testVerifyLookupAddMultipleLinesLegacy() throws Exception {
3740         selectFrameIframePortlet();
3741         assertElementPresentByXpath("//a[contains(text(),'Lookup/Add Multiple Lines')]");
3742         passed();
3743     }
3744 
3745     protected void testVerifyNotesAndAttachments() throws Exception {
3746         selectFrameIframePortlet();
3747         waitAndClickByXpath("//span[contains(text(),'Notes and Attachments')]");
3748         waitForElementPresentByXpath("//button[@title='Add a Note']");
3749         assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
3750         assertElementPresentByXpath("//textarea[@name=\"newCollectionLines['document.notes'].noteText\"]");
3751         assertElementPresentByXpath("//input[@name='attachmentFile']");
3752 
3753         
3754         passed();
3755     }
3756 
3757     protected void testVerifyQuickfinderIconsLegacy() throws Exception {
3758         selectFrameIframePortlet();
3759         assertTextPresent("Document Overview");
3760         assertElementPresentByXpath("//*[@id='quickfinder1']");
3761         assertElementPresentByXpath("//*[@id='quickfinder2']");
3762         assertElementPresentByXpath("//*[@id='quickfinder3']");
3763         assertElementPresentByXpath("//*[@id='quickfinder4_add']");
3764 
3765         
3766         passed();
3767     }
3768 
3769     protected void testVerifyRouteLog() throws Exception {
3770         selectFrameIframePortlet();
3771         waitAndClickByLinkText("Route Log");
3772         waitForElementPresent("//iframe[contains(@src,'RouteLog.do')]");
3773         passed();
3774     }
3775 
3776     protected void testVerifySave() throws Exception {
3777         selectFrameIframePortlet();
3778         waitAndTypeByName("document.documentHeader.documentDescription", "Test Document " + ITUtil.DTS);
3779         waitAndClickByName("document.newMaintainableObject.dataObject.number");
3780         waitAndTypeByName("document.newMaintainableObject.dataObject.number", "1234567890");
3781         waitAndTypeByName("document.newMaintainableObject.dataObject.extension.accountTypeCode", "EAT");
3782         waitAndTypeByName("document.newMaintainableObject.dataObject.subAccount", "a1");
3783         waitAndClick(
3784                 "button[data-loadingmessage='Saving...'].uif-action.uif-primaryActionButton.uif-boxLayoutHorizontalItem");
3785         Thread.sleep(2000);
3786 
3787         
3788         passed();
3789     }
3790 
3791     protected void testVerifySubsidizedPercentWatermarkLegacy() throws Exception {
3792         selectFrameIframePortlet();
3793 
3794         
3795         
3796         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent']");
3797         passed();
3798     }
3799 
3800     protected void testWorkFlowDocTypeBlanketApprove() throws Exception {
3801         selectFrameIframePortlet();
3802         waitAndCreateNew();
3803         String docId = waitForDocId();
3804         assertBlanketApproveButtonsPresent();
3805         String dts = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
3806         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Document Type " + dts);
3807         String parentDocType = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.kew.doctype.bo.DocumentType!!).(((name:document.newMaintainableObject.parentDocType.name,documentTypeId:document.newMaintainableObject.docTypeParentId,))).((`document.newMaintainableObject.parentDocType.name:name,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
3808                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
3809         waitAndClickByXpath(parentDocType);
3810         waitAndClickSearch();
3811         waitAndClickReturnValue();
3812         String docTypeName = "DocType" + ITUtil.DTS;
3813         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
3814         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']",
3815                 "${kr.url}/maintenance.do?methodToCall=docHandler");
3816         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']",
3817                 "Workflow Maintenance Document Type Document " + dts);
3818         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']",
3819                 "default.htm?turl=WordDocuments%2Fdocumenttype.htm");
3820         blanketApproveTest();
3821         assertDocFinal(docId);
3822     }
3823 
3824     protected void uncheck(By by) throws InterruptedException {
3825         WebElement element = driver.findElement(by);
3826         if (element.isSelected()) {
3827             element.click();
3828         }
3829     }
3830 
3831     protected void uncheckByName(String name) throws InterruptedException {
3832         uncheck(By.name(name));
3833     }
3834 
3835     protected void uncheckByXpath(String locator) throws InterruptedException {
3836         uncheck(By.xpath(locator));
3837     }
3838 
3839     protected boolean validateErrorImage(boolean validateVisible) throws Exception {
3840         Thread.sleep(500);
3841         boolean valid = false;
3842 
3843         for (int second = 0; second < 5; second++) {
3844             if ((valid = validateErrorImage(validateVisible, second, ARIA_INVALID_XPATH)) == true) {
3845                 break;
3846             }
3847         }
3848 
3849         if (validateVisible) {
3850             SeleneseTestBase.assertTrue("valid = " + valid + " when validateVisible is " + validateVisible, valid);
3851         } else {
3852             SeleneseTestBase.assertFalse("valid = " + valid + " when validateVisible is " + validateVisible, valid);
3853         }
3854 
3855         return valid;
3856     }
3857 
3858     private boolean validateErrorImage(boolean validateVisible, int second, String xpath) throws InterruptedException {
3859         try {
3860             if (validateVisible) {
3861                 if (isElementPresentByXpath(xpath) && isVisibleByXpath(xpath)) {
3862                     return true;
3863                 }
3864             } else {
3865                 if (!isElementPresentByXpath(xpath) || !isVisibleByXpath(xpath)) {
3866                     return true;
3867                 }
3868             }
3869         } catch (Exception e) {
3870             
3871         }
3872         Thread.sleep(1000);
3873         return false;
3874     }
3875 
3876     protected void verifyRichMessagesValidationBasicFunctionality() throws Exception
3877     {
3878         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field1']"));
3879         SeleneseTestBase.assertTrue(isElementPresentByXpath("//a[contains(text(), 'Kuali')]"));
3880         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='checkbox' and @name='field2']"));
3881         Thread.sleep(3000);
3882     }
3883 
3884     protected void verifyRichMessagesValidationAdvancedFunctionality() throws Exception
3885     {
3886         
3887         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@style='color: green;']"));
3888         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@style='color: blue;']"));
3889 
3890         
3891         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@class='fl-text-underline fl-text-larger']"));
3892 
3893         
3894         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field3']"));
3895         SeleneseTestBase.assertTrue(isElementPresentByXpath("//select[@name='field4']"));
3896         SeleneseTestBase.assertTrue(isElementPresentByXpath("//button[contains(text(), 'Action Button')]"));
3897 
3898         
3899         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/span[contains(., 'Color')]"));
3900         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/i/b[contains(., 'Html')]"));
3901         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/img[@class='uif-image inlineBlock']"));
3902         Thread.sleep(3000);
3903     }
3904 
3905     protected void verifyRichMessagesValidationLettersNumbersValidation() throws Exception
3906     {
3907         
3908         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field5']"));
3909         waitAndTypeByXpath(
3910                 "//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']",
3911                 "abc");
3912         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3913         clearTextByXpath(
3914                 "//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']");
3915         waitAndTypeByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']","abc12");
3916         waitAndTypeByXpath("//input[@name= 'field6']", "");
3917         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3918         Thread.sleep(3000);
3919         clearTextByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']/input[@name= 'field5']");
3920         waitAndTypeByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']/input[@name= 'field5']","abc");
3921         waitAndTypeByXpath("//input[@name= 'field6']", "");
3922 
3923         
3924         waitAndTypeByXpath("//input[@name= 'field6']", "123");
3925         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3926         clearTextByXpath("//input[@name= 'field6']");
3927         waitAndTypeByXpath("//input[@name= 'field6']", "123ab");
3928         fireEvent("field6", "blur");
3929         Thread.sleep(5000);
3930         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3931         Thread.sleep(3000);
3932     }
3933 
3934     protected void verifyRichMessagesValidationRadioAndCheckBoxGroupFunctionality() throws Exception
3935     {
3936         
3937         SeleneseTestBase.assertTrue(isElementPresentByXpath("//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='1']"));
3938         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3939                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='2']"));
3940         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3941                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='3']"));
3942         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3943                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='4']"));
3944 
3945         
3946         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3947                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='1']"));
3948         SeleneseTestBase.assertTrue(isElementPresentByXpath("//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='2']"));
3949         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3950                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='3']"));
3951         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3952                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/label/div/select[@name='field4']"));
3953 
3954         
3955         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='checkbox' and @name='bField1']"));
3956         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field103']"));
3957     }
3958 
3959     protected void verifyRichMessagesValidationLinkDeclarationsFunctionality() throws Exception
3960     {
3961         
3962         waitAndClickByXpath("//div[contains(., 'Testing link tag')]/a");
3963         Thread.sleep(9000);
3964         switchToWindow("Open Source Software | www.kuali.org");
3965         switchToWindow(RICH_MESSAGES_WINDOW_TITLE);
3966 
3967         
3968         waitAndClickByXpath("//div[contains(., 'Testing methodToCall action')]/a");
3969         Thread.sleep(3000);
3970         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3971                 "//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3972         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3973                 "//div[@id='Demo-AdvancedMessagesSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3974         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-RadioCheckboxMessageSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3975 
3976         
3977         waitAndClickByXpath("//div[contains(., 'Testing methodToCall action (no client validation check)')]/a");
3978         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3979         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages']"));
3980         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3981         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-AdvancedMessagesSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3982         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-RadioCheckboxMessageSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3983         Thread.sleep(3000);
3984     }
3985 
3986     
3987 
3988 
3989 
3990 
3991     protected void waitAndClickAdministration(Failable failable) throws InterruptedException {
3992         waitAndClickByLinkText(ADMINISTRATION_LINK_TEXT, failable);
3993     }
3994 
3995     protected void waitAndCancelConfirmation() throws InterruptedException {
3996         waitAndClickCancel();
3997         waitAndClickByName("methodToCall.processAnswer.button0");
3998     }
3999 
4000     protected void waitAndClick(By by) throws InterruptedException {
4001         jiraAwareWaitAndClick(by, "");
4002     }
4003 
4004     protected void waitAndClick(By by, Failable failable) throws InterruptedException {
4005         jiraAwareWaitAndClick(by, "", failable);
4006     }
4007 
4008     protected void waitAndClick(String locator, String message) throws InterruptedException {
4009         jiraAwareWaitAndClick(By.cssSelector(locator), message);
4010     }
4011 
4012     protected void waitAndClickById(String id) throws InterruptedException {
4013         jiraAwareWaitAndClick(By.id(id), "");
4014     }
4015     protected void waitAndClickById(String id, String message) throws InterruptedException {
4016         jiraAwareWaitAndClick(By.id(id), message);
4017     }
4018 
4019     protected void waitAndClickButtonByText(String buttonText) throws InterruptedException {
4020         waitAndClickByXpath("//button[contains(text(), '" + buttonText + "')]");
4021     }
4022 
4023     protected void waitAndClickByLinkText(String text) throws InterruptedException {
4024         jiraAwareWaitAndClick(By.linkText(text), "");
4025     }
4026 
4027     protected void waitAndClickByLinkText(String text, String message) throws InterruptedException {
4028         jiraAwareWaitAndClick(By.linkText(text), message);
4029     }
4030 
4031     protected void waitAndClickByLinkText(String text, Failable failable) throws InterruptedException {
4032         jiraAwareWaitAndClick(By.linkText(text), "", failable);
4033     }
4034 
4035     protected void waitAndClickByLinkText(String text, String message, Failable failable) throws InterruptedException {
4036         jiraAwareWaitAndClick(By.linkText(text), message, failable);
4037     }
4038 
4039     protected void waitAndClickByName(String name) throws InterruptedException {
4040         jiraAwareWaitAndClick(By.name(name), "");
4041     }
4042 
4043     protected void waitAndClickByXpath(String xpath) throws InterruptedException {
4044         waitAndClick(By.xpath(xpath));
4045     }
4046 
4047     protected void waitAndClickByXpath(String xpath, Failable failable) throws InterruptedException {
4048         waitAndClick(By.xpath(xpath), failable);
4049     }
4050 
4051     protected void waitAndClickByName(String name, String message) throws InterruptedException {
4052         jiraAwareWaitAndClick(By.name(name), message);
4053     }
4054 
4055     protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException {
4056         jiraAwareWaitAndClick(By.xpath(xpath), message);
4057     }
4058 
4059     
4060 
4061 
4062 
4063     protected void waitAndClickCancel() throws InterruptedException {
4064         waitAndClickByName(CANCEL_NAME);
4065     }
4066 
4067     
4068 
4069 
4070 
4071     protected void waitAndClickCloseWindow() throws InterruptedException {
4072         waitAndClickByXpath(CLOSE_WINDOW_XPATH_TITLE);
4073     }
4074 
4075     
4076 
4077 
4078 
4079     protected void waitAndClickCopy() throws InterruptedException {
4080         waitAndClickByLinkText(COPY_LINK_TEXT);
4081     }
4082 
4083     
4084 
4085 
4086 
4087     protected void waitAndClickDocSearch() throws InterruptedException {
4088         waitAndClickByXpath(DOC_SEARCH_XPATH);
4089     }
4090 
4091     
4092 
4093 
4094 
4095     protected void waitAndClickDocSearchTitle() throws InterruptedException {
4096         waitAndClickByXpath(DOC_SEARCH_XPATH_TITLE);
4097     }
4098 
4099     
4100 
4101 
4102 
4103     protected void waitAndClickLogout() throws InterruptedException {
4104         waitAndClickLogout(this);
4105     }
4106 
4107     
4108 
4109 
4110 
4111 
4112     protected void waitAndClickLogout(Failable failable) throws InterruptedException {
4113         selectTopFrame();
4114         waitAndClickByXpath(LOGOUT_XPATH, failable);
4115     }
4116 
4117     
4118 
4119 
4120 
4121 
4122     protected void waitAndClickMainMenu(Failable failable) throws InterruptedException {
4123         waitAndClickByLinkText(MAIN_MENU_LINK_TEXT, failable);
4124     }
4125 
4126     
4127 
4128 
4129 
4130     protected void waitAndClickSave() throws InterruptedException {
4131         waitAndClickByXpath(SAVE_XPATH);
4132     }
4133 
4134     
4135 
4136 
4137 
4138     private void waitAndClickSearch() throws InterruptedException {
4139         waitAndClickByXpath(SEARCH_XPATH);
4140     }
4141 
4142     
4143 
4144 
4145 
4146     protected void waitAndClickSubmit() throws InterruptedException {
4147         waitAndClickByXpath(SUBMIT_XPATH);
4148     }
4149 
4150 
4151     
4152 
4153 
4154 
4155 
4156     protected void waitAndClickXMLIngester(Failable failable) throws InterruptedException {
4157         waitAndClickByLinkText(XML_INGESTER_LINK_TEXT, failable);
4158     }
4159 
4160     protected void waitAndType(By by, String text) throws InterruptedException {
4161         waitAndType(by, text,  "");
4162     }
4163 
4164     protected void waitAndType(By by, String text, String message) throws InterruptedException {
4165         try {
4166             jiraAwareWaitFor(by, "");
4167             WebElement element = driver.findElement(by);
4168             WebDriverUtil.highlightElement(driver, driver.findElement(by));
4169             (driver.findElement(by)).sendKeys(text);
4170         } catch (Exception e) {
4171             JiraAwareFailureUtil.failOnMatchedJira(by.toString(), this);
4172             failableFail(e.getMessage() + " " + by.toString() + "  unable to type text '" + text + "'  " + message
4173                     + " current url " + driver.getCurrentUrl()
4174                     + "\n" + ITUtil.deLinespace(driver.getPageSource()));
4175         }
4176     }
4177 
4178     protected void waitAndType(String selector, String text) throws InterruptedException {
4179         waitAndType(By.cssSelector(selector), text);
4180     }
4181 
4182     protected void waitAndTypeById(String id, String text) throws InterruptedException {
4183         waitAndType(By.id(id), text);
4184     }
4185 
4186     protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException {
4187         waitAndType(By.xpath(locator), text);
4188     }
4189 
4190     protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException {
4191         waitAndType(By.xpath(locator), text, message);
4192     }
4193 
4194     protected void waitAndTypeByName(String name, String text) throws InterruptedException {
4195         waitAndType(By.name(name), text);
4196     }
4197 
4198     protected void waitAndCreateNew() throws InterruptedException {
4199         selectFrameIframePortlet();
4200         try {
4201             jGrowl("Create New");
4202             waitAndClickCreateNew(); 
4203         } catch (Exception e) {
4204             System.out.println("waitAndClickByXpath(\"//img[@alt='create new']\") failed trying title method with " + e.getMessage());
4205             waitAndClickByXpath("//a[@title='Create a new record']");
4206         }
4207     }
4208 
4209     
4210 
4211 
4212 
4213     protected void waitAndClickCreateNew() throws InterruptedException {
4214         waitAndClickByXpath(CREATE_NEW_XPATH);
4215     }
4216 
4217     protected void waitAndClickEdit() throws InterruptedException {
4218         waitAndClickByLinkText(EDIT_LINK_TEXT);
4219     }
4220 
4221     protected void waitAndClickReturnValue() throws InterruptedException {
4222         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT);
4223     }
4224 
4225     protected void waitAndClickSearch2() throws InterruptedException {
4226         waitAndClickByXpath(SEARCH_XPATH_2);
4227     }
4228 
4229     protected void waitAndClickSearch3() throws InterruptedException {
4230         waitAndClickByXpath(SEARCH_XPATH_3);
4231     }
4232 
4233     protected String waitForDocId() throws InterruptedException {
4234         checkForDocError();
4235         waitForElementPresentByXpath(DOC_ID_XPATH);
4236 
4237         return driver.findElement(By.xpath(DOC_ID_XPATH)).getText();
4238     }
4239 
4240     protected void waitForElementPresent(By by) throws InterruptedException {
4241         jiraAwareWaitFor(by, "");
4242     }
4243 
4244     protected void waitForElementPresent(String locator) throws InterruptedException {
4245         jiraAwareWaitFor(By.cssSelector(locator), "");
4246     }
4247 
4248     protected void waitForElementPresentByClassName(String name) throws InterruptedException {
4249         jiraAwareWaitFor(By.className(name), "");
4250     }
4251 
4252     protected void waitForElementPresentByClassName(String name, String message) throws InterruptedException {
4253         jiraAwareWaitFor(By.className(name), message);
4254     }
4255 
4256     protected void waitForElementsPresentByClassName(String name, String message) throws InterruptedException {
4257         jiraAwareWaitFors(By.className(name), message);
4258     }
4259 
4260     protected void waitForElementPresentById(String id) throws InterruptedException {
4261         jiraAwareWaitFor(By.id(id), "");
4262     }
4263 
4264     protected void waitForElementPresentById(String id, String message) throws InterruptedException {
4265         jiraAwareWaitFor(By.id(id), message);
4266     }
4267 
4268     protected void waitForElementsPresentById(String id, String message) throws InterruptedException {
4269         jiraAwareWaitFors(By.id(id), message);
4270     }
4271 
4272     protected void waitForElementPresentByName(String name) throws InterruptedException {
4273         jiraAwareWaitFor(By.name(name), "");
4274     }
4275 
4276     protected void waitForElementPresentByXpath(String locator) throws InterruptedException {
4277         jiraAwareWaitFor(By.xpath(locator), "");
4278     }
4279 
4280     protected void waitForElementsPresentByXpath(String xpathLocator) throws InterruptedException {
4281         jiraAwareWaitFors(By.xpath(xpathLocator), "");
4282     }
4283 
4284     protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
4285         waitForTitleToEqualKualiPortalIndex("");
4286     }
4287 
4288     protected void waitIsVisible(By by) throws InterruptedException {
4289         driver.manage().timeouts().implicitlyWait(waitSeconds, TimeUnit.SECONDS);
4290         isVisible(by);
4291         driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
4292 
4293 
4294 
4295 
4296 
4297 
4298 
4299 
4300 
4301 
4302     }
4303 
4304     protected void waitIsVisible(By by, String message) throws InterruptedException {
4305         for (int second = 0;; second++) {
4306             if (second >= waitSeconds) {
4307                 failableFail(TIMEOUT_MESSAGE + " " + by.toString() + " " + message);
4308             }
4309             if (isVisible(by)) {
4310                 break;
4311             }
4312             Thread.sleep(1000);
4313         }
4314     }
4315 
4316     protected boolean waitAreAnyVisible(By[] bys) throws InterruptedException {
4317         if (bys == null || bys.length == 0 ) {
4318             return false;
4319         }
4320 
4321         for (int second = 0; second < waitSeconds; second++) {
4322 
4323             if (isVisible(bys)) {
4324                 return true;
4325             }
4326 
4327             Thread.sleep(1000);
4328         }
4329 
4330         return false;
4331     }
4332 
4333     protected boolean isVisible(By[] bys) {
4334         if (bys == null || bys.length == 0 ) {
4335             return false;
4336         }
4337 
4338         for (int i = 0, s = bys.length; i < s; i++) {
4339 
4340             try {
4341 
4342                 if (isVisible(bys[i])) {
4343                     return true;
4344                 }
4345 
4346             } catch (NoSuchElementException nsee) {
4347                 
4348             }
4349 
4350         }
4351 
4352         return false;
4353     }
4354 
4355     
4356 
4357 
4358 
4359 
4360 
4361     protected void waitForElementVisible(String elementLocator, String message) throws InterruptedException {
4362         boolean failed = false;
4363 
4364         for (int second = 0;; second++) {
4365             if (second >= waitSeconds)
4366                 failed = true;
4367             try {
4368                 if (failed || (driver.findElements(By.cssSelector(elementLocator))).size() > 0)
4369                     break;
4370             } catch (Exception e) {}
4371             Thread.sleep(1000);
4372         }
4373 
4374         checkForIncidentReport(elementLocator); 
4375 
4376         if (failed)
4377             failableFail("timeout of " + waitSeconds + " seconds waiting for " + elementLocator + " " + message + " " + driver.getCurrentUrl());
4378     }
4379 
4380     protected void waitIsVisible(String locator) throws InterruptedException {
4381         waitIsVisible(By.cssSelector(locator));
4382     }
4383 
4384     protected void waitIsVisibleByXpath(String locator) throws InterruptedException {
4385         waitIsVisible(By.xpath(locator));
4386     }
4387 
4388     protected void waitIsVisibleByXpath(String locator, String message) throws InterruptedException {
4389         waitIsVisible(By.xpath(locator), message);
4390     }
4391 
4392     protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
4393         Thread.sleep(2000);
4394         
4395         
4396         
4397         
4398         
4399         
4400         
4401         
4402 
4403         
4404         
4405     }
4406 
4407     protected void waitAndClick(String locator) throws InterruptedException {
4408         waitAndClick(locator, "");
4409     }
4410 
4411     protected void waitForPageToLoad() {
4412         
4413     }
4414 
4415     protected void waitFor(By by) throws InterruptedException {
4416         jiraAwareWaitFor(by, "");
4417     }
4418 
4419     
4420 
4421 
4422 
4423 
4424 
4425 
4426 
4427 
4428     protected void waitFor(By by, String message) throws InterruptedException {
4429         WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
4430     }
4431 
4432     
4433 
4434 
4435 
4436     protected void waitAndClickKRAD() throws InterruptedException {
4437         waitAndClickByLinkText(KRAD_XPATH);
4438     }
4439 
4440     protected void waitNotVisible(By by) throws InterruptedException {
4441         for (int second = 0;; second++) {
4442             if (second >= waitSeconds) {
4443                 failableFail(TIMEOUT_MESSAGE);
4444             }
4445             if (!isVisible(by)) {
4446                 break;
4447             }
4448             Thread.sleep(1000);
4449         }
4450     }
4451 
4452     protected void waitNotVisibleByXpath(String locator) throws InterruptedException {
4453         waitNotVisible(By.xpath(locator));
4454     }
4455 
4456     
4457 
4458 
4459 
4460 
4461     protected boolean isKrad(){
4462         return (ITUtil.REMOTE_UIF_KRAD.equalsIgnoreCase(getUiFramework()));
4463     }
4464 
4465     protected WebElement getElementByDataAttributeValue(String dataAttributeName, String value){
4466         return driver.findElement(By.cssSelector("[data-" + dataAttributeName + "='" + value +"']"));
4467     }
4468 
4469     protected WebElement getElementByDataAttribute(String dataAttributeName){
4470         return driver.findElement(By.cssSelector("[data-" + dataAttributeName + "]"));
4471     }
4472 
4473     protected WebElement getElementByAttributeValue(String attributeName, String value){
4474         return driver.findElement(By.cssSelector("[" + attributeName + "='" + value +"']"));
4475     }
4476 
4477     protected WebElement getElementByAttribute(String attributeName){
4478         return driver.findElement(By.cssSelector("[" + attributeName + "]"));
4479     }
4480 
4481     
4482 
4483 
4484 
4485 
4486 
4487 
4488 
4489 
4490     protected String getForLabelText(String forElementId) {
4491         return driver.findElement(By.cssSelector("label[for=" + forElementId + "]")).getText();
4492     }
4493 
4494     
4495 
4496 
4497 
4498 
4499     public String getUiFramework() {
4500         return uiFramework;
4501     }
4502 
4503     
4504 
4505 
4506     public void setUiFramework(String uiFramework) {
4507         this.uiFramework = uiFramework;
4508     }
4509 }