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