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