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 List<WebElement> findVisibleElements(By by) {
1159         List<WebElement> webElements = driver.findElements(by);
1160         List<WebElement> visibleWebElements = new LinkedList<WebElement>();
1161         for (WebElement webElement: webElements) {
1162             if (webElement.isDisplayed()) {
1163                 visibleWebElements.add(webElement);
1164             }
1165         }
1166 
1167         return visibleWebElements;
1168     }
1169 
1170     protected void fireEvent(String name, String event) {
1171         ((JavascriptExecutor) driver).executeScript("var elements=document.getElementsByName(\"" + name + "\");" +
1172                 "for (var i = 0; i < elements.length; i++){" +
1173                 "elements[i]." + event + "();}");
1174     }
1175 
1176     protected void fireEvent(String name, String value, String event) {
1177         ((JavascriptExecutor) driver).executeScript("var elements=document.getElementsByName(\"" + name + "\");" +
1178                 "for (var i = 0; i < elements.length; i++){" +
1179                 "if(elements[i].value=='" + value + "')" +
1180                 "elements[i]." + event + "();}");
1181     }
1182 
1183     
1184 
1185 
1186 
1187     public void fireMouseOverEventByName(String name) {
1188         this.fireMouseOverEvent(By.name(name));
1189     }
1190 
1191     
1192 
1193 
1194 
1195     public void fireMouseOverEventByXpath(String locator) {
1196         this.fireMouseOverEvent(By.xpath(locator));
1197     }
1198 
1199     
1200 
1201 
1202 
1203     public void fireMouseOverEvent(By by) {
1204         Actions builder = new Actions(driver);
1205         Actions hover = builder.moveToElement(driver.findElement(by));
1206         hover.perform();
1207     }
1208 
1209     protected boolean isChecked(By by) {
1210         return driver.findElement(by).isSelected();
1211     }
1212 
1213     protected boolean isCheckedById(String id) {
1214         return isChecked(By.id(id));
1215     }
1216 
1217     protected boolean isCheckedByName(String name) {
1218         return isChecked(By.name(name));
1219     }
1220 
1221     protected boolean isCheckedByXpath(String locator) {
1222         return isChecked(By.xpath(locator));
1223     }
1224 
1225     protected boolean isEnabled(By by) {
1226         return driver.findElement(by).isEnabled();
1227     }
1228 
1229     protected boolean isEnabledById(String id) {
1230         return isEnabled(By.id(id));
1231     }
1232 
1233     protected boolean isEnabledByName(String name) {
1234         return isEnabled(By.name(name));
1235     }
1236 
1237     protected boolean isEnabledByXpath(String locator) {
1238         return isEnabled(By.xpath(locator));
1239     }
1240 
1241     protected int howManyAreVisible(By by) throws InterruptedException {
1242         int count = 0;
1243         if (by == null) {
1244 
1245             return count;
1246         }
1247 
1248         List<WebElement> webElementsFound = driver.findElements(by);
1249         for (WebElement webElement: webElementsFound) {
1250             if (webElement.isDisplayed()) {
1251                 count++;
1252             }
1253         }
1254 
1255         return count;
1256     }
1257 
1258     
1259 
1260 
1261 
1262 
1263     protected boolean isElementPresent(By by) {
1264         return (driver.findElements(by)).size() > 0;
1265     }
1266 
1267     
1268 
1269 
1270 
1271 
1272     protected boolean isElementPresent(String locator) {
1273         return (driver.findElements(By.cssSelector(locator))).size() > 0;
1274     }
1275 
1276     protected boolean isElementPresentById(String id) {
1277         return isElementPresent(By.id(id));
1278     }
1279 
1280     protected boolean isElementPresentByName(String name) {
1281         return isElementPresent(By.name(name));
1282     }
1283 
1284     protected boolean isElementPresentByXpath(String locator) {
1285         return isElementPresent(By.xpath(locator));
1286     }
1287 
1288     protected boolean isElementPresentByLinkText(String locator) {
1289         return isElementPresent(By.linkText(locator));
1290     }
1291 
1292     protected boolean isElementPresentByDataAttributeValue(String dataAttributeName, String dataAttributeValue) {
1293         return isElementPresent(By.cssSelector("[data-" + dataAttributeName +"='"+ dataAttributeValue +"']"));
1294     }
1295 
1296     protected Boolean isTextPresent(String text) {
1297         if (driver.getPageSource().contains(text)) {
1298             return Boolean.TRUE;
1299         }
1300 
1301         return Boolean.FALSE;
1302     }
1303 
1304     protected boolean isVisible(String locator) {
1305         return isVisible(By.cssSelector(locator));
1306     }
1307 
1308     protected boolean isVisible(By by) {
1309         List<WebElement> elements = driver.findElements(by);
1310         for (WebElement element: elements) {
1311             if (element.isDisplayed()) {
1312                 return true;
1313             }
1314         }
1315         return false;
1316     }
1317 
1318     protected boolean isVisibleById(String id) {
1319         return isVisible(By.id(id));
1320     }
1321 
1322     protected boolean isVisibleByXpath(String locator) {
1323         return isVisible(By.xpath(locator));
1324     }
1325 
1326     protected void jGrowl(String message) {
1327         WebDriverUtil.jGrowl(driver, jGrowlHeader, false, message);
1328     }
1329 
1330     
1331 
1332 
1333 
1334     protected void jGrowlSticky(String message) {
1335         WebDriverUtil.jGrowl(driver, jGrowlHeader, true, message);
1336     }
1337 
1338     private void jiraAwareFail(By by, String message, Throwable t) {
1339         JiraAwareFailureUtil.failOnMatchedJira(by.toString(), message, this);
1340         
1341         checkForIncidentReport(by.toString(), message);
1342         failableFail(t.getMessage() + " " + by.toString() + " " + message + " " + driver.getCurrentUrl());
1343     }
1344 
1345     private void jiraAwareFail(String message) {
1346         JiraAwareFailureUtil.failOnMatchedJira(message, message, this);
1347         
1348         checkForIncidentReport(message, message);
1349         failableFail(message + " " + driver.getCurrentUrl());
1350     }
1351 
1352     protected void jiraAwareWaitAndClick(By by, String message) throws InterruptedException {
1353         jiraAwareWaitAndClick(by, message, this);
1354     }
1355 
1356     protected void jiraAwareWaitAndClick(By by, String message, Failable failable) throws InterruptedException {
1357         try {
1358             jiraAwareWaitFor(by, message, failable);
1359             WebElement element = driver.findElement(by);
1360             WebDriverUtil.highlightElement(driver, element);
1361             element.click();
1362         } catch (Exception e) {
1363             jiraAwareFail(by, message, e);
1364         }
1365     }
1366 
1367     protected void jiraAwareWaitFor(By by, String message) throws InterruptedException {
1368         try {
1369             WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
1370         } catch (Throwable t) {
1371             jiraAwareFail(by, message, t);
1372         }
1373     }
1374 
1375     protected void jiraAwareWaitFors(By by, String message) throws InterruptedException {
1376         try {
1377             WebDriverUtil.waitFors(this.driver, this.waitSeconds, by, message);
1378         } catch (Throwable t) {
1379             jiraAwareFail(by, message, t);
1380         }
1381     }
1382 
1383     protected void jiraAwareWaitFor(By by, String message, Failable failable) throws InterruptedException {
1384         try {
1385             WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
1386         } catch (Throwable t) {
1387             jiraAwareFail(by, message, t);
1388         }
1389     }
1390 
1391     protected void open(String url) {
1392         driver.get(url);
1393     }
1394 
1395     protected void selectFrameIframePortlet() {
1396         selectFrame(IFRAMEPORTLET_NAME);
1397     }
1398 
1399     protected void selectFrame(String locator) {
1400         
1401         if (IFRAMEPORTLET_NAME.equals(locator)) {
1402             gotoNestedFrame();
1403         } else {
1404            WebDriverUtil.selectFrameSafe(driver, locator);
1405         }
1406     }
1407 
1408     protected void selectTopFrame() {
1409         driver.switchTo().defaultContent();
1410     }
1411 
1412     protected void selectWindow(String locator) {
1413         driver.switchTo().window(locator);
1414     }
1415 
1416     protected void selectByXpath(String locator, String selectText) throws InterruptedException {
1417         select(By.xpath(locator), selectText);
1418     }
1419 
1420     protected void selectByName(String name, String selectText) throws InterruptedException {
1421         select(By.name(name), selectText);
1422     }
1423 
1424     
1425 
1426 
1427 
1428 
1429 
1430     protected void select(By by, String selectText) throws InterruptedException {
1431         WebElement select1 = driver.findElement(by);
1432         List<WebElement> options = select1.findElements(By.tagName("option"));
1433 
1434         for (WebElement option : options) {
1435             if (option.getText().equals(selectText)) {
1436                 option.click();
1437                 break;
1438             }
1439         }
1440     }
1441 
1442     protected void selectOptionByName(String name, String optionValue) throws InterruptedException {
1443         selectOption(By.name(name), optionValue);
1444     }
1445 
1446     protected void selectOptionByXpath(String locator, String optionValue) throws InterruptedException {
1447         selectOption(By.name(locator), optionValue);
1448     }
1449 
1450     
1451 
1452 
1453 
1454 
1455 
1456     protected void selectOption(By by, String optionValue) throws InterruptedException {
1457         WebElement select1 = driver.findElement(by);
1458         List<WebElement> options = select1.findElements(By.tagName("option"));
1459 
1460         if (options == null || options.size() == 0) {
1461             failableFail("No options for select " + select1.toString() + " was looking for value " + optionValue + " using " + by.toString());
1462         }
1463 
1464         for (WebElement option : options) {
1465             if (option.getAttribute("value").equals(optionValue)) {
1466                 option.click();
1467                 break;
1468             }
1469         }
1470     }
1471 
1472     
1473 
1474 
1475 
1476     public void switchToWindow(String title) {
1477         Set<String> windows = driver.getWindowHandles();
1478 
1479         for (String window : windows) {
1480             driver.switchTo().window(window);            
1481             if (driver.getTitle().contains(title)) {
1482                 return;
1483             }
1484         }
1485     }
1486 
1487     
1488     protected void testAddingNamespace() throws Exception {
1489         testAddingNamespace(this);
1490     }
1491 
1492     
1493     protected void testAddingNamespace(Failable failable) throws Exception {
1494         selectFrameIframePortlet();
1495         waitAndCreateNew();
1496         waitForPageToLoad();
1497         assertElementPresentByXpath(SAVE_XPATH_2, "save button does not exist on the page");
1498 
1499         
1500         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding PEANUTS");
1501         waitAndTypeByXpath("//*[@id='document.documentHeader.explanation']", "I want to add PEANUTS to test KIM");
1502         waitAndTypeByXpath(DOC_CODE_XPATH, "PEANUTS");
1503         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "The Peanuts Gang");
1504         checkByXpath("//input[@id='document.newMaintainableObject.active']");
1505         waitAndClickByXpath(SAVE_XPATH_2);
1506         waitForPageToLoad();
1507         checkForIncidentReport();
1508         assertDocumentStatusSaved();
1509 
1510         
1511         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, driver.findElement(By.xpath(
1512                 "//table[@class='headerinfo']/tbody/tr[1]/td[2]")).getText());
1513         SeleneseTestBase.assertEquals("admin", driver.findElement(By.xpath(
1514                 "//table[@class='headerinfo']/tbody/tr[2]/td[1]/a")).getText());
1515     }
1516 
1517     protected void assertDocumentStatusSaved() {
1518         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH,
1519                 "Document is not saved successfully");
1520     }
1521 
1522     protected void testAddingBrownGroup() throws Exception {
1523         selectFrameIframePortlet();
1524         waitAndCreateNew();
1525         waitForPageToLoad();
1526         String docId = waitForDocId();
1527 
1528         
1529         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Brown Group");
1530         waitAndTypeByName("document.documentHeader.explanation", "I want to add Brown Group to test KIM");
1531         selectOptionByName("document.groupNamespace", "KR-IDM");
1532         waitForPageToLoad();
1533         String groupName = "BrownGroup " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1534         waitAndTypeByName("document.groupName", groupName);
1535         checkByName("document.active");
1536         waitAndClickByXpath(SAVE_XPATH_2);
1537         waitForPageToLoad();
1538         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH,"Document is not saved successfully");
1539         checkForIncidentReport();
1540 
1541         
1542         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, driver.findElement(By.xpath("//table[@class='headerinfo']/tbody/tr[1]/td[2]")).getText());
1543         SeleneseTestBase.assertEquals("admin", driver.findElement(By.xpath("//table[@class='headerinfo']/tbody/tr[2]/td[1]/a")).getText());
1544         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
1545         waitForPageToLoad();
1546         waitAndClickSearch();
1547         waitForPageToLoad();
1548         waitAndClickReturnValue();
1549         waitForPageToLoad();
1550         waitAndClickByName("methodToCall.addMember.anchorAssignees");
1551         waitForPageToLoad();
1552         waitAndClickSave();
1553         waitAndClickSubmit();
1554         waitForPageToLoad();
1555         Thread.sleep(2000);
1556         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1557         selectTopFrame();
1558         waitAndClickByLinkText("Administration");
1559         waitForPageToLoad();
1560         waitAndClickByLinkText("Group");
1561         waitForPageToLoad();
1562         selectFrameIframePortlet();
1563         waitAndTypeByName("name", groupName);
1564         waitAndClickSearch();
1565         isElementPresentByLinkText(groupName);
1566     }
1567 
1568     protected void testAttributeDefinitionLookUp() throws Exception {
1569         waitForPageToLoad();
1570         selectFrameIframePortlet();
1571         checkForIncidentReport("testAttributeDefinitionLookUp");
1572         waitAndClickByXpath("//button[contains(.,'earch')]");
1573         Thread.sleep(3000);
1574         waitForPageToLoad();
1575         driver.findElement(By.tagName("body")).getText().contains("Actions"); 
1576         waitAndClickByLinkText("1000");
1577         waitForPageToLoad();
1578         driver.findElement(By.tagName("body")).getText().contains("Attribute Inquiry");
1579         driver.findElement(By.tagName("body")).getText().contains("KRMS Attributes");
1580         driver.findElement(By.tagName("body")).getText().contains("Attribute Label");
1581         driver.findElement(By.tagName("body")).getText().contains("1000");
1582         driver.findElement(By.tagName("body")).getText().contains("peopleFlowId");
1583         driver.findElement(By.tagName("body")).getText().contains("KR-RULE");
1584         driver.findElement(By.tagName("body")).getText().contains("PeopleFlow");
1585 
1586         
1587         
1588         
1589         
1590         
1591         
1592         
1593         
1594         
1595         
1596         
1597         
1598         passed();
1599     }
1600 
1601     protected void testCancelConfirmation() throws InterruptedException {
1602         waitAndCancelConfirmation();
1603         passed();
1604     }
1605 
1606     protected void testConfigParamaterBlanketApprove() throws Exception {
1607         selectFrameIframePortlet();
1608         waitAndCreateNew();
1609         String docId = waitForDocId();
1610         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Parameter ");
1611         assertBlanketApproveButtonsPresent();
1612         SeleneseTestBase.assertEquals("", getTextByName(CANCEL_NAME));
1613         selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']", "KR-NS - Kuali Nervous System");
1614         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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1615                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1616         waitAndClickByXpath(componentLookUp);
1617         waitAndClickSearch();
1618         waitAndClickReturnValue();
1619         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomChars();
1620         String parameterName = "ValidationTestParameter" + dtsTwo;
1621         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", parameterName);
1622         waitAndTypeByXpath("//textarea[@id='document.newMaintainableObject.description']",
1623                 "Validation Test Parameter Description" + dtsTwo);
1624         selectByXpath("//select[@id='document.newMaintainableObject.parameterTypeCode']", "Document Validation");
1625         waitAndClickByXpath("//input[@id='document.newMaintainableObject.evaluationOperatorCodeAllowed']");
1626         waitForPageToLoad();
1627         blanketApproveTest();
1628         assertDocFinal(docId);
1629     }
1630 
1631     protected void testCreateNewAgenda() throws Exception {
1632         selectFrameIframePortlet();
1633         selectByName("document.newMaintainableObject.dataObject.namespace", "Kuali Rules Test");
1634         String agendaName = "Agenda Date :" + Calendar.getInstance().getTime().toString();
1635         waitAndTypeByName("document.newMaintainableObject.dataObject.agenda.name", "Agenda " + agendaName);
1636         waitAndTypeByName("document.newMaintainableObject.dataObject.contextName", "Context1");
1637         fireEvent("document.newMaintainableObject.dataObject.contextName", "blur");
1638         fireEvent("document.newMaintainableObject.dataObject.contextName", "focus");
1639         waitForElementPresentByName("document.newMaintainableObject.dataObject.agenda.typeId");
1640         selectByName("document.newMaintainableObject.dataObject.agenda.typeId", "Campus Agenda");
1641         waitForElementPresentByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]");
1642         waitAndTypeByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]", "BL");
1643         waitAndClickByXpath("//div[2]/button");
1644         waitForPageToLoad();
1645         waitAndClickByXpath("//div[2]/button[3]");
1646         waitForPageToLoad();
1647         selectTopFrame();
1648         waitAndClickByXpath("(//input[@name='imageField'])[2]");
1649         passed();
1650     }
1651 
1652     protected void testCreateDocType() throws Exception {
1653         selectFrameIframePortlet();
1654         waitAndCreateNew();
1655         assertElementPresentByXpath("//*[@name='methodToCall.route' and @alt='submit']","save button does not exist on the page");
1656         
1657         
1658         
1659         String docId = waitForDocId();
1660         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Creating new Document Type");
1661         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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1662                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1663         waitAndClickByXpath(parentDocType);
1664         waitForPageToLoad();
1665         Thread.sleep(2000);
1666         waitAndClickSearch();
1667         waitForPageToLoad();
1668         waitAndClickReturnValue();
1669         String docTypeName = "TestDocType" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1670         waitForElementPresentByXpath("//input[@id='document.newMaintainableObject.name']");
1671         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
1672         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']","${kr.url}/maintenance.do?methodToCall=docHandler");
1673         
1674         
1675         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']", "Label for " + docTypeName);
1676         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']","default.htm?turl=WordDocuments%2Fdocumenttype.htm");
1677         waitAndClickByXpath("//*[@name='methodToCall.route' and @alt='submit']");
1678         checkForIncidentReport();
1679         waitForPageToLoad();
1680         driver.switchTo().defaultContent();
1681         waitAndClickDocSearchTitle();
1682         waitForPageToLoad();
1683         selectFrameIframePortlet();
1684         waitAndClickSearch();
1685         Thread.sleep(2000);
1686         SeleneseTestBase.assertEquals(docId, driver.findElement(By.xpath(DOC_ID_XPATH_2)).getText());
1687     }
1688 
1689     protected void testCreateNewCancel() throws Exception {
1690         selectFrameIframePortlet();
1691         waitAndCreateNew();
1692         testCancelConfirmation();
1693     }
1694 
1695     protected List<String> testCreateNewParameter(String docId, String parameterName) throws Exception {
1696         waitForPageToLoad();
1697         docId = waitForDocId();
1698         
1699         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Parameter");
1700         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-WKFLW");
1701         waitAndTypeByName("document.newMaintainableObject.componentCode", "ActionList");
1702         waitAndTypeByName("document.newMaintainableObject.applicationId", "KUALI");
1703         parameterName = "TestIndicator" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1704         waitAndTypeByName("document.newMaintainableObject.name", parameterName);
1705         waitAndTypeByName("document.newMaintainableObject.value", "Y");
1706         waitAndTypeByName("document.newMaintainableObject.description", "for testing");
1707         selectOptionByName("document.newMaintainableObject.parameterTypeCode", "HELP");
1708         waitAndClickByXpath("//input[@name='document.newMaintainableObject.evaluationOperatorCode' and @value='A']");
1709         waitAndClickSave();
1710         waitAndClickSubmit();
1711         waitForPageToLoad();
1712         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1713         selectTopFrame();
1714         waitAndClickDocSearchTitle();
1715         waitForPageToLoad();
1716         selectFrameIframePortlet();
1717         waitAndClickSearch();
1718         Thread.sleep(2000);
1719         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1720         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1721         selectTopFrame();
1722         List<String> params = new ArrayList<String>();
1723         params.add(docId);
1724         params.add(parameterName);
1725 
1726         return params;
1727     }
1728 
1729     protected List<String> testCreateNewParameterType(String docId, String parameterType, String parameterCode)throws Exception {
1730         waitForPageToLoad();
1731         docId = waitForDocId();
1732 
1733         
1734         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Parameter Type");
1735         parameterCode = RandomStringUtils.randomAlphabetic(4).toLowerCase();
1736         waitAndTypeByName("document.newMaintainableObject.code", parameterCode);
1737         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1738         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1739         waitAndClickSave();
1740         waitAndClickSubmit();
1741         waitForPageToLoad();
1742         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1743         selectTopFrame();
1744         waitAndClickDocSearchTitle();
1745         waitForPageToLoad();
1746         selectFrameIframePortlet();
1747         waitAndClickSearch();
1748         Thread.sleep(2000);
1749         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1750         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1751         selectTopFrame();
1752         List<String> params = new ArrayList<String>();
1753         params.add(docId);
1754         params.add(parameterType);
1755         params.add(parameterCode);
1756 
1757         return params;
1758     }
1759 
1760     protected void testCreateNewSearchReturnValueCancelConfirmation() throws InterruptedException, Exception {
1761         selectFrameIframePortlet();
1762         waitAndCreateNew();
1763         waitAndClickSearch2();
1764         waitAndClickReturnValue();
1765         waitAndCancelConfirmation();
1766         passed();
1767     }
1768 
1769     protected List<String> testCopyParameter(String docId, String parameterName) throws Exception {
1770         selectFrameIframePortlet();
1771         waitAndClickCopy();
1772         waitForPageToLoad();
1773         docId = waitForDocId();
1774         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Parameter");
1775         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-WKFLW");
1776         waitAndTypeByName("document.newMaintainableObject.componentCode", "ActionList");
1777         waitAndTypeByName("document.newMaintainableObject.applicationId", "KUALI");
1778         parameterName = "TestIndicator" + ITUtil.createUniqueDtsPlusTwoRandomChars();
1779         waitAndTypeByName("document.newMaintainableObject.name", parameterName);
1780         waitAndClickSave();
1781         waitAndClickSubmit();
1782         waitForPageToLoad();
1783         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
1784         selectTopFrame();
1785         waitAndClickDocSearchTitle();
1786         waitForPageToLoad();
1787         selectFrameIframePortlet();
1788         waitAndClickSearch();
1789         Thread.sleep(2000);
1790         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1791         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1792         selectTopFrame();
1793         List<String> params = new ArrayList<String>();
1794         params.add(docId);
1795         params.add(parameterName);
1796 
1797         return params;
1798     }
1799 
1800     protected List<String> testCopyParameterType(String docId, String parameterType, String parameterCode) throws Exception {
1801         selectFrameIframePortlet();
1802         waitAndClickCopy();
1803         waitForPageToLoad();
1804         docId = waitForDocId();
1805         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Parameter");
1806         parameterCode = RandomStringUtils.randomAlphabetic(4).toLowerCase();
1807         waitAndTypeByName("document.newMaintainableObject.code", parameterCode);
1808         clearTextByName("document.newMaintainableObject.name");
1809         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1810         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1811         waitAndClickSave();
1812         waitAndClickSubmit();
1813         waitForPageToLoad();
1814         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1815         selectTopFrame();
1816         waitAndClickDocSearchTitle();
1817         waitForPageToLoad();
1818         selectFrameIframePortlet();
1819         waitAndClickSearch();
1820         Thread.sleep(2000);
1821         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1822         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1823         selectTopFrame();
1824         List<String> params = new ArrayList<String>();
1825         params.add(docId);
1826         params.add(parameterType);
1827         params.add(parameterCode);
1828 
1829         return params;
1830     }
1831 
1832 
1833     protected void testDocTypeLookup() throws Exception {
1834         selectFrameIframePortlet();
1835         waitAndClickByXpath("//input[@title='Search Parent Name']");
1836         waitForPageToLoad();
1837         waitAndClickByXpath(SAVE_XPATH_3);
1838         waitAndClickByXpath("//table[@id='row']/tbody/tr[contains(td[3],'RiceDocument')]/td[1]/a");
1839         waitForPageToLoad();
1840         waitAndClickByXpath(SAVE_XPATH_3);
1841         SeleneseTestBase.assertEquals("RiceDocument", getTextByXpath("//table[@id='row']/tbody/tr/td[4]/a"));
1842         waitAndClickByName("methodToCall.clearValues");
1843         waitAndTypeByName("name", "Kuali*D");
1844         waitAndClickByXpath(SAVE_XPATH_3);
1845         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[3], 'KualiDocument')]");
1846         String docIdOld = getTextByXpath("//table[@id='row']/tbody/tr[contains(td[3], 'KualiDocument')]/td[2]/a");
1847         waitAndClickByName("methodToCall.clearValues");
1848         waitAndTypeByName("label", "KualiDocument");
1849         waitAndClickByXpath(SAVE_XPATH_3);
1850         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[5], 'KualiDocument')]");
1851         waitAndClickByName("methodToCall.clearValues");
1852         waitAndTypeByName("documentTypeId", docIdOld);
1853         waitAndClickByXpath(SAVE_XPATH_3);
1854         assertElementPresentByXpath("//table[@id='row']/tbody/tr[contains(td[2], '" + docIdOld + "')]");
1855     }
1856 
1857 
1858     protected List<String> testEditParameterType(String docId, String parameterType, String parameterCode) throws Exception {
1859         selectFrameIframePortlet();
1860         waitAndClickEdit();
1861         waitForPageToLoad();
1862         docId = waitForDocId();
1863         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Parameter");
1864         clearTextByName("document.newMaintainableObject.name");
1865         parameterType = "testing " + ITUtil.createUniqueDtsPlusTwoRandomChars();
1866         waitAndTypeByName("document.newMaintainableObject.name", parameterType);
1867         waitAndClickSave();
1868         waitAndClickSubmit();
1869         waitForPageToLoad();
1870         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1871         selectTopFrame();
1872         waitAndClickDocSearchTitle();
1873         waitForPageToLoad();
1874         selectFrameIframePortlet();
1875         waitAndClickSearch();
1876         Thread.sleep(2000);
1877         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1878         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1879         selectTopFrame();
1880         List<String> params = new ArrayList<String>();
1881         params.add(docId);
1882         params.add(parameterType);
1883         params.add(parameterCode);
1884 
1885         return params;
1886     }
1887 
1888     protected List<String> testEditParameter(String docId, String parameterName) throws Exception
1889     {
1890         selectFrameIframePortlet();
1891         waitAndClickEdit();
1892         waitForPageToLoad();
1893         docId = waitForDocId();
1894         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Parameter");
1895         clearTextByName("document.newMaintainableObject.value");
1896         waitAndTypeByName("document.newMaintainableObject.value", "N");
1897         waitAndClickSave();
1898         waitAndClickSubmit();
1899         waitForPageToLoad();
1900         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
1901         selectTopFrame();
1902         waitAndClickDocSearchTitle();
1903         waitForPageToLoad();
1904         selectFrameIframePortlet();
1905         waitAndClickSearch();
1906         Thread.sleep(2000);
1907         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
1908         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
1909         selectTopFrame();
1910         List<String> params = new ArrayList<String>();
1911         params.add(docId);
1912         params.add(parameterName);
1913         return params;
1914     }
1915 
1916     protected void testEditRouteRulesDelegation() throws Exception {
1917         waitForPageToLoad();
1918         Thread.sleep(3000);
1919         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
1920         selectFrameIframePortlet();
1921         waitAndClickSearch();
1922         waitForPageToLoad();
1923         Thread.sleep(3000);
1924         waitAndClickEdit();
1925         waitForPageToLoad();
1926         Thread.sleep(3000);
1927         SeleneseTestBase.assertTrue(isElementPresentByName(CANCEL_NAME));
1928         waitAndClickCancel();
1929         waitForPageToLoad();
1930         Thread.sleep(3000);
1931         waitAndClickByName("methodToCall.processAnswer.button0");
1932         waitForPageToLoad();
1933         passed();
1934     }
1935 
1936     protected void testFiscalOfficerInfoMaintenanceNew() throws Exception {
1937         selectFrameIframePortlet();
1938         checkForIncidentReport("", "https://jira.kuali.org/browse/KULRICE-7723 FiscalOfficerInfoMaintenanceNewIT.testUntitled need a better name and user permission error");
1939         String docId = getTextByXpath("//*[@id='u13_control']");
1940         waitAndTypeByXpath("//input[@name='document.documentHeader.documentDescription']", "New FO Doc");
1941         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.dataObject.id']", "5");
1942         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.dataObject.userName']", "Jigar");
1943         waitAndClickByXpath("//button[@id='usave']");
1944         Integer docIdInt = Integer.valueOf(docId).intValue();
1945         selectTopFrame();
1946         waitAndClickByXpath("//img[@alt='action list']");
1947         selectFrameIframePortlet();
1948 
1949         if(isElementPresentByLinkText("Last")){
1950             waitAndClickByLinkText("Last");
1951             waitAndClickByLinkText(docIdInt.toString());
1952         } else {
1953             waitAndClickByLinkText(docIdInt.toString());
1954         }
1955 
1956         
1957         
1958         
1959         
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     protected void testIdentityGroupBlanketApprove() throws Exception {
1992         selectFrameIframePortlet();
1993         waitAndCreateNew();                
1994         String docId = waitForDocId();
1995         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
1996         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Group " + dtsTwo);
1997         assertBlanketApproveButtonsPresent();
1998         selectByXpath("//select[@id='document.groupNamespace']", AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
1999         waitAndTypeByXpath("//input[@id='document.groupName']", "Validation Test Group1 " + dtsTwo);
2000         waitAndClickByName(
2001                 "methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
2002         waitAndClickSearch();
2003         waitAndClickReturnValue();
2004         waitAndClickByName("methodToCall.addMember.anchorAssignees");
2005         waitForPageToLoad();
2006         blanketApproveTest();
2007         assertDocFinal(docId);
2008     }
2009 
2010     protected void testIdentityPermissionBlanketApprove() throws Exception {
2011         selectFrameIframePortlet();
2012         waitAndCreateNew();        
2013         String docId = waitForDocId();
2014         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2015         waitAndTypeByXpath("//input[@name='document.documentHeader.documentDescription']",
2016                 "Validation Test Permission " + dtsTwo);
2017         assertBlanketApproveButtonsPresent();
2018         waitAndTypeByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']", "10012");
2019         selectByXpath("//select[@name='document.newMaintainableObject.namespaceCode']",
2020                 AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2021         selectByXpath("//select[@name='document.newMaintainableObject.templateId']",
2022                 AdminTmplMthdSTNavBase.LABEL_KUALI_DEFAULT);
2023         waitAndTypeByXpath("//input[@name='document.newMaintainableObject.name']",
2024                 "ValidationTestPermission" + dtsTwo);
2025         blanketApproveTest();
2026         assertDocFinal(docId);
2027     }
2028 
2029     protected void testIdentityPersonBlanketApprove() throws Exception {
2030         selectFrameIframePortlet();
2031         waitAndCreateNew();        
2032         String docId = waitForDocId();
2033         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Person");
2034         assertBlanketApproveButtonsPresent();
2035         waitAndTypeByXpath("//input[@id='document.principalName']", "principal" + RandomStringUtils.randomAlphabetic(3).toLowerCase());
2036         selectByName("newAffln.affiliationTypeCode", "Affiliate");
2037         selectByName("newAffln.campusCode", "BX - BLGTN OFF CAMPUS");
2038         selectByName("newAffln.campusCode", "BL - BLOOMINGTON");
2039         assertElementPresentByName("newAffln.dflt");
2040         waitAndClickByName("newAffln.dflt");
2041         waitAndClickByName("methodToCall.addAffln.anchor");
2042         waitAndClickByName("methodToCall.toggleTab.tabContact");
2043         selectByName("newName.namePrefix", "Mr");
2044         waitAndTypeByName("newName.firstName", "First");
2045         waitAndTypeByName("newName.lastName", "Last");
2046         selectByName("newName.nameSuffix", "Mr");
2047         waitAndClickByName("newName.dflt");
2048         waitAndClickByName("methodToCall.addName.anchor");
2049         waitForPageToLoad();
2050         blanketApproveTest();
2051         assertDocFinal(docId);
2052     }
2053 
2054     protected void testIdentityResponsibilityBlanketApprove() throws Exception {
2055         selectFrameIframePortlet();
2056         waitAndCreateNew();        
2057         String docId = waitForDocId();
2058         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2059         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Responsibility " + dtsTwo);
2060         assertBlanketApproveButtonsPresent();
2061         selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']",
2062                 AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2063         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']",
2064                 "Validation Test Responsibility " + dtsTwo);
2065         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.documentTypeName']", "Test " + dtsTwo);
2066         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.routeNodeName']", "Test " + dtsTwo);
2067         waitAndClickByXpath("//input[@id='document.newMaintainableObject.actionDetailsAtRoleMemberLevel']");
2068         waitAndClickByXpath("//input[@id='document.newMaintainableObject.required']");
2069         blanketApproveTest();
2070         assertDocFinal(docId);
2071     }
2072 
2073     protected void testIdentityRoleBlanketApprove() throws Exception {
2074         selectFrameIframePortlet();
2075         waitAndCreateNew();
2076         waitAndClickByXpath(SEARCH_XPATH, "No search button to click.");
2077         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT, "No return value link");        
2078         String docId = waitForDocId();
2079         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2080         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Role " + dtsTwo);
2081         assertBlanketApproveButtonsPresent();
2082         selectByXpath("//select[@id='document.roleNamespace']", AdminTmplMthdSTNavBase.LABEL_KUALI_KUALI_SYSTEMS);
2083         waitAndTypeByXpath("//input[@id='document.roleName']", "Validation Test Role " + dtsTwo,
2084                 "No Role Name input to type in.");
2085         waitAndClickByName(
2086                 "methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
2087         waitAndClickByXpath(SEARCH_XPATH, "No search button to click.");
2088         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT, "No return value link");
2089         waitAndClickByName("methodToCall.addMember.anchorAssignees");
2090         waitForPageToLoad();
2091         blanketApproveTest();
2092         assertDocFinal(docId);
2093     }
2094 
2095     protected void testLocationCampusBlanketApprove() throws Exception {
2096         selectFrameIframePortlet();
2097         waitAndCreateNew();        
2098         String docId = waitForDocId();
2099         String twoLetters = RandomStringUtils.randomAlphabetic(2);
2100         waitAndTypeByName("document.documentHeader.documentDescription", "Validation Test Campus " + twoLetters);
2101         assertBlanketApproveButtonsPresent();
2102         waitAndTypeByName("document.newMaintainableObject.code", RandomStringUtils.randomAlphabetic(2));
2103         waitAndTypeByName("document.newMaintainableObject.name", "Validation Test Campus" + ITUtil.createUniqueDtsPlusTwoRandomChars());
2104         waitAndTypeByName("document.newMaintainableObject.shortName", "VTC " + twoLetters);
2105         selectByName("document.newMaintainableObject.campusTypeCode", "B - BOTH");
2106         blanketApproveTest();
2107         assertDocFinal(docId);
2108     }
2109 
2110     protected void testLocationCountryBlanketApprove() throws InterruptedException {
2111         selectFrameIframePortlet();
2112         waitAndCreateNew();        
2113         String docId = waitForDocId();
2114         assertBlanketApproveButtonsPresent();
2115         String twoUpperCaseLetters = RandomStringUtils.randomAlphabetic(2).toUpperCase();
2116         String countryName = "Validation Test Country " + ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
2117         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, countryName);
2118         waitAndTypeByXpath(DOC_CODE_XPATH, twoUpperCaseLetters);
2119         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countryName);
2120         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.alternateCode']", "V" + twoUpperCaseLetters);
2121         int attemptCount = 0;
2122         blanketApproveCheck();
2123         while (hasDocError("same primary key already exists") && attemptCount < 25) {
2124             clearTextByXpath(DOC_CODE_XPATH);
2125             waitAndTypeByXpath(DOC_CODE_XPATH, twoUpperCaseLetters.substring(0, 1) + Character.toString((char) ('A' + attemptCount++)));
2126             blanketApproveCheck();
2127         }
2128         blanketApproveTest();
2129         assertDocFinal(docId);
2130     }
2131 
2132     protected void testLocationCountyBlanketApprove() throws Exception {
2133         selectFrameIframePortlet();
2134         waitAndCreateNew();        
2135         String docId = waitForDocId();
2136         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test County");
2137         assertBlanketApproveButtonsPresent();
2138         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2139                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2140         waitAndClickByXpath(countryLookUp);
2141         waitAndTypeByName("code", "US");
2142         waitAndClickSearch();
2143         waitAndClickReturnValue();
2144         waitAndTypeByXpath(DOC_CODE_XPATH, RandomStringUtils.randomAlphabetic(2).toUpperCase());
2145         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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2146                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2147         waitAndClickByXpath(stateLookUp);
2148         waitAndTypeByName("code", "IN");
2149         waitAndClickSearch();
2150         waitAndClickReturnValue();
2151         String countyName = "Validation Test County" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2152         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countyName);
2153         waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
2154         blanketApproveTest();
2155         assertDocFinal(docId);
2156     }
2157 
2158     protected void testLocationPostBlanketApprove() throws Exception {
2159         selectFrameIframePortlet();
2160         waitAndCreateNew();        
2161         String docId = waitForDocId();
2162         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Postal Code");
2163         assertBlanketApproveButtonsPresent();
2164         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2165                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2166         waitAndClickByXpath(countryLookUp);
2167         waitAndTypeByName("code", "US");
2168         waitAndClickSearch();
2169         waitAndClickReturnValue();
2170         String code = RandomStringUtils.randomNumeric(5);
2171         waitAndTypeByXpath(DOC_CODE_XPATH, code);
2172         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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2173                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2174         waitAndClickByXpath(stateLookUp);
2175         waitAndClickSearch();
2176         waitAndClickByXpath("//table[@id='row']/tbody/tr[4]/td[1]/a");
2177         String cityName = "Validation Test Postal Code " + code;
2178         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.cityName']", cityName);
2179         blanketApproveTest();
2180         assertDocFinal(docId);
2181     }
2182 
2183     protected void testLocationStateBlanketApprove() throws Exception {
2184         selectFrameIframePortlet();
2185         waitAndCreateNew();
2186         String docId = waitForDocId();
2187         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test State");
2188         assertBlanketApproveButtonsPresent();
2189         
2190         
2191         String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
2192                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
2193         waitAndClickByXpath(countryLookUp);
2194         waitAndClickSearch();
2195         waitAndClickReturnValue();
2196         String code = RandomStringUtils.randomAlphabetic(2).toUpperCase();
2197         waitAndTypeByXpath(DOC_CODE_XPATH, code);
2198         String state = "Validation Test State " + code;
2199         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", state);
2200         waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
2201         blanketApproveTest();
2202         assertDocFinal(docId);
2203     }
2204 
2205     protected void testLookUp() throws Exception {
2206         waitForPageToLoad();
2207         selectFrameIframePortlet();
2208 
2209         
2210         waitAndClick(By.xpath(SEARCH_XPATH_3));
2211         waitAndClickByLinkText(EDIT_LINK_TEXT, "edit button not present does user " + user + " have permission?");
2212         checkForIncidentReport("submit");
2213         assertTextPresent("ubmit");
2214         assertTextPresent("ave");
2215         assertTextPresent("pprove");
2216         assertTextPresent("lose");
2217         assertTextPresent("ancel");
2218     }
2219 
2220     protected void performParameterInquiry(String parameterField) throws Exception {
2221         waitAndTypeByName("name", parameterField);
2222         waitAndClickSearch();
2223         isElementPresentByLinkText(parameterField);
2224         waitAndClickByLinkText(parameterField);
2225         waitForPageToLoad();
2226         Thread.sleep(2000);
2227         switchToWindow("Kuali :: Inquiry");
2228         Thread.sleep(2000);
2229     }
2230 
2231     protected List<String> testLookUpParameterType(String docId, String parameterType, String parameterCode) throws Exception {
2232         performParameterInquiry(parameterType);
2233         SeleneseTestBase.assertEquals(parameterCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim().toLowerCase());
2234         SeleneseTestBase.assertEquals(parameterType, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim().toLowerCase());
2235         waitAndClickCloseWindow();
2236         switchToWindow("null");
2237         List<String> params = new ArrayList<String>();
2238         params.add(docId);
2239         params.add(parameterType);
2240         params.add(parameterCode);
2241 
2242         return params;
2243     }
2244 
2245     protected List<String> testLookUpParameter(String docId, String parameterName) throws Exception {
2246         performParameterInquiry(parameterName);
2247         SeleneseTestBase.assertEquals(parameterName, getTextByXpath(
2248                 "//div[@class='tab-container']/table//span[@id='name.div']").trim());
2249         SeleneseTestBase.assertEquals("Y", getTextByXpath("//div[@class='tab-container']/table//span[@id='value.div']")
2250                 .trim());
2251         waitAndClickCloseWindow();
2252         switchToWindow("null");
2253         List<String> params = new ArrayList<String>();
2254         params.add(docId);
2255         params.add(parameterName);
2256 
2257         return params;
2258     }
2259 
2260     protected void testPeopleFlow() throws Exception {
2261         selectFrameIframePortlet();
2262         
2263         
2264         
2265         
2266         jGrowl("Create New");
2267         waitAndClickByLinkText("Create New");
2268         
2269         
2270         
2271         waitForElementPresent("div[data-header_for='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
2272         String docId = getText("div[data-header_for='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
2273         jGrowlSticky("Doc Id is " + docId);
2274         driver.findElement(By.name("document.documentHeader.documentDescription")).clear();
2275         driver.findElement(By.name("document.documentHeader.documentDescription")).sendKeys("Description for Document");
2276         new Select(driver.findElement(By.name("document.newMaintainableObject.dataObject.namespaceCode"))).selectByVisibleText("KUALI - Kuali Systems");
2277         driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).clear();
2278         driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).sendKeys("Document Name" + ITUtil.DTS);
2279 
2280         jGrowl("Add Member kr");
2281         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
2282         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).sendKeys("kr");
2283         driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
2284         Thread.sleep(3000);
2285 
2286         jGrowl("Add Member admin");
2287         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
2288         driver.findElement(By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).sendKeys("admin");
2289         driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
2290         Thread.sleep(3000);
2291 
2292         driver.findElement(By.cssSelector("div[data-parent='PeopleFlow-MaintenanceView'] > div.uif-footer button~button~button")).click();
2293         jGrowl("Blanket Approve");
2294         Thread.sleep(5000);
2295         
2296         
2297         
2298         
2299         driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
2300         driver.findElement(By.cssSelector("img[alt=\"doc search\"]")).click();
2301         Thread.sleep(5000);
2302         jGrowl("Document Search is " + docId + " present?");
2303         selectFrameIframePortlet();
2304         driver.findElement(By.cssSelector("td.infoline > input[name=\"methodToCall.search\"]")).click();
2305         Thread.sleep(5000);
2306         jGrowl("Is doc status final?");
2307         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, driver.findElement(By.xpath("//table[@id='row']/tbody/tr/td[4]")).getText());
2308         driver.switchTo().defaultContent();
2309         driver.findElement(By.name("imageField")).click();
2310         Thread.sleep(5000);
2311         
2312     }
2313 
2314     protected void testTermLookupAssertions() throws Exception {
2315         testLookUp();
2316         assertTextPresent("Term Parameters");
2317         waitAndClick(By.xpath(CANCEL2_XPATH));
2318         passed();
2319     }
2320 
2321     protected void testTermSpecificationLookupAssertions() throws Exception {
2322         testLookUp();
2323         assertTextPresent("Context");
2324         waitAndClick(By.xpath(CANCEL2_XPATH));
2325         passed();
2326     }
2327 
2328     protected List<String> testVerifyModifiedParameter(String docId, String parameterName) throws Exception {
2329         performParameterInquiry(parameterName);
2330         SeleneseTestBase.assertEquals(parameterName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
2331         SeleneseTestBase.assertEquals("N", getTextByXpath("//div[@class='tab-container']/table//span[@id='value.div']").trim());
2332         waitAndClickCloseWindow();
2333         switchToWindow("null");
2334         List<String> params = new ArrayList<String>();
2335         params.add(docId);
2336         params.add(parameterName);
2337 
2338         return params;
2339     }
2340 
2341     protected List<String> testVerifyCopyParameterType(String docId, String parameterType, String parameterCode) throws Exception
2342     {
2343         performParameterInquiry(parameterType);
2344         SeleneseTestBase.assertEquals(parameterType, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim().toLowerCase());
2345         waitAndClickCloseWindow();
2346         switchToWindow("null");
2347         List<String> params = new ArrayList<String>();
2348         params.add(docId);
2349         params.add(parameterType);
2350         params.add(parameterCode);
2351         
2352         return params;
2353     }
2354 
2355     protected List<String> testCreateNewPermission(String docId, String permissionName) throws Exception
2356     {
2357         waitForPageToLoad();
2358         Thread.sleep(2000);
2359         docId = waitForDocId();
2360         waitAndClickSave();
2361         waitForPageToLoad();
2362         assertElementPresentByXpath("//div[contains(.,'Document Description (Description) is a required field.')]/img[@alt='error']");
2363         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding Permission removeme");
2364         waitAndClickSubmit();
2365         waitForPageToLoad();
2366         assertElementPresentByXpath("//div[@class='error']");
2367         assertElementPresentByXpath("//div[contains(.,'Template (Template) is a required field.')]/img[@alt='error']");
2368         assertElementPresentByXpath("//div[contains(.,'Permission Namespace (Permission Namespace) is a required field.')]/img[@alt='error']");
2369         assertElementPresentByXpath("//div[contains(.,'Permission Name (Permission Name) is a required field.')]/img[@alt='error']");
2370         selectOptionByName("document.newMaintainableObject.templateId", "36");
2371         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-SYS");
2372         permissionName = "removeme" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2373         waitAndTypeByName("document.newMaintainableObject.name", permissionName);
2374         waitAndTypeByName("document.newMaintainableObject.description", "namespaceCode=KR*");
2375         checkByName("document.newMaintainableObject.active");
2376         waitAndClickSave();
2377         waitForPageToLoad();
2378         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH);
2379         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, getTextByXpath(DOC_STATUS_XPATH));
2380         waitAndClickSubmit();
2381         waitForPageToLoad();
2382         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
2383         SeleneseTestBase.assertEquals(DOC_STATUS_ENROUTE, getTextByXpath(DOC_STATUS_XPATH));
2384         List<String> params = new ArrayList<String>();
2385         params.add(docId);
2386         params.add(permissionName);
2387         
2388         return params;
2389     }
2390 
2391     protected List<String> testLookUpPermission(String docId, String permissionName) throws Exception
2392     {
2393         waitForPageToLoad();
2394         waitAndTypeByName("name", permissionName);
2395         waitAndClickSearch();
2396         isElementPresentByLinkText(permissionName);
2397         List<String> params = new ArrayList<String>();
2398         params.add(docId);
2399         params.add(permissionName);
2400         
2401         return params;
2402     }
2403 
2404     protected List<String> testEditPermission(String docId, String permissionName) throws Exception
2405     {
2406         waitAndClickEdit();
2407         waitForPageToLoad();
2408         Thread.sleep(2000);
2409         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Editing Permission removeme");
2410         uncheckByName("document.newMaintainableObject.active");
2411         waitAndClickSubmit();
2412         waitForPageToLoad();
2413         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
2414         List<String> params = new ArrayList<String>();
2415         params.add(docId);
2416         params.add(permissionName);
2417         
2418         return params;
2419     }
2420 
2421     protected List<String> testVerifyPermission(String docId, String permissionName) throws Exception
2422     {
2423         waitForPageToLoad();
2424         waitAndTypeByName("name", permissionName);
2425         waitAndClickByXpath("//input[@title='Active Indicator - No']");
2426         waitAndClickSearch();
2427         isElementPresentByLinkText(permissionName);
2428         List<String> params = new ArrayList<String>();
2429         params.add(docId);
2430         params.add(permissionName);
2431         
2432         return params;
2433     }
2434 
2435     protected List<String> testCreateNewPerson(String docId, String personName) throws Exception
2436     {
2437         waitForPageToLoad();
2438         docId = waitForDocId();
2439         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Adding Charlie Brown");
2440         waitAndTypeByName("document.documentHeader.explanation", "I want to add Charlie Brown to test KIM");
2441         
2442         
2443         personName = "cbrown" + ITUtil.createUniqueDtsPlusTwoRandomChars();
2444         waitAndTypeByName("document.principalName", personName);
2445         waitAndClickSave();
2446         waitForPageToLoad();
2447         assertElementPresentByXpath(SAVE_SUCCESSFUL_XPATH);
2448         SeleneseTestBase.assertEquals(DOC_STATUS_SAVED, getTextByXpath(DOC_STATUS_XPATH));
2449         waitAndClickSubmit();
2450         waitForPageToLoad();
2451         assertElementPresentByXpath("//div[contains(.,'At least one affiliation must be entered.')]/img[@alt='error']");
2452         assertElementPresentByXpath("//div[contains(.,'At least one name must be entered.')]/img[@alt='error']");
2453         selectOptionByName("newAffln.affiliationTypeCode", "STDNT");
2454         selectOptionByName("newAffln.campusCode", "BL");
2455         checkByName("newAffln.dflt");
2456         waitAndClickByName("methodToCall.addAffln.anchor");
2457         waitForPageToLoad();
2458         Thread.sleep(3000);
2459         selectOptionByName("newName.nameCode", "PRM");
2460         selectOptionByName("newName.namePrefix", "Mr");
2461         waitAndTypeByName("newName.firstName", "Charlie");
2462         waitAndTypeByName("newName.lastName", "Brown");
2463         checkByName("newName.dflt");
2464         waitAndClickByName("methodToCall.addName.anchor");
2465         waitForPageToLoad();
2466         waitAndClickSubmit();
2467         waitForPageToLoad();
2468         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, "Document is not submitted successfully");
2469         SeleneseTestBase.assertEquals(DOC_STATUS_ENROUTE, getTextByXpath(DOC_STATUS_XPATH));
2470         List<String> params = new ArrayList<String>();
2471         params.add(docId);
2472         params.add(personName);
2473         
2474         return params;
2475     }
2476 
2477     protected List<String> testLookUpPerson(String docId, String personName) throws Exception
2478     {
2479         waitForPageToLoad();
2480         waitAndTypeByName("principalName", personName);
2481         waitAndClickSearch();
2482         isElementPresentByLinkText(personName);
2483         waitAndClickByName("methodToCall.clearValues");
2484         waitAndTypeByName("firstName", "Charlie");
2485         waitAndClickSearch();
2486         isElementPresentByLinkText(personName);
2487         waitAndClickByName("methodToCall.clearValues");
2488         waitAndTypeByName("lastName", "Brown");
2489         waitAndClickSearch();
2490         isElementPresentByLinkText(personName);
2491         waitAndClickByName("methodToCall.clearValues");
2492         waitAndTypeByName("campusCode", "BL");
2493         waitAndClickSearch();
2494         isElementPresentByLinkText(personName);
2495         List<String> params = new ArrayList<String>();
2496         params.add(docId);
2497         params.add(personName);
2498         
2499         return params;
2500     }
2501 
2502     protected List<String> testVerifyPerson(String docId, String personName) throws Exception
2503     {
2504         waitAndClickByLinkText(personName);
2505         waitForPageToLoad();
2506         Thread.sleep(5000);
2507         switchToWindow("Kuali :: Person");
2508         Thread.sleep(2000);
2509         SeleneseTestBase.assertEquals(personName, getTextByXpath("//div[@class='tab-container']/table//tr[2]/td[1]/div").trim());
2510         SeleneseTestBase.assertEquals("BL - BLOOMINGTON", getTextByXpath("//div[@class='tab-container']/table[3]//tr[2]/td[2]/div").trim());
2511         SeleneseTestBase.assertEquals("Student", getTextByXpath("//select/option[@selected]").trim());
2512         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Overview']");
2513         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Contact']");
2514         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Privacy Preferences']");
2515         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Membership']");
2516         waitAndClickByName("methodToCall.showAllTabs");
2517         Thread.sleep(3000);
2518         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Overview']");
2519         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Contact']");
2520         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Privacy Preferences']");
2521         assertElementPresentByXpath("//table[@class='tab']//input[@title='close Membership']");
2522         waitAndClickByName("methodToCall.hideAllTabs");
2523         Thread.sleep(3000);
2524         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Overview']");
2525         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Contact']");
2526         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Privacy Preferences']");
2527         assertElementPresentByXpath("//table[@class='tab']//input[@title='open Membership']");
2528         waitAndClickCloseWindow();
2529         switchToWindow("null");
2530         List<String> params = new ArrayList<String>();
2531         params.add(docId);
2532         params.add(personName);
2533         
2534         return params;
2535     }
2536 
2537     protected void testUifTooltip(String NAME_FIELD_1, String NAME_FIELD_2) throws Exception {
2538         
2539         fireEvent(NAME_FIELD_1, "focus");
2540         fireMouseOverEventByName(NAME_FIELD_1);
2541         
2542         
2543         SeleneseTestBase.assertEquals("This tooltip is triggered by focus or and mouse over.", getText(
2544                 "td.jquerybubblepopup-innerHtml"));
2545 
2546         
2547         fireEvent(NAME_FIELD_1, "blur");
2548         SeleneseTestBase.assertFalse(isVisible("div.jquerybubblepopup.jquerybubblepopup-black") && isVisible(
2549                 "td.jquerybubblepopup-innerHtml"));
2550         Thread.sleep(5000);
2551         fireEvent("field119", "focus");
2552         
2553         
2554         fireMouseOverEventByName(NAME_FIELD_2);        
2555         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(.,\"This is a tool-tip with different position and tail options\")]"));
2556 
2557         
2558         waitAndTypeByName(NAME_FIELD_2, "a");
2559         Thread.sleep(5000);
2560         SeleneseTestBase.assertFalse(isVisibleByXpath(
2561                 "//td[contains(.,\"This is a tool-tip with different position and tail options\")]"));
2562 
2563         
2564         waitAndTypeByName(NAME_FIELD_1, "1");
2565         fireEvent(NAME_FIELD_1, "blur");
2566         fireMouseOverEventByName(NAME_FIELD_1);
2567         Thread.sleep(10000);
2568         SeleneseTestBase.assertTrue("https://jira.kuali.org/browse/KULRICE-8141 Investigate why UifTooltipIT.testTooltip fails around jquerybubblepopup",
2569                         isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']") &&
2570                                 !(isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-black']")));
2571        
2572         
2573         passed();
2574     }
2575 
2576     protected void testValidCharsConstraintIT() throws Exception {
2577         assertFocusTypeBlurValidation("field50", new String[]{"12.333", "-123.33"}, new String[]{"123.33"});
2578         assertFocusTypeBlurValidation("field51", new String[]{"A"}, new String[]{"-123.33"});
2579 
2580         
2581         assertFocusTypeBlurValidation("field77", new String[]{"1.1"},new String[]{"12"});
2582         assertFocusTypeBlurValidation("field52", new String[]{"5551112222"},new String[]{"555-111-1111"});
2583         assertFocusTypeBlurValidation("field53", new String[]{"1ClassName.java"},new String[]{"ClassName.java"});
2584         assertFocusTypeBlurValidation("field54", new String[]{"aaaaa"},new String[]{"aaaaa@kuali.org"});
2585         assertFocusTypeBlurValidation("field84", new String[]{"aaaaa"},new String[]{"http://www.kuali.org"});       
2586         assertFocusTypeBlurValidation("field55", new String[]{"023512"},new String[]{"022812"});
2587         assertFocusTypeBlurValidation("field75", new String[]{"02/35/12"},new String[]{"02/28/12"});
2588         assertFocusTypeBlurValidation("field82", new String[]{"13:22"},new String[]{"02:33"});
2589         assertFocusTypeBlurValidation("field83", new String[]{"25:22"},new String[]{"14:33"});
2590         assertFocusTypeBlurValidation("field57", new String[]{"0"},new String[]{"2020"});      
2591         assertFocusTypeBlurValidation("field58", new String[]{"13"},new String[]{"12"});  
2592         assertFocusTypeBlurValidation("field61", new String[]{"5555-444"},new String[]{"55555-4444"});
2593         assertFocusTypeBlurValidation("field62", new String[]{"aa5bb6_a"},new String[]{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"});       
2594         assertFocusTypeBlurValidation("field63", new String[]{"fff555"},new String[]{"aa22 _/"});       
2595         assertFocusTypeBlurValidation("field64", new String[]{"AABB55"},new String[]{"ABCDEFGHIJKLMNOPQRSTUVWXY,Z abcdefghijklmnopqrstuvwxy,z"});       
2596         assertFocusTypeBlurValidation("field76", new String[]{"AA~BB%"},new String[]{"abcABC %$#@&<>\\{}[]*-+!=.()/\"\"',:;?"});       
2597         assertFocusTypeBlurValidation("field65", new String[]{"sdfs$#$# dsffs"},new String[]{"sdfs$#$#sffs"});      
2598         assertFocusTypeBlurValidation("field66", new String[]{"abcABCD"},new String[]{"ABCabc"});
2599         assertFocusTypeBlurValidation("field67", new String[]{"(111)B-(222)A"},new String[]{"(12345)-(67890)"});  
2600         assertFocusTypeBlurValidation("field68", new String[]{"A.66"},new String[]{"a.4"});
2601         assertFocusTypeBlurValidation("field56", new String[]{"2020-06-02"},new String[]{"2020-06-02 03:30:30.22"});
2602     }
2603 
2604     protected void assertFocusTypeBlurValidation(String field, String[] errorInputs, String[] validInputs) throws InterruptedException {
2605         assertFocusTypeBlurError(field, errorInputs);
2606         clearTextByName(field);
2607         assertFocusTypeBlurValid(field, validInputs);
2608     }
2609 
2610     protected void testSubCollectionSize() throws Exception {
2611         checkForIncidentReport(COLLECTIONS_LINK_TEXT);
2612         
2613         
2614         waitAndClickByLinkText(COLLECTIONS_LINK_TEXT);
2615         
2616         
2617         for (int second = 0;; second++) {                   
2618             if (second >= waitSeconds)
2619                 failableFail(TIMEOUT_MESSAGE + " looking for " + SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH);
2620             try {                
2621                 if (getText(SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH).equals("SubCollection - (3 lines)"))
2622                 {
2623                     break;
2624                 }
2625             } catch (Exception e) {}
2626             Thread.sleep(1000);
2627         }
2628         
2629         
2630         SeleneseTestBase.assertEquals("SubCollection - (3 lines)", getText(SUB_COLLECTION_UIF_DISCLOSURE_SPAN_UIF_HEADER_TEXT_SPAN_XPATH));
2631         SeleneseTestBase.assertEquals("SubCollection - (2 lines)", getTextByXpath(
2632                 "//a[@id='subCollection1_line1_toggle']/span"));
2633     }
2634 
2635     protected void testConfigurationTestView(String idPrefix) throws Exception {
2636         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2637         
2638         
2639         String styleValue = getAttributeByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']", "style");
2640         
2641         
2642         SeleneseTestBase.assertTrue(idPrefix + "textInputField label does not contain expected style", styleValue.replace(" ", "").contains("color:red"));
2643         
2644         
2645         String refreshTextSelectLocator = "//select[@id='" + idPrefix + "RefreshTextField_control']";
2646         String[] options1 = getSelectOptionsByXpath(refreshTextSelectLocator);
2647         String dropDownSelectLocator = "//select[@id='" + idPrefix + "DropDown_control']";
2648         selectByXpath(dropDownSelectLocator, "Vegetables");
2649         Thread.sleep(3000);
2650         
2651         
2652         String[] options2 = getSelectOptionsByXpath(refreshTextSelectLocator);
2653         
2654         
2655         SeleneseTestBase.assertFalse(
2656                 "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",
2657                 options1[options1.length - 1].equalsIgnoreCase(options2[options2.length - 1]));
2658         
2659         
2660         selectByXpath(dropDownSelectLocator, "None");
2661         Thread.sleep(3000);
2662         SeleneseTestBase.assertEquals("true", getAttributeByXpath(refreshTextSelectLocator, "disabled"));
2663     }
2664 
2665     
2666 
2667 
2668     protected void confirmAddLineControlsPresent(String idPrefix, String addLineIdSuffix) {
2669         String[] addLineIds = {"StartTime", "StartTimeAmPm", "AllDay"};
2670 
2671         for (String id : addLineIds) {
2672             String tagId = "//*[@id='" + idPrefix + id + addLineIdSuffix + "']";
2673             SeleneseTestBase.assertTrue("Did not find id " + tagId, isElementPresentByXpath(tagId));
2674         }
2675     }
2676 
2677     protected void testAddLineWithSpecificTime(String idPrefix, String addLineIdSuffix) throws Exception {
2678         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2679         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2680         String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
2681         String inputTime = "7:06";
2682         waitAndTypeByXpath(startTimeId, inputTime);
2683         String amPmSelectLocator = "//*[@id='" + idPrefix + "StartTimeAmPm" + addLineIdSuffix + "']";
2684         selectByXpath(amPmSelectLocator, "PM");
2685         SeleneseTestBase.assertEquals("PM", getAttributeByXpath(amPmSelectLocator, "value"));
2686         Thread.sleep(5000); 
2687         waitAndClickByXpath("//button");
2688         Thread.sleep(5000); 
2689         
2690         
2691         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",
2692                         isElementPresentByXpath("//input[@value='7:06']"));
2693     }
2694 
2695     protected void testAddLineWithAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
2696         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2697         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2698         String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
2699         String inputTime = "5:20";
2700         waitAndTypeByXpath(startTimeId, inputTime);
2701         String allDaySelector = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
2702         Thread.sleep(5000); 
2703         waitAndClickByXpath(allDaySelector);
2704         Thread.sleep(5000); 
2705         waitAndClick("div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button");
2706         Thread.sleep(5000); 
2707     }
2708 
2709     protected void testAddLineAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
2710         waitForElementPresentByXpath("//span[@id='" + idPrefix + "TextInputField_label_span']");
2711         confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
2712         
2713         
2714         String cssCountRows = "div#ConfigurationTestView-ProgressiveRender-TimeInfoSection.uif-group div#ConfigurationTestView-ProgressiveRender-TimeInfoSection_disclosureContent.uif-disclosureContent table tbody tr";
2715         int rowCount = (getCssCount(cssCountRows));
2716         String allDayId = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
2717         Thread.sleep(5000); 
2718         waitAndClickByXpath(allDayId);
2719         waitAndClick("div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button");
2720         Thread.sleep(5000); 
2721         
2722         
2723         assertEquals("line was not added", rowCount + 1, (getCssCount(cssCountRows)));
2724     }
2725 
2726 
2727 
2728 
2729 
2730 
2731 
2732 
2733 
2734 
2735 
2736 
2737 
2738 
2739 
2740 
2741 
2742 
2743 
2744 
2745 
2746 
2747 
2748 
2749 
2750 
2751     protected void testCategoryLookUp() throws Exception {
2752         waitForPageToLoad();
2753         selectFrameIframePortlet();
2754         waitAndClickByXpath("//button[contains(.,'earch')]");
2755         Thread.sleep(3000);
2756         waitForPageToLoad();
2757         driver.findElement(By.tagName("body")).getText().contains("Actions"); 
2758         
2759         
2760         
2761         
2762         
2763         
2764         
2765         
2766         
2767         
2768     }
2769 
2770     protected void testCreateSampleEDocLite() throws Exception {
2771         waitForPageToLoad();
2772         Thread.sleep(3000);
2773         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2774         selectFrameIframePortlet();
2775         waitAndClickByXpath("//input[@name='methodToCall.search' and @alt='search']");
2776         waitForPageToLoad();
2777         
2778         
2779         waitAndClickByLinkText("Create Document");
2780         waitForPageToLoad();
2781         Thread.sleep(3000);
2782         String docId = getTextByXpath("//table/tbody/tr[4]/td[@class='datacell1']");
2783         waitAndTypeByName("userName", "Viral Chauhan");
2784         waitAndTypeByName("rqstDate", "12/03/2020");
2785         checkByName("fundedBy");
2786         waitAndTypeByName("addText", "Note Added.");
2787         waitAndClickByXpath("//td[@class='datacell']/div/img");
2788         waitForPageToLoad();
2789         waitAndClickByXpath("//input[@value='submit']");
2790         SeleneseTestBase.assertEquals(Boolean.FALSE,(Boolean) isElementPresentByXpath("//input[@value='submit']"));
2791         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByXpath("//input[@value='save']"));
2792         SeleneseTestBase.assertEquals(Boolean.FALSE,(Boolean) isElementPresentByXpath("//input[@value='cancel']"));
2793         waitForPageToLoad();
2794         selectTopFrame();
2795         waitAndClickDocSearch();
2796         waitForPageToLoad();
2797         selectFrameIframePortlet();
2798         waitAndClickByXpath("//input[@name='methodToCall.search' and @alt='search']");
2799         waitForPageToLoad();
2800         isElementPresent(By.linkText(docId));
2801     }
2802 
2803     protected void testTermLookUp() throws Exception {
2804         testLookUp();
2805         assertTextPresent("Term Parameters");
2806         waitAndClick(By.xpath(CANCEL2_XPATH));
2807         passed();
2808     }
2809 
2810     protected void testWorkFlowRouteRulesBlanketApp() throws Exception {
2811         waitForPageToLoad();
2812         Thread.sleep(3000);
2813         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2814         selectFrameIframePortlet();
2815         
2816         
2817         waitAndClickCreateNew();
2818         waitForPageToLoad();
2819         
2820         
2821         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.doctype.bo.DocumentType!!).(((name:documentTypeName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2822         waitForPageToLoad();
2823         
2824         
2825         waitAndTypeByName("name", "RoutingRuleDocument");
2826         
2827         
2828         waitAndClickSearch();
2829         waitForPageToLoad();
2830         
2831         
2832         waitAndClickReturnValue();
2833         waitForPageToLoad();
2834         
2835         
2836         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.rule.bo.RuleTemplateBo!!).(((name:ruleTemplateName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2837         waitForPageToLoad();
2838         
2839         
2840         waitAndTypeByName("name", "RuleRoutingTemplate");
2841         
2842         
2843         waitAndClickSearch();
2844         waitForPageToLoad();
2845         
2846         
2847         waitAndClickReturnValue();
2848         waitForPageToLoad();
2849         
2850         
2851         waitAndClickByName("methodToCall.createRule");
2852         waitForPageToLoad();
2853         String docId = waitForDocId();
2854         SeleneseTestBase.assertTrue(isElementPresentByName(CANCEL_NAME));
2855        
2856         
2857         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Test Routing Rule");
2858        
2859         
2860         waitAndClickByXpath("//input[@id='document.newMaintainableObject.forceAction']");
2861        
2862         
2863         waitAndTypeByXpath("//textarea[@id='document.newMaintainableObject.description']", "Test Routing Rule1");
2864        
2865         
2866         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.fieldValues(1321~docTypeFullName)']",
2867                 "DocumentTypeDocument");
2868         
2869         
2870         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalName:document.newMaintainableObject.add.personResponsibilities.principalName,))).((`document.newMaintainableObject.add.personResponsibilities.principalName:principalName,`)).((<>)).(([])).((**)).((^^)).((&&)).((/personImpl/)).((~~)).(::::;"
2871                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor15");
2872         waitForPageToLoad();
2873        
2874         
2875         waitAndClickSearch();
2876         waitForPageToLoad();
2877         
2878         
2879         waitAndClickReturnValue();
2880         waitForPageToLoad();
2881         
2882         
2883         selectByXpath("//select[@id='document.newMaintainableObject.add.personResponsibilities.actionRequestedCd']",
2884                 "ACKNOWLEDGE");
2885         
2886         
2887         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.add.personResponsibilities.priority']", "1");
2888        
2889         
2890         waitAndClickByName("methodToCall.addLine.personResponsibilities.(!!org.kuali.rice.kew.rule.PersonRuleResponsibility!!).(:::;15;:::).anchor15");
2891         waitForPageToLoad();
2892         checkForIncidentReport(BLANKET_APPROVE_NAME);
2893         waitAndClickByName(BLANKET_APPROVE_NAME);
2894         waitForPageToLoad();
2895         driver.switchTo().defaultContent(); 
2896         Thread.sleep(2000);
2897         waitAndClickDocSearch();
2898         waitForPageToLoad();
2899         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2900         selectFrameIframePortlet();
2901         waitAndClickSearch();
2902         waitForPageToLoad();
2903         SeleneseTestBase.assertTrue(isElementPresent(By.linkText(docId)));
2904         
2905         if (isElementPresent(By.linkText(docId))) {
2906             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");
2907         } else {
2908             SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_2));
2909             SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
2910         }
2911     }
2912 
2913     protected void testCreateNewRRDTravelRequestDestRouting() throws Exception {
2914         selectFrameIframePortlet();
2915         waitAndClick("img[alt=\"create new\"]");
2916         waitForPageToLoad();
2917         waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kew.rule.RuleBaseValues!!).(((id:parentRuleId))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor");
2918         waitForPageToLoad();
2919         waitAndClickByXpath("//td[@class='infoline']/input[@name='methodToCall.search']");
2920         waitForPageToLoad();
2921         waitAndClick("a[title=\"return valueRule Id=1046 \"]");
2922         waitForPageToLoad();
2923         waitAndClickByName("parentResponsibilityId");
2924         waitAndClickByName("methodToCall.createDelegateRule");
2925         waitForPageToLoad();
2926         Thread.sleep(3000);
2927         waitAndClickCancel();
2928         waitForPageToLoad();
2929         waitAndClickByName("methodToCall.processAnswer.button0");
2930         waitForPageToLoad();
2931         driver.switchTo().defaultContent();
2932         waitAndClickByXpath("(//input[@name='imageField'])[2]");
2933         waitForPageToLoad();
2934         passed();
2935     }
2936 
2937     protected void testWorkFlowRouteRulesCreateNew() throws Exception {
2938         waitForPageToLoad();
2939         Thread.sleep(5000);
2940         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2941         selectFrameIframePortlet();
2942         waitAndClickCreateNew();
2943         waitForPageToLoad();
2944         Thread.sleep(3000);
2945         waitAndClickByName(CANCEL_NAME,"https://jira.kuali.org/browse/KULRICE-8161 Work Flow Route Rules cancel new yields 404 not found");
2946    
2947         
2948         waitForPageToLoad();
2949         Thread.sleep(3000);
2950         waitAndClickByName("methodToCall.processAnswer.button0",
2951                 "https://jira.kuali.org/browse/KULRICE-7753 : WorkFlowRouteRulesIT cancel confirmation missing from create new Route Rules.");
2952         passed();
2953     }
2954 
2955     
2956 
2957 
2958 
2959     protected void testWorkFlowRouteRulesEditRouteRules() throws Exception {
2960         waitForPageToLoad();
2961         SeleneseTestBase.assertEquals("Kuali Portal Index", getTitle());
2962         selectFrameIframePortlet();
2963         waitAndClickSearch();
2964         waitAndClickEdit();
2965         waitForPageToLoad();
2966         selectFrameIframePortlet();
2967         Thread.sleep(3000);
2968         waitAndClickCancel();
2969         waitForPageToLoad();
2970         Thread.sleep(3000);
2971         waitAndClickByName("methodToCall.processAnswer.button0");
2972         passed();
2973     }
2974 
2975     protected String testCreateNewComponent(String componentName, String componentCode) throws Exception {
2976         return testCreateNewComponent(componentName, componentCode, "");
2977     }
2978 
2979     protected String testCreateNewComponent(String componentName, String componentCode, String message) throws Exception {
2980         waitForPageToLoad();
2981         String docId = waitForDocId();
2982         
2983         
2984         waitAndTypeByName("document.documentHeader.documentDescription", "Adding Test Component");
2985         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-IDM");
2986         waitAndTypeByName("document.newMaintainableObject.code", componentCode);
2987         waitAndTypeByName("document.newMaintainableObject.name", componentName);
2988         checkByName("document.newMaintainableObject.active");
2989         waitAndClickSave();
2990         waitAndClickSubmit();
2991         waitForPageToLoad();
2992         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH, CREATE_NEW_DOCUMENT_NOT_SUBMITTED_SUCCESSFULLY_MESSAGE_TEXT  + message);
2993         selectTopFrame();
2994         waitAndClickDocSearchTitle();
2995         waitForPageToLoad();
2996         selectFrameIframePortlet();
2997         waitAndClickSearch();
2998         Thread.sleep(2000);
2999         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3000         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3001         selectTopFrame();
3002         return docId;
3003     }
3004     
3005     
3006     protected void testLookUpComponent(String docId, String componentName, String componentCode) throws Exception {
3007         selectFrameIframePortlet();
3008         
3009         waitAndTypeByName("name", componentName);
3010         waitAndClickSearch();
3011         isElementPresentByLinkText(componentName);
3012         waitAndClickByLinkText(componentName);
3013         waitForPageToLoad();
3014         Thread.sleep(2000);
3015         switchToWindow("Kuali :: Inquiry");
3016         Thread.sleep(2000);
3017         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3018         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3019         waitAndClickCloseWindow();
3020         switchToWindow("null");
3021     }
3022     
3023     protected void testEditComponent(String docId, String componentName, String componentCode) throws Exception {
3024         selectFrameIframePortlet();
3025         waitAndClickEdit();
3026         waitForPageToLoad();
3027         docId = waitForDocId();
3028         waitAndTypeByName("document.documentHeader.documentDescription", "Editing Test Component");
3029         clearTextByName("document.newMaintainableObject.name");
3030         waitAndTypeByName("document.newMaintainableObject.name", componentName);
3031         waitAndClickSave();
3032         waitAndClickSubmit();
3033         waitForPageToLoad();
3034         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
3035         selectTopFrame();
3036         waitAndClickDocSearchTitle();
3037         waitForPageToLoad();
3038         selectFrameIframePortlet();
3039         waitAndClickSearch();
3040         Thread.sleep(2000);
3041         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3042         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3043         selectTopFrame();
3044     }
3045     
3046     protected void testCopyComponent(String docId, String componentName, String componentCode) throws Exception {
3047         selectFrameIframePortlet();
3048         waitAndClickCopy();
3049         waitForPageToLoad();
3050         docId = waitForDocId();
3051         waitAndTypeByName("document.documentHeader.documentDescription", "Copying Test Component");
3052         selectOptionByName("document.newMaintainableObject.namespaceCode", "KR-IDM");
3053         waitAndTypeByName("document.newMaintainableObject.code", componentCode);
3054         clearTextByName("document.newMaintainableObject.name");
3055         waitAndTypeByName("document.newMaintainableObject.name", componentName);
3056         waitAndClickSave();
3057         waitAndClickSubmit();
3058         waitForPageToLoad();
3059         checkForDocError();
3060         assertElementPresentByXpath(DOC_SUBMIT_SUCCESS_MSG_XPATH,"Document is not submitted successfully");
3061         selectTopFrame();
3062         waitAndClickDocSearchTitle();
3063         waitForPageToLoad();
3064         selectFrameIframePortlet();
3065         waitAndClickSearch();
3066         Thread.sleep(2000);
3067         SeleneseTestBase.assertEquals(docId, getTextByXpath(DOC_ID_XPATH_3));
3068         SeleneseTestBase.assertEquals(DOC_STATUS_FINAL, getTextByXpath(DOC_STATUS_XPATH_2));
3069         selectTopFrame();
3070     }
3071 
3072     protected void testVerifyCopyComponent(String docId, String componentName, String componentCode) throws Exception {
3073         selectFrameIframePortlet();
3074         waitAndTypeByName("name", componentName);
3075         waitAndClickSearch();
3076         isElementPresentByLinkText(componentName);
3077         waitAndClickByLinkText(componentName);
3078         waitForPageToLoad();
3079         Thread.sleep(2000);
3080         switchToWindow("Kuali :: Inquiry");
3081         Thread.sleep(2000);
3082         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3083         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3084         waitAndClickCloseWindow();
3085         switchToWindow("null");
3086     }
3087     
3088     
3089 
3090 
3091     protected void testPageHelp() throws Exception {
3092         
3093         fireMouseOverEventByXpath("//h2/span[@class='uif-headerText-span']");
3094         SeleneseTestBase.assertEquals("Sample text for page help", getText("td.jquerybubblepopup-innerHtml"));
3095 
3096         
3097         waitAndClickByXpath("//input[@alt='Help for Help Page']");
3098         Thread.sleep(5000);
3099         switchToWindow("Kuali Foundation");
3100         Thread.sleep(5000);      
3101         switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
3102     }
3103 
3104     
3105 
3106 
3107     protected void testTooltipHelp() throws Exception {
3108         
3109         if (isElementPresentByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]")) {
3110             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3111         }
3112         
3113         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label left')]")) {
3114             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3115         }
3116         
3117         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label right')]")) {
3118             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label right')]"));
3119         }
3120         
3121         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label top')]")) {
3122             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3123         }
3124         
3125         if (isElementPresentByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]")) {
3126             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]"));
3127         }
3128         
3129         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')]")) {
3130             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')]"));
3131         }
3132         
3133         if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
3134             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]"));
3135         }
3136         
3137         if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]")) {
3138             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3139         }
3140         
3141         if (isElementPresentByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]")) {
3142             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3143         }
3144         
3145         if (isElementPresentByXpath("//td[contains(text(),'Sample text for check box help')]")) {
3146             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3147         }
3148        
3149         
3150         fireMouseOverEventByXpath("//div[@id='ConfigurationTestView-Help-Section1']/div/h3[@class='uif-headerText']");
3151         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3152         String javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[0].style.display='none'"; 
3153         ((JavascriptExecutor) driver).executeScript(javascript);
3154         Thread.sleep(3000);
3155         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
3156         
3157         
3158         SeleneseTestBase.assertFalse(isElementPresent("#ConfigurationTestView-Help-Section1 input.uif-helpImage"));
3159     
3160         
3161         fireMouseOverEventByXpath("//label[@id='field-label-left_label']");
3162         Thread.sleep(3000);
3163         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3164         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3165                 "element[1].style.display='none'"; 
3166         Thread.sleep(3000);
3167         ((JavascriptExecutor) driver).executeScript(javascript);
3168         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
3169         
3170         
3171         fireMouseOverEventByXpath("//label[@id='field-label-right_label']");
3172         Thread.sleep(3000);
3173         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label righ')]"));
3174         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +"element[2].style.display='none'"; 
3175         ((JavascriptExecutor) driver).executeScript(javascript);
3176         Thread.sleep(3000);
3177         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label righ')]"));
3178 
3179         
3180         fireMouseOverEventByXpath("//label[@id='field-label-top_label']");
3181         Thread.sleep(3000);
3182         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3183         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[3].style.display='none'"; 
3184         ((JavascriptExecutor) driver).executeScript(javascript);
3185         Thread.sleep(3000);
3186         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
3187 
3188         
3189         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@id='standalone-help-not-rendered']"));
3190 
3191         
3192         fireMouseOverEventByXpath("//label[@id='override-tooltip_label']");
3193         Thread.sleep(3000);
3194         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')]"));
3195         if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
3196             SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]"));
3197         }        
3198         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[4].style.display='none'"; 
3199         ((JavascriptExecutor) driver).executeScript(javascript);
3200         Thread.sleep(3000);
3201         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')]"));
3202 
3203         
3204         fireMouseOverEventByXpath("//input[@id='on-focus-tooltip_control']");
3205         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3206         fireMouseOverEventByXpath("//label[@id='on-focus-tooltip_label']");
3207         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3208         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +"element[5].style.display='none'"; 
3209         ((JavascriptExecutor) driver).executeScript(javascript);
3210         Thread.sleep(3000);                
3211         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[6].style.display='none'"; 
3212         ((JavascriptExecutor) driver).executeScript(javascript);
3213         Thread.sleep(3000);    
3214         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
3215         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
3216 
3217         
3218         fireMouseOverEventByXpath("//label[@id='checkbox_label']");
3219         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3220         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" + "element[7].style.display='none'"; 
3221         ((JavascriptExecutor) driver).executeScript(javascript);
3222         Thread.sleep(3000);
3223         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for check box help')]"));
3224     }
3225 
3226     
3227 
3228 
3229      protected void testDisplayOnlyTooltipHelp() throws Exception {
3230         
3231         if (isElementPresentByXpath("//td[contains(text(),'Sample text for sub-section help')]")) {
3232             SeleneseTestBase.assertFalse(isVisible("//td[contains(text(),'Sample text for sub-section help')]"));
3233         }
3234         
3235         if (isElementPresentByXpath("//td[contains(text(),'Sample text for read only field help')]")) {
3236             SeleneseTestBase.assertFalse(isVisible("//td[contains(text(),'Sample text for read only field help')]"));
3237         }
3238 
3239         
3240         fireMouseOverEventByXpath("//span[contains(text(),'Display only fields')]");
3241         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for sub-section help')]"));
3242         String javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3243                 "element[0].style.display='none'"; 
3244         ((JavascriptExecutor) driver).executeScript(javascript);
3245         SeleneseTestBase.assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for sub-section help')]"));
3246 
3247         
3248         fireMouseOverEventByXpath("//label[@for='display-field_control']");
3249         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'Sample text for read only field help')]"));
3250         javascript="var element = document.getElementsByClassName('jquerybubblepopup jquerybubblepopup-black');" +
3251                 "element[0].style.display='none'"; 
3252         ((JavascriptExecutor) driver).executeScript(javascript);
3253     }
3254 
3255     
3256 
3257 
3258     protected void testMissingTooltipHelp() throws Exception {
3259         
3260         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3261 
3262         
3263         SeleneseTestBase.assertFalse(isElementPresent("#ConfigurationTestView-Help-Section2 input.uif-helpImage"));
3264        
3265         
3266         fireMouseOverEventByXpath("//div[@id='ConfigurationTestView-Help-Section2']/div");
3267         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3268         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3269 
3270         
3271         fireMouseOverEventByXpath("//label[@id='missing-tooltip-help_label']");
3272         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3273         SeleneseTestBase.assertFalse(isElementPresentByXpath("//*[@class='jquerybubblepopup jquerybubblepopup-black']"));
3274     }
3275 
3276     
3277 
3278 
3279 
3280     protected void testExternalHelp2() throws Exception {
3281         
3282         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for External Help\"]"), "HelpWindow", "http://www.kuali.org/?section");
3283 
3284         
3285         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-left-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3286                 "http://www.kuali.org/?label_left");
3287 
3288         
3289         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-right-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3290                 "http://www.kuali.org/?label_right");
3291 
3292         
3293         assertPopUpWindowUrl(By.xpath("//div[@id='field-label-top-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3294                 "http://www.kuali.org/?system_parm");
3295 
3296         
3297         assertPopUpWindowUrl(By.id("standalone-external-help"), "HelpWindow", "http://www.kuali.org/?widget_only");
3298     }
3299 
3300     
3301 
3302 
3303 
3304     protected void testDisplayOnlyExternalHelp2() throws Exception {
3305         
3306         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for Display only fields\"]"), "HelpWindow", "http://www.kuali.org/?sub_section");
3307 
3308         
3309         assertPopUpWindowUrl(By.xpath("//div[@id='display-field-external-help']/fieldset/input[@title='Help for Field Label']"), "HelpWindow",
3310                 "http://www.kuali.org/?display_field");
3311     }
3312 
3313     
3314 
3315 
3316 
3317     protected void testMissingExternalHelp2() throws Exception {
3318         
3319         SeleneseTestBase.assertFalse(isElementPresent(By.cssSelector("input[title=\"Help for Missing External Help\"]")));
3320 
3321         
3322         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-externalHelpUrl-empty']/*[@class='uif-helpImage']"));
3323 
3324         
3325         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-helpdefinition-empty']/*[@class='uif-helpImage']"));
3326 
3327         
3328         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='external-help-system-parm-missing']/*[@class='uif-helpImage']"));
3329 
3330         
3331         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@id='standalone-external-help-missing']"));
3332     }
3333     
3334     protected void testReferenceCampusTypeBlanketApprove() throws Exception {
3335         selectFrameIframePortlet();
3336         waitAndCreateNew();
3337         String docId = waitForDocId();
3338         assertBlanketApproveButtonsPresent();
3339         String dtsTwo = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
3340         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Campus Type " + dtsTwo);
3341         waitAndTypeByXpath(DOC_CODE_XPATH, RandomStringUtils.randomAlphabetic(1));
3342         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "Indianapolis" + dtsTwo);
3343         int attemptCount = 1;
3344         blanketApproveCheck();
3345         while (hasDocError("same primary key already exists") && attemptCount < 25) {
3346             clearTextByXpath(DOC_CODE_XPATH);
3347             waitAndTypeByXpath(DOC_CODE_XPATH, Character.toString((char) ('A' + attemptCount++)));
3348             blanketApproveCheck();
3349         }
3350         blanketApproveTest();
3351         assertDocFinal(docId);
3352     }
3353 
3354     protected void testSearchEditCancel() throws InterruptedException {
3355         selectFrameIframePortlet();
3356         waitAndClickSearch2();
3357         waitAndClickEdit();
3358         testCancelConfirmation();
3359     }
3360 
3361     protected void testServerErrorsIT() throws Exception {
3362         waitAndClickByXpath("//button[contains(.,'Get Error Messages')]");
3363         waitForPageToLoad();
3364         Thread.sleep(5000);
3365         assertElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-errorMessageItem");
3366         waitIsVisibleByXpath("//div[@data-header_for='Demo-ValidationLayout-Section1']");
3367         assertElementPresentByXpath("//*[@data-messageitemfor='Demo-ValidationLayout-Section1' and @class='uif-errorMessageItem']");
3368         assertElementPresent("div[data-role=\"InputField\"] img[alt=\"Error\"]");
3369         assertElementPresentByXpath("//a[contains(.,'Section 1 Title')]");
3370         fireMouseOverEventByXpath("//a[contains(.,'Field 1')]");
3371         assertElementPresent(".uif-errorMessageItem-field");
3372         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3373         Thread.sleep(2000);
3374         waitIsVisible(".jquerybubblepopup-innerHtml");
3375         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems");
3376         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3377         waitAndTypeByName("field1", "");
3378         fireEvent("field1", "blur");
3379         fireEvent("field1", "focus");
3380         waitIsVisible(".jquerybubblepopup-innerHtml");
3381         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3382         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems");
3383         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field");
3384         waitAndTypeByName("field1", "t");
3385 
3386         for (int second = 0;; second++) {
3387             if (second >= waitSeconds) {
3388                 failableFail(TIMEOUT_MESSAGE);
3389             }
3390             try {
3391                 if (!isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems")) {
3392                     break;
3393                 }
3394             } catch (Exception e) {}
3395             Thread.sleep(1000);
3396         }
3397 
3398         waitIsVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-errorMessageItem-field");
3399         SeleneseTestBase.assertFalse(isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3400     }
3401 
3402     protected void testServerInfoIT() throws Exception {
3403         waitAndClickByXpath("//button[contains(.,'Get Info Messages')]");
3404         waitIsVisibleByXpath("//div[@data-messagesfor='Demo-ValidationLayout-SectionsPage']");
3405         SeleneseTestBase.assertTrue(isVisibleByXpath("//div[@data-messagesfor='Demo-ValidationLayout-SectionsPage']"));
3406         SeleneseTestBase.assertTrue(isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-infoMessageItem"));
3407         SeleneseTestBase.assertTrue(isVisible("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"]"));
3408         SeleneseTestBase.assertTrue(isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-infoMessageItem"));
3409         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@data-role='InputField']//img[@alt='Information']"));
3410         fireMouseOverEventByXpath("//a[contains(.,'Field 1')]");
3411         SeleneseTestBase.assertTrue(isElementPresent(".uif-infoHighlight"));
3412         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3413 
3414         for (int second = 0;; second++) {
3415             if (second >= waitSeconds)
3416                 failableFail(TIMEOUT_MESSAGE);
3417             try {
3418                 if (isVisible(".jquerybubblepopup-innerHtml"))
3419                     break;
3420             } catch (Exception e) {}
3421             Thread.sleep(1000);
3422         }
3423 
3424         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems"));
3425         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3426         waitAndTypeByName("field1", "");
3427         fireEvent("field1", "blur");
3428         fireEvent("field1", "focus");
3429 
3430         for (int second = 0;; second++) {
3431             if (second >= waitSeconds)
3432                 failableFail(TIMEOUT_MESSAGE);
3433             try {
3434                 if (isVisible(".jquerybubblepopup-innerHtml"))
3435                     break;
3436             } catch (Exception e) {}
3437             Thread.sleep(1000);
3438         }
3439 
3440         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3441         for (int second = 0;; second++) {
3442             if (second >= waitSeconds)
3443                 failableFail(TIMEOUT_MESSAGE);
3444             try {
3445                 if (isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"))
3446                     break;
3447             } catch (Exception e) {}
3448             Thread.sleep(1000);
3449         }
3450 
3451         SeleneseTestBase.assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field"));
3452         waitAndTypeByName("field1", "b");
3453         fireEvent("field1", "blur");
3454         fireEvent("field1", "focus");
3455 
3456         for (int second = 0;; second++) {
3457             if (second >= waitSeconds)
3458                 failableFail(TIMEOUT_MESSAGE);
3459             try {
3460                 if (!isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"))
3461                     break;
3462             } catch (Exception e) {}
3463             Thread.sleep(1000);
3464         }
3465 
3466         fireEvent("field1", "blur");
3467         Thread.sleep(3000);
3468         SeleneseTestBase.assertTrue(!isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-infoMessageItem-field"));
3469         SeleneseTestBase.assertFalse(isElementPresent(".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3470         fireEvent("field1", "focus");
3471         clearTextByName("field1");
3472         fireEvent("field1", "blur");
3473         SeleneseTestBase.assertTrue(isElementPresent("div.uif-hasError"));
3474         SeleneseTestBase.assertTrue(isElementPresent("img[src*=\"error.png\"]"));
3475     }
3476 
3477     protected void testServerWarningsIT() throws Exception {
3478         waitAndClickByXpath("//button[contains(.,'Get Warning Messages')]");
3479         waitForPageToLoad();
3480         Thread.sleep(3000);
3481         com.thoughtworks.selenium.SeleneseTestBase.assertTrue("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] not visible",
3482                 isVisible("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"]"));
3483         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3484                 "div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-warningMessageItem not present",
3485                 isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-SectionsPage\"] .uif-warningMessageItem"));
3486         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3487                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] not visible", isVisible(
3488                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"]"));
3489         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3490                 "div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-warningMessageItem not present",
3491                 isElementPresent("div[data-messagesfor=\"Demo-ValidationLayout-Section1\"] .uif-warningMessageItem"));
3492         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3493                 "div[data-role=\"InputField\"] img[alt=\"Warning\"] not present", isElementPresent(
3494                 "div[data-role=\"InputField\"] img[alt=\"Warning\"]"));
3495         fireMouseOverEvent(By.xpath("//a[contains(.,'Field 1')]"));
3496         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3497                 ".uif-warningHighlight no present when //a[contains(.,'Field 1')] is moused over",
3498                 isElementPresent(".uif-warningHighlight"));
3499         waitAndClickByXpath("//a[contains(.,'Field 1')]");
3500         waitForElementVisible(".jquerybubblepopup-innerHtml", " after click on //a[contains(.,'Field 1')]");
3501         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3502                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems not visible", isVisible(
3503                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems"));
3504         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3505                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible",
3506                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3507         waitAndTypeByName("field1", "");
3508         fireEvent("field1", "blur");
3509         fireMouseOverEventByName("field1");
3510         waitForElementVisible(".jquerybubblepopup-innerHtml",
3511                 " not visible after typing nothing in name=field1 then firing blur and focus events");
3512         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3513                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible after typing nothing in name=field1 then firing blur and focus events",
3514                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3515         waitForElementVisible(".jquerybubblepopup-innerHtml> .uif-clientMessageItems",
3516                 " not visible after typing nothing in name=field1 then firing blur and focus events");
3517         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3518                 ".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field not visible after typing nothing in name=field1 then firing blur and focus events",
3519                 isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field"));
3520         waitAndTypeByName("field1", "b");
3521         fireEvent("field1", "blur");
3522         fireMouseOverEventByName("field1");
3523         waitForElementVisible(".jquerybubblepopup-innerHtml> .uif-serverMessageItems", "");
3524         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3525                 ".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field not visible after typing b in name=field1 then firing blur and focus events",
3526                 isVisible(".jquerybubblepopup-innerHtml > .uif-serverMessageItems .uif-warningMessageItem-field"));
3527         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(".jquerybubblepopup-innerHtml > .uif-clientMessageItems",
3528                 !isElementPresent(
3529                         ".jquerybubblepopup-innerHtml > .uif-clientMessageItems"));
3530         clearTextByName("field1");
3531         fireEvent("field1", "blur");
3532         fireMouseOverEventByName("field1");
3533         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3534                 ".uif-hasError is not present after typing nothing in name=field1 and then firing focus and blur events",
3535                 isElementPresent(".uif-hasError"));
3536         com.thoughtworks.selenium.SeleneseTestBase.assertTrue(
3537                 "img[src*=\"error.png\"] is not present after typing nothing in name=field1 and then firing focus and blur events",
3538                 isElementPresent("img[src*=\"error.png\"]"));
3539         passed();
3540     }
3541 
3542     
3543 
3544 
3545     protected void testViewHelp() throws Exception {
3546         
3547         fireMouseOverEventByXpath("//h1/span[@class='uif-headerText-span']");
3548         SeleneseTestBase.assertEquals("Sample text for view help", getText("td.jquerybubblepopup-innerHtml"));
3549 
3550         
3551         waitAndClickByXpath("//input[@alt='Help for Configuration Test View - Help']");
3552         Thread.sleep(5000);
3553         switchToWindow("Kuali Foundation");
3554         Thread.sleep(5000);
3555         switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
3556     }
3557 
3558     
3559 
3560 
3561     protected void testViewHelp2() throws Exception {
3562         
3563         if (isElementPresentByXpath("//td[@class='jquerybubblepopup-innerHtml']")) {
3564             SeleneseTestBase.assertFalse(driver.findElement(By.cssSelector("td.jquerybubblepopup-innerHtml")).isDisplayed());
3565         }
3566 
3567         
3568         fireMouseOverEventByXpath("//h1/span[@class='uif-headerText-span']");
3569         Thread.sleep(2000);
3570         SeleneseTestBase.assertTrue(isVisibleByXpath("//td[contains(text(),'View help')]"));
3571         assertPopUpWindowUrl(By.cssSelector("input[title=\"Help for Configuration Test View\"]"), "HelpWindow", "http://www.kuali.org/");
3572     }
3573 
3574     protected void testVerifyAddDeleteFiscalOfficerLegacy() throws Exception {
3575         selectFrameIframePortlet();
3576         checkForIncidentReport("testVerifyAddDeleteFiscalOfficerLegacy");
3577         waitAndTypeByName("document.documentHeader.documentDescription", ITUtil.createUniqueDtsPlusTwoRandomChars());
3578         waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number","1234567890");
3579         waitAndTypeByName("newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId", "2");
3580         waitAndClickByXpath("//button[@data-loadingmessage='Adding Line...']");
3581         waitForElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number");
3582         SeleneseTestBase.assertEquals("1234567890", getAttributeByName(
3583                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number", "value"));
3584         SeleneseTestBase.assertEquals("2", getAttributeByName(
3585                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].foId", "value"));
3586         waitAndClickByXpath("//button[@data-loadingmessage='Deleting Line...']");
3587         Thread.sleep(3000);
3588         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByName(
3589                 "document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number"));
3590         passed();
3591     }
3592 
3593     protected void testVerifyAddDeleteNoteLegacy() throws Exception {
3594         selectFrameIframePortlet();
3595         waitAndClick("div.tableborders.wrap.uif-boxLayoutVerticalItem.clearfix  span.uif-headerText-span > img.uif-disclosure-image");
3596         waitForElementPresent("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3597         waitAndClickByName("newCollectionLines['document.notes'].noteText");
3598         waitAndTypeByName("newCollectionLines['document.notes'].noteText", "Test note");
3599         waitAndClick("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3600 
3601         SeleneseTestBase.assertEquals("Test note", getTextByXpath("//pre"));
3602         waitAndClick("button[title='Delete a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
3603         SeleneseTestBase.assertEquals(Boolean.FALSE, (Boolean) isElementPresentByName("document.notes[0].noteText"));
3604         passed();
3605     }
3606 
3607     protected void testVerifyAdHocRecipientsLegacy() throws Exception {
3608         selectFrameIframePortlet();
3609         waitAndClickByLinkText("Fiscal Officer Accounts");
3610         assertElementPresentByXpath(
3611                 "//select[@name=\"newCollectionLines['document.adHocRoutePersons'].actionRequested\"]");
3612         assertElementPresentByXpath(
3613                 "//input[@name=\"newCollectionLines['document.adHocRoutePersons'].name\" and @type=\"text\"]");
3614         assertElementPresentByXpath(
3615                 "//select[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].actionRequested\"]");
3616         assertElementPresentByXpath(
3617                 "//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientNamespaceCode\" and @type='text']");
3618         assertElementPresentByXpath(
3619                 "//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientName\" and @type='text']");
3620         passed();
3621     }
3622 
3623     protected void testVerifyButtonsLegacy() throws Exception {
3624         selectFrameIframePortlet();
3625         assertElementPresentByXpath("//button[contains(.,'ubmit')]");
3626         assertElementPresentByXpath("//button[contains(.,'ave')]");
3627         assertElementPresentByXpath("//button[contains(.,'lanket approve')]");
3628         assertElementPresentByXpath("//button[contains(.,'lose')]");
3629         assertElementPresentByXpath("//a[contains(.,'ancel')]");
3630         passed();
3631     }
3632 
3633     protected void testVerifyConstraintText() throws Exception {
3634         selectFrameIframePortlet();
3635         SeleneseTestBase.assertEquals("* indicates required field", getText(
3636                 "div.uif-boxLayout.uif-horizontalBoxLayout.clearfix > span.uif-message.uif-requiredInstructionsMessage.uif-boxLayoutHorizontalItem"));
3637         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3638                 "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"));
3639         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3640                 "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"));
3641         SeleneseTestBase.assertEquals("Must not be more than 10 characters", getText(
3642                 "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"));
3643         passed();
3644     }
3645 
3646     protected void testVerifyEditedComponent(String docId, String componentName, String componentCode) throws Exception {
3647         selectFrameIframePortlet();
3648         waitAndTypeByName("name", componentName);
3649         waitAndClickSearch();
3650         isElementPresentByLinkText(componentName);
3651         waitAndClickByLinkText(componentName);
3652         waitForPageToLoad();
3653         Thread.sleep(2000);
3654         switchToWindow("Kuali :: Inquiry");
3655         Thread.sleep(2000);
3656         SeleneseTestBase.assertEquals(componentName, getTextByXpath("//div[@class='tab-container']/table//span[@id='name.div']").trim());
3657         SeleneseTestBase.assertEquals(componentCode, getTextByXpath("//div[@class='tab-container']/table//span[@id='code.div']").trim());
3658         waitAndClickCloseWindow();
3659         switchToWindow("null");
3660         List<String> parameterList=new ArrayList<String>();
3661     }
3662 
3663     protected void testVerifyDisclosures() throws Exception {
3664         selectFrameIframePortlet();
3665         assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
3666         assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
3667         assertElementPresentByXpath("//span[contains(text(),'Account Information')]");
3668         assertElementPresentByXpath("//span[contains(text(),'Fiscal Officer Accounts')]");
3669         assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
3670         assertElementPresentByXpath("//span[contains(text(),'Ad Hoc Recipients')]");
3671         assertElementPresentByXpath("//span[contains(text(),'Route Log')]");
3672         colapseExpandByXpath("//span[contains(text(),'Document Overview')]//img", "//label[contains(text(),'Organization Document Number')]");
3673         colapseExpandByXpath("//span[contains(text(),'Account Information')]//img","//label[contains(text(),'Travel Account Type Code')]");
3674         colapseExpandByXpath("//span[contains(text(),'Fiscal Officer Accounts')]//img","//a[contains(text(),'Lookup/Add Multiple Lines')]");
3675         expandColapseByXpath("//span[contains(text(),'Notes and Attachments')]//img","//label[contains(text(),'Note Text')]");
3676         expandColapseByXpath("//span[contains(text(),'Ad Hoc Recipients')]","//span[contains(text(),'Ad Hoc Group Requests')]");
3677 
3678         
3679         waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
3680         selectFrame("routeLogIFrame");
3681         waitIsVisibleByXpath("//img[@alt='refresh']");
3682 
3683         
3684         selectTopFrame();
3685         selectFrameIframePortlet();
3686         waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
3687         selectFrame("routeLogIFrame");
3688         waitNotVisibleByXpath("//img[@alt='refresh']");
3689         passed();
3690     }
3691 
3692     protected void testVerifyDocumentOverviewLegacy() throws Exception {
3693         selectFrameIframePortlet();
3694         assertTextPresent("Document Overview");
3695         assertElementPresentByXpath("//input[@name='document.documentHeader.documentDescription']");
3696         assertElementPresentByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']");
3697         assertElementPresentByXpath("//textarea[@name='document.documentHeader.explanation']");
3698         passed();
3699     }
3700 
3701     protected void testVerifyExpandCollapse() throws Exception {
3702         selectFrameIframePortlet();
3703         assertElementPresentByXpath("//button[contains(@class, 'uif-expandDisclosuresButton')]");
3704         assertElementPresentByXpath("//button[contains(@class, 'uif-collapseDisclosuresButton')]");
3705         passed();
3706     }
3707 
3708     protected void testVerifyFieldsLegacy() throws Exception {
3709         selectFrameIframePortlet();
3710         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.number' and @type='text' and @size=10 and @maxlength=10]");
3711         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.extension.accountTypeCode' and @type='text' and @size=2 and @maxlength=3]");
3712         assertElementPresentByXpath(
3713                 "//input[@name='document.newMaintainableObject.dataObject.subAccount' and @type='text' and @size=10 and @maxlength=10]");
3714         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent' and @type='text' and @size=6 and @maxlength=20]");
3715         assertElementPresentByXpath(
3716                 "//input[@name='document.newMaintainableObject.dataObject.foId' and @type='text' and @size=5 and @maxlength=10]");
3717         assertElementPresentByXpath(
3718                 "//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number\" and @type='text' and @size=10 and @maxlength=10]");
3719         assertElementPresentByXpath(
3720                 "//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId\" and @type='text' and @size=5 and @maxlength=10]");
3721         passed();
3722     }
3723 
3724     protected void testVerifyHeaderFieldsLegacy() throws Exception {
3725         selectFrameIframePortlet();
3726         assertElementPresentByXpath("//div[contains(@class, 'uif-documentNumber')]");
3727         assertElementPresentByXpath("//div[contains(@class, 'uif-documentInitiatorNetworkId')]");
3728         assertElementPresentByXpath("//div[contains(@class, 'uif-documentStatus')]");
3729         assertElementPresentByXpath("//div[contains(@class, 'uif-documentCreateDate')]");
3730         passed();
3731     }
3732 
3733     protected void testVerifyLookupAddMultipleLinesLegacy() throws Exception {
3734         selectFrameIframePortlet();
3735         assertElementPresentByXpath("//a[contains(text(),'Lookup/Add Multiple Lines')]");
3736         passed();
3737     }
3738 
3739     protected void testVerifyNotesAndAttachments() throws Exception {
3740         selectFrameIframePortlet();
3741         waitAndClickByXpath("//span[contains(text(),'Notes and Attachments')]");
3742         waitForElementPresentByXpath("//button[@title='Add a Note']");
3743         assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
3744         assertElementPresentByXpath("//textarea[@name=\"newCollectionLines['document.notes'].noteText\"]");
3745         assertElementPresentByXpath("//input[@name='attachmentFile']");
3746 
3747         
3748         passed();
3749     }
3750 
3751     protected void testVerifyQuickfinderIconsLegacy() throws Exception {
3752         selectFrameIframePortlet();
3753         assertTextPresent("Document Overview");
3754         assertElementPresentByXpath("//*[@id='quickfinder1']");
3755         assertElementPresentByXpath("//*[@id='quickfinder2']");
3756         assertElementPresentByXpath("//*[@id='quickfinder3']");
3757         assertElementPresentByXpath("//*[@id='quickfinder4_add']");
3758 
3759         
3760         passed();
3761     }
3762 
3763     protected void testVerifyRouteLog() throws Exception {
3764         selectFrameIframePortlet();
3765         waitAndClickByLinkText("Route Log");
3766         waitForElementPresent("//iframe[contains(@src,'RouteLog.do')]");
3767         passed();
3768     }
3769 
3770     protected void testVerifySave() throws Exception {
3771         selectFrameIframePortlet();
3772         waitAndTypeByName("document.documentHeader.documentDescription", "Test Document " + ITUtil.DTS);
3773         waitAndClickByName("document.newMaintainableObject.dataObject.number");
3774         waitAndTypeByName("document.newMaintainableObject.dataObject.number", "1234567890");
3775         waitAndTypeByName("document.newMaintainableObject.dataObject.extension.accountTypeCode", "EAT");
3776         waitAndTypeByName("document.newMaintainableObject.dataObject.subAccount", "a1");
3777         waitAndClick(
3778                 "button[data-loadingmessage='Saving...'].uif-action.uif-primaryActionButton.uif-boxLayoutHorizontalItem");
3779         Thread.sleep(2000);
3780 
3781         
3782         passed();
3783     }
3784 
3785     protected void testVerifySubsidizedPercentWatermarkLegacy() throws Exception {
3786         selectFrameIframePortlet();
3787 
3788         
3789         
3790         assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent']");
3791         passed();
3792     }
3793 
3794     protected void testWorkFlowDocTypeBlanketApprove() throws Exception {
3795         selectFrameIframePortlet();
3796         waitAndCreateNew();
3797         String docId = waitForDocId();
3798         assertBlanketApproveButtonsPresent();
3799         String dts = ITUtil.createUniqueDtsPlusTwoRandomCharsNot9Digits();
3800         waitAndTypeByXpath(DOC_DESCRIPTION_XPATH, "Validation Test Document Type " + dts);
3801         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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
3802                 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
3803         waitAndClickByXpath(parentDocType);
3804         waitAndClickSearch();
3805         waitAndClickReturnValue();
3806         String docTypeName = "DocType" + ITUtil.DTS;
3807         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
3808         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']",
3809                 "${kr.url}/maintenance.do?methodToCall=docHandler");
3810         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']",
3811                 "Workflow Maintenance Document Type Document " + dts);
3812         waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']",
3813                 "default.htm?turl=WordDocuments%2Fdocumenttype.htm");
3814         blanketApproveTest();
3815         assertDocFinal(docId);
3816     }
3817 
3818     protected void uncheck(By by) throws InterruptedException {
3819         WebElement element = driver.findElement(by);
3820         if (element.isSelected()) {
3821             element.click();
3822         }
3823     }
3824 
3825     protected void uncheckByName(String name) throws InterruptedException {
3826         uncheck(By.name(name));
3827     }
3828 
3829     protected void uncheckByXpath(String locator) throws InterruptedException {
3830         uncheck(By.xpath(locator));
3831     }
3832 
3833     protected boolean validateErrorImage(boolean validateVisible) throws Exception {
3834         Thread.sleep(500);
3835         boolean valid = false;
3836 
3837         for (int second = 0; second < 5; second++) {
3838             if ((valid = validateErrorImage(validateVisible, second, ARIA_INVALID_XPATH)) == true) {
3839                 break;
3840             }
3841         }
3842 
3843         if (validateVisible) {
3844             SeleneseTestBase.assertTrue("valid = " + valid + " when validateVisible is " + validateVisible, valid);
3845         } else {
3846             SeleneseTestBase.assertFalse("valid = " + valid + " when validateVisible is " + validateVisible, valid);
3847         }
3848 
3849         return valid;
3850     }
3851 
3852     private boolean validateErrorImage(boolean validateVisible, int second, String xpath) throws InterruptedException {
3853         try {
3854             if (validateVisible) {
3855                 if (isElementPresentByXpath(xpath) && isVisibleByXpath(xpath)) {
3856                     return true;
3857                 }
3858             } else {
3859                 if (!isElementPresentByXpath(xpath) || !isVisibleByXpath(xpath)) {
3860                     return true;
3861                 }
3862             }
3863         } catch (Exception e) {
3864             
3865         }
3866         Thread.sleep(1000);
3867         return false;
3868     }
3869 
3870     protected void verifyRichMessagesValidationBasicFunctionality() throws Exception
3871     {
3872         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field1']"));
3873         SeleneseTestBase.assertTrue(isElementPresentByXpath("//a[contains(text(), 'Kuali')]"));
3874         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='checkbox' and @name='field2']"));
3875         Thread.sleep(3000);
3876     }
3877 
3878     protected void verifyRichMessagesValidationAdvancedFunctionality() throws Exception
3879     {
3880         
3881         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@style='color: green;']"));
3882         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@style='color: blue;']"));
3883 
3884         
3885         SeleneseTestBase.assertTrue(isElementPresentByXpath("//span[@class='fl-text-underline fl-text-larger']"));
3886 
3887         
3888         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field3']"));
3889         SeleneseTestBase.assertTrue(isElementPresentByXpath("//select[@name='field4']"));
3890         SeleneseTestBase.assertTrue(isElementPresentByXpath("//button[contains(text(), 'Action Button')]"));
3891 
3892         
3893         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/span[contains(., 'Color')]"));
3894         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/i/b[contains(., 'Html')]"));
3895         SeleneseTestBase.assertTrue(isElementPresentByXpath("//label[contains(., 'Label With')]/img[@class='uif-image inlineBlock']"));
3896         Thread.sleep(3000);
3897     }
3898 
3899     protected void verifyRichMessagesValidationLettersNumbersValidation() throws Exception
3900     {
3901         
3902         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field5']"));
3903         waitAndTypeByXpath(
3904                 "//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']",
3905                 "abc");
3906         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3907         clearTextByXpath(
3908                 "//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']");
3909         waitAndTypeByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock']/input[@name= 'field5']","abc12");
3910         waitAndTypeByXpath("//input[@name= 'field6']", "");
3911         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3912         Thread.sleep(3000);
3913         clearTextByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']/input[@name= 'field5']");
3914         waitAndTypeByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']/input[@name= 'field5']","abc");
3915         waitAndTypeByXpath("//input[@name= 'field6']", "");
3916 
3917         
3918         waitAndTypeByXpath("//input[@name= 'field6']", "123");
3919         SeleneseTestBase.assertFalse(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3920         clearTextByXpath("//input[@name= 'field6']");
3921         waitAndTypeByXpath("//input[@name= 'field6']", "123ab");
3922         fireEvent("field6", "blur");
3923         Thread.sleep(5000);
3924         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-field uif-inputField uif-inputField-labelTop inlineBlock uif-hasError']"));
3925         Thread.sleep(3000);
3926     }
3927 
3928     protected void verifyRichMessagesValidationRadioAndCheckBoxGroupFunctionality() throws Exception
3929     {
3930         
3931         SeleneseTestBase.assertTrue(isElementPresentByXpath("//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='1']"));
3932         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3933                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='2']"));
3934         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3935                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='3']"));
3936         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3937                 "//fieldset[@class='uif-verticalRadioFieldset']/span/input[@type='radio' and @name='field24' and @value='4']"));
3938 
3939         
3940         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3941                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='1']"));
3942         SeleneseTestBase.assertTrue(isElementPresentByXpath("//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='2']"));
3943         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3944                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/input[@type='checkbox' and @name='field115' and @value='3']"));
3945         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3946                 "//fieldset[@class='uif-verticalCheckboxesFieldset']/span/label/div/select[@name='field4']"));
3947 
3948         
3949         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='checkbox' and @name='bField1']"));
3950         SeleneseTestBase.assertTrue(isElementPresentByXpath("//input[@type='text' and @name='field103']"));
3951     }
3952 
3953     protected void verifyRichMessagesValidationLinkDeclarationsFunctionality() throws Exception
3954     {
3955         
3956         waitAndClickByXpath("//div[contains(., 'Testing link tag')]/a");
3957         Thread.sleep(9000);
3958         switchToWindow("Open Source Software | www.kuali.org");
3959         switchToWindow(RICH_MESSAGES_WINDOW_TITLE);
3960 
3961         
3962         waitAndClickByXpath("//div[contains(., 'Testing methodToCall action')]/a");
3963         Thread.sleep(3000);
3964         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3965                 "//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3966         SeleneseTestBase.assertTrue(isElementPresentByXpath(
3967                 "//div[@id='Demo-AdvancedMessagesSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3968         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-RadioCheckboxMessageSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3969 
3970         
3971         waitAndClickByXpath("//div[contains(., 'Testing methodToCall action (no client validation check)')]/a");
3972         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3973         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages']"));
3974         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages uif-pageValidationMessages-error']"));
3975         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-AdvancedMessagesSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3976         SeleneseTestBase.assertTrue(isElementPresentByXpath("//div[@id='Demo-RadioCheckboxMessageSection']/div[@class='uif-validationMessages uif-groupValidationMessages uif-pageValidationMessages-error']"));
3977         Thread.sleep(3000);
3978     }
3979 
3980     
3981 
3982 
3983 
3984 
3985     protected void waitAndClickAdministration(Failable failable) throws InterruptedException {
3986         waitAndClickByLinkText(ADMINISTRATION_LINK_TEXT, failable);
3987     }
3988 
3989     protected void waitAndCancelConfirmation() throws InterruptedException {
3990         waitAndClickCancel();
3991         waitAndClickByName("methodToCall.processAnswer.button0");
3992     }
3993 
3994     protected void waitAndClick(By by) throws InterruptedException {
3995         jiraAwareWaitAndClick(by, "");
3996     }
3997 
3998     protected void waitAndClick(By by, Failable failable) throws InterruptedException {
3999         jiraAwareWaitAndClick(by, "", failable);
4000     }
4001 
4002     protected void waitAndClick(String locator, String message) throws InterruptedException {
4003         jiraAwareWaitAndClick(By.cssSelector(locator), message);
4004     }
4005 
4006     protected void waitAndClickById(String id) throws InterruptedException {
4007         jiraAwareWaitAndClick(By.id(id), "");
4008     }
4009     protected void waitAndClickById(String id, String message) throws InterruptedException {
4010         jiraAwareWaitAndClick(By.id(id), message);
4011     }
4012 
4013     protected void waitAndClickButtonByText(String buttonText) throws InterruptedException {
4014         waitAndClickByXpath("//button[contains(text(), '" + buttonText + "')]");
4015     }
4016 
4017     protected void waitAndClickByLinkText(String text) throws InterruptedException {
4018         jiraAwareWaitAndClick(By.linkText(text), "");
4019     }
4020 
4021     protected void waitAndClickByLinkText(String text, String message) throws InterruptedException {
4022         jiraAwareWaitAndClick(By.linkText(text), message);
4023     }
4024 
4025     protected void waitAndClickByLinkText(String text, Failable failable) throws InterruptedException {
4026         jiraAwareWaitAndClick(By.linkText(text), "", failable);
4027     }
4028 
4029     protected void waitAndClickByLinkText(String text, String message, Failable failable) throws InterruptedException {
4030         jiraAwareWaitAndClick(By.linkText(text), message, failable);
4031     }
4032 
4033     protected void waitAndClickByName(String name) throws InterruptedException {
4034         jiraAwareWaitAndClick(By.name(name), "");
4035     }
4036 
4037     protected void waitAndClickByXpath(String xpath) throws InterruptedException {
4038         waitAndClick(By.xpath(xpath));
4039     }
4040 
4041     protected void waitAndClickByXpath(String xpath, Failable failable) throws InterruptedException {
4042         waitAndClick(By.xpath(xpath), failable);
4043     }
4044 
4045     protected void waitAndClickByName(String name, String message) throws InterruptedException {
4046         jiraAwareWaitAndClick(By.name(name), message);
4047     }
4048 
4049     protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException {
4050         jiraAwareWaitAndClick(By.xpath(xpath), message);
4051     }
4052 
4053     
4054 
4055 
4056 
4057     protected void waitAndClickCancel() throws InterruptedException {
4058         waitAndClickByName(CANCEL_NAME);
4059     }
4060 
4061     
4062 
4063 
4064 
4065     protected void waitAndClickCloseWindow() throws InterruptedException {
4066         waitAndClickByXpath(CLOSE_WINDOW_XPATH_TITLE);
4067     }
4068 
4069     
4070 
4071 
4072 
4073     protected void waitAndClickCopy() throws InterruptedException {
4074         waitAndClickByLinkText(COPY_LINK_TEXT);
4075     }
4076 
4077     
4078 
4079 
4080 
4081     protected void waitAndClickDocSearch() throws InterruptedException {
4082         waitAndClickByXpath(DOC_SEARCH_XPATH);
4083     }
4084 
4085     
4086 
4087 
4088 
4089     protected void waitAndClickDocSearchTitle() throws InterruptedException {
4090         waitAndClickByXpath(DOC_SEARCH_XPATH_TITLE);
4091     }
4092 
4093     
4094 
4095 
4096 
4097     protected void waitAndClickLogout() throws InterruptedException {
4098         waitAndClickLogout(this);
4099     }
4100 
4101     
4102 
4103 
4104 
4105 
4106     protected void waitAndClickLogout(Failable failable) throws InterruptedException {
4107         selectTopFrame();
4108         waitAndClickByXpath(LOGOUT_XPATH, failable);
4109     }
4110 
4111     
4112 
4113 
4114 
4115 
4116     protected void waitAndClickMainMenu(Failable failable) throws InterruptedException {
4117         waitAndClickByLinkText(MAIN_MENU_LINK_TEXT, failable);
4118     }
4119 
4120     
4121 
4122 
4123 
4124     protected void waitAndClickSave() throws InterruptedException {
4125         waitAndClickByXpath(SAVE_XPATH);
4126     }
4127 
4128     
4129 
4130 
4131 
4132     private void waitAndClickSearch() throws InterruptedException {
4133         waitAndClickByXpath(SEARCH_XPATH);
4134     }
4135 
4136     
4137 
4138 
4139 
4140     protected void waitAndClickSubmit() throws InterruptedException {
4141         waitAndClickByXpath(SUBMIT_XPATH);
4142     }
4143 
4144 
4145     
4146 
4147 
4148 
4149 
4150     protected void waitAndClickXMLIngester(Failable failable) throws InterruptedException {
4151         waitAndClickByLinkText(XML_INGESTER_LINK_TEXT, failable);
4152     }
4153 
4154     protected void waitAndType(By by, String text) throws InterruptedException {
4155         waitAndType(by, text,  "");
4156     }
4157 
4158     protected void waitAndType(By by, String text, String message) throws InterruptedException {
4159         try {
4160             jiraAwareWaitFor(by, "");
4161             WebElement element = driver.findElement(by);
4162             WebDriverUtil.highlightElement(driver, driver.findElement(by));
4163             (driver.findElement(by)).sendKeys(text);
4164         } catch (Exception e) {
4165             JiraAwareFailureUtil.failOnMatchedJira(by.toString(), this);
4166             failableFail(e.getMessage() + " " + by.toString() + "  unable to type text '" + text + "'  " + message
4167                     + " current url " + driver.getCurrentUrl()
4168                     + "\n" + ITUtil.deLinespace(driver.getPageSource()));
4169         }
4170     }
4171 
4172     protected void waitAndType(String selector, String text) throws InterruptedException {
4173         waitAndType(By.cssSelector(selector), text);
4174     }
4175 
4176     protected void waitAndTypeById(String id, String text) throws InterruptedException {
4177         waitAndType(By.id(id), text);
4178     }
4179 
4180     protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException {
4181         waitAndType(By.xpath(locator), text);
4182     }
4183 
4184     protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException {
4185         waitAndType(By.xpath(locator), text, message);
4186     }
4187 
4188     protected void waitAndTypeByName(String name, String text) throws InterruptedException {
4189         waitAndType(By.name(name), text);
4190     }
4191 
4192     protected void waitAndCreateNew() throws InterruptedException {
4193         selectFrameIframePortlet();
4194         try {
4195             jGrowl("Create New");
4196             waitAndClickCreateNew(); 
4197         } catch (Exception e) {
4198             System.out.println("waitAndClickByXpath(\"//img[@alt='create new']\") failed trying title method with " + e.getMessage());
4199             waitAndClickByXpath("//a[@title='Create a new record']");
4200         }
4201     }
4202 
4203     
4204 
4205 
4206 
4207     protected void waitAndClickCreateNew() throws InterruptedException {
4208         waitAndClickByXpath(CREATE_NEW_XPATH);
4209     }
4210 
4211     protected void waitAndClickEdit() throws InterruptedException {
4212         waitAndClickByLinkText(EDIT_LINK_TEXT);
4213     }
4214 
4215     protected void waitAndClickReturnValue() throws InterruptedException {
4216         waitAndClickByLinkText(RETURN_VALUE_LINK_TEXT);
4217     }
4218 
4219     protected void waitAndClickSearch2() throws InterruptedException {
4220         waitAndClickByXpath(SEARCH_XPATH_2);
4221     }
4222 
4223     protected void waitAndClickSearch3() throws InterruptedException {
4224         waitAndClickByXpath(SEARCH_XPATH_3);
4225     }
4226 
4227     protected String waitForDocId() throws InterruptedException {
4228         checkForDocError();
4229         waitForElementPresentByXpath(DOC_ID_XPATH);
4230 
4231         return driver.findElement(By.xpath(DOC_ID_XPATH)).getText();
4232     }
4233 
4234     protected void waitForElementPresent(By by) throws InterruptedException {
4235         jiraAwareWaitFor(by, "");
4236     }
4237 
4238     protected void waitForElementPresent(String locator) throws InterruptedException {
4239         jiraAwareWaitFor(By.cssSelector(locator), "");
4240     }
4241 
4242     protected void waitForElementPresentByClassName(String name) throws InterruptedException {
4243         jiraAwareWaitFor(By.className(name), "");
4244     }
4245 
4246     protected void waitForElementPresentByClassName(String name, String message) throws InterruptedException {
4247         jiraAwareWaitFor(By.className(name), message);
4248     }
4249 
4250     protected void waitForElementsPresentByClassName(String name, String message) throws InterruptedException {
4251         jiraAwareWaitFors(By.className(name), message);
4252     }
4253 
4254     protected void waitForElementPresentById(String id) throws InterruptedException {
4255         jiraAwareWaitFor(By.id(id), "");
4256     }
4257 
4258     protected void waitForElementPresentById(String id, String message) throws InterruptedException {
4259         jiraAwareWaitFor(By.id(id), message);
4260     }
4261 
4262     protected void waitForElementPresentByName(String name) throws InterruptedException {
4263         jiraAwareWaitFor(By.name(name), "");
4264     }
4265 
4266     protected void waitForElementPresentByXpath(String locator) throws InterruptedException {
4267         jiraAwareWaitFor(By.xpath(locator), "");
4268     }
4269 
4270     protected void waitForElementsPresentByXpath(String xpathLocator) throws InterruptedException {
4271         jiraAwareWaitFors(By.xpath(xpathLocator), "");
4272     }
4273 
4274     protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
4275         waitForTitleToEqualKualiPortalIndex("");
4276     }
4277 
4278     protected void waitIsVisible(By by) throws InterruptedException {
4279         driver.manage().timeouts().implicitlyWait(waitSeconds, TimeUnit.SECONDS);
4280         isVisible(by);
4281         driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
4282 
4283 
4284 
4285 
4286 
4287 
4288 
4289 
4290 
4291 
4292     }
4293 
4294     protected void waitIsVisible(By by, String message) throws InterruptedException {
4295         for (int second = 0;; second++) {
4296             if (second >= waitSeconds) {
4297                 failableFail(TIMEOUT_MESSAGE + " " + by.toString() + " " + message);
4298             }
4299             if (isVisible(by)) {
4300                 break;
4301             }
4302             Thread.sleep(1000);
4303         }
4304     }
4305 
4306     protected boolean waitAreAnyVisible(By[] bys) throws InterruptedException {
4307         if (bys == null || bys.length == 0 ) {
4308             return false;
4309         }
4310 
4311         for (int second = 0; second < waitSeconds; second++) {
4312 
4313             if (isVisible(bys)) {
4314                 return true;
4315             }
4316 
4317             Thread.sleep(1000);
4318         }
4319 
4320         return false;
4321     }
4322 
4323     protected boolean isVisible(By[] bys) {
4324         if (bys == null || bys.length == 0 ) {
4325             return false;
4326         }
4327 
4328         for (int i = 0, s = bys.length; i < s; i++) {
4329 
4330             try {
4331 
4332                 if (isVisible(bys[i])) {
4333                     return true;
4334                 }
4335 
4336             } catch (NoSuchElementException nsee) {
4337                 
4338             }
4339 
4340         }
4341 
4342         return false;
4343     }
4344 
4345     
4346 
4347 
4348 
4349 
4350 
4351     protected void waitForElementVisible(String elementLocator, String message) throws InterruptedException {
4352         boolean failed = false;
4353 
4354         for (int second = 0;; second++) {
4355             if (second >= waitSeconds)
4356                 failed = true;
4357             try {
4358                 if (failed || (driver.findElements(By.cssSelector(elementLocator))).size() > 0)
4359                     break;
4360             } catch (Exception e) {}
4361             Thread.sleep(1000);
4362         }
4363 
4364         checkForIncidentReport(elementLocator); 
4365 
4366         if (failed)
4367             failableFail("timeout of " + waitSeconds + " seconds waiting for " + elementLocator + " " + message + " " + driver.getCurrentUrl());
4368     }
4369 
4370     protected void waitIsVisible(String locator) throws InterruptedException {
4371         waitIsVisible(By.cssSelector(locator));
4372     }
4373 
4374     protected void waitIsVisibleByXpath(String locator) throws InterruptedException {
4375         waitIsVisible(By.xpath(locator));
4376     }
4377 
4378     protected void waitIsVisibleByXpath(String locator, String message) throws InterruptedException {
4379         waitIsVisible(By.xpath(locator), message);
4380     }
4381 
4382     protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
4383         Thread.sleep(2000);
4384         
4385         
4386         
4387         
4388         
4389         
4390         
4391         
4392 
4393         
4394         
4395     }
4396 
4397     protected void waitAndClick(String locator) throws InterruptedException {
4398         waitAndClick(locator, "");
4399     }
4400 
4401     protected void waitForPageToLoad() {
4402         
4403     }
4404 
4405     protected void waitFor(By by) throws InterruptedException {
4406         jiraAwareWaitFor(by, "");
4407     }
4408 
4409     
4410 
4411 
4412 
4413 
4414 
4415 
4416 
4417 
4418     protected void waitFor(By by, String message) throws InterruptedException {
4419         WebDriverUtil.waitFor(this.driver, this.waitSeconds, by, message);
4420     }
4421 
4422     
4423 
4424 
4425 
4426     protected void waitAndClickKRAD() throws InterruptedException {
4427         waitAndClickByLinkText(KRAD_XPATH);
4428     }
4429 
4430     protected void waitNotVisible(By by) throws InterruptedException {
4431         for (int second = 0;; second++) {
4432             if (second >= waitSeconds) {
4433                 failableFail(TIMEOUT_MESSAGE);
4434             }
4435             if (!isVisible(by)) {
4436                 break;
4437             }
4438             Thread.sleep(1000);
4439         }
4440     }
4441 
4442     protected void waitNotVisibleByXpath(String locator) throws InterruptedException {
4443         waitNotVisible(By.xpath(locator));
4444     }
4445 
4446     
4447 
4448 
4449 
4450 
4451     protected boolean isKrad(){
4452         return (ITUtil.REMOTE_UIF_KRAD.equalsIgnoreCase(getUiFramework()));
4453     }
4454 
4455     protected WebElement getElementByDataAttributeValue(String dataAttributeName, String value){
4456         return driver.findElement(By.cssSelector("[data-" + dataAttributeName + "='" + value +"']"));
4457     }
4458 
4459     protected WebElement getElementByDataAttribute(String dataAttributeName){
4460         return driver.findElement(By.cssSelector("[data-" + dataAttributeName + "]"));
4461     }
4462 
4463     protected WebElement getElementByAttributeValue(String attributeName, String value){
4464         return driver.findElement(By.cssSelector("[" + attributeName + "='" + value +"']"));
4465     }
4466 
4467     protected WebElement getElementByAttribute(String attributeName){
4468         return driver.findElement(By.cssSelector("[" + attributeName + "]"));
4469     }
4470 
4471     
4472 
4473 
4474 
4475 
4476 
4477 
4478 
4479 
4480     protected String getForLabelText(String forElementId) {
4481         return driver.findElement(By.cssSelector("label[for=" + forElementId + "]")).getText();
4482     }
4483 
4484     
4485 
4486 
4487 
4488 
4489     public String getUiFramework() {
4490         return uiFramework;
4491     }
4492 
4493     
4494 
4495 
4496     public void setUiFramework(String uiFramework) {
4497         this.uiFramework = uiFramework;
4498     }
4499 }