1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package edu.samplu.common;
17
18 import org.apache.commons.lang.RandomStringUtils;
19 import static com.thoughtworks.selenium.SeleneseTestBase.fail;
20 import static org.junit.Assert.assertEquals;
21
22 import java.io.BufferedReader;
23 import java.io.InputStreamReader;
24 import java.net.HttpURLConnection;
25 import java.net.URL;
26 import java.util.Calendar;
27 import java.util.List;
28 import java.util.Set;
29 import java.util.concurrent.TimeUnit;
30 import org.apache.commons.lang.RandomStringUtils;
31 import org.junit.After;
32 import org.junit.Assert;
33 import org.junit.Before;
34 import org.junit.BeforeClass;
35 import org.junit.Rule;
36 import org.junit.rules.TestName;
37 import org.openqa.selenium.By;
38 import org.openqa.selenium.JavascriptExecutor;
39 import org.openqa.selenium.NoSuchFrameException;
40 import org.openqa.selenium.WebDriver;
41 import org.openqa.selenium.WebElement;
42 import org.openqa.selenium.chrome.ChromeDriverService;
43 import org.openqa.selenium.interactions.Actions;
44 import org.openqa.selenium.remote.RemoteWebDriver;
45 import org.openqa.selenium.support.ui.Select;
46 import java.io.BufferedReader;
47 import java.io.InputStreamReader;
48 import java.net.HttpURLConnection;
49 import java.net.URL;
50 import java.util.Calendar;
51 import java.util.Date;
52 import java.util.List;
53 import java.util.Set;
54 import java.util.concurrent.TimeUnit;
55 import static com.thoughtworks.selenium.SeleneseTestBase.fail;
56 import static org.junit.Assert.assertEquals;
57 import org.openqa.selenium.support.ui.Select;
58
59
60
61
62
63
64 public abstract class WebDriverLegacyITBase {
65
66 public static final int DEFAULT_WAIT_SEC = 60;
67 public static final String REMOTE_PUBLIC_USERPOOL_PROPERTY = "remote.public.userpool";
68 public static final String REMOTE_PUBLIC_USER_PROPERTY = "remote.public.user";
69
70 public abstract String getTestUrl();
71
72 protected WebDriver driver;
73 protected String user = "admin";
74 protected boolean passed = false;
75 static ChromeDriverService chromeDriverService;
76
77 public @Rule
78 TestName testName = new TestName();
79
80 String sessionId = null;
81
82 public String getSessionId() {
83 return sessionId;
84 }
85
86 @BeforeClass
87 public static void createAndStartService() throws Exception {
88 chromeDriverService = WebDriverUtil.createAndStartService();
89 if (chromeDriverService != null)
90 chromeDriverService.start();
91 }
92
93
94
95
96
97
98 @Before
99 public void setUp() throws Exception {
100
101 try {
102 if (System.getProperty(REMOTE_PUBLIC_USER_PROPERTY) != null) {
103 user = System.getProperty(REMOTE_PUBLIC_USER_PROPERTY);
104 } else if (System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) != null) {
105 String userResponse = getHTML(ITUtil.prettyHttp(System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY)
106 + "?test=" + this.toString().trim()));
107 user = userResponse.substring(userResponse.lastIndexOf(":") + 2, userResponse.lastIndexOf("\""));
108 }
109 driver = WebDriverUtil.setUp(getUserName(), ITUtil.getBaseUrlString() + getTestUrl(), getClass()
110 .getSimpleName(), testName);
111 this.sessionId = ((RemoteWebDriver) driver).getSessionId().toString();
112 } catch (Exception e) {
113 fail("Exception in setUp " + e.getMessage());
114 e.printStackTrace();
115 }
116 ITUtil.login(driver, user);
117 }
118
119 @After
120 public void tearDown() throws Exception {
121 try {
122
123
124
125 if (System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) != null) {
126 getHTML(ITUtil.prettyHttp(System.getProperty(REMOTE_PUBLIC_USERPOOL_PROPERTY) + "?test="
127 + this.toString() + "&user=" + user));
128 }
129 } catch (Exception e) {
130 System.out.println("Exception in tearDown " + e.getMessage());
131 e.printStackTrace();
132 } finally {
133 if (driver != null) {
134 if (ITUtil.dontTearDownPropertyNotSet()) {
135 driver.close();
136 driver.quit();
137 }
138 } else {
139 System.out
140 .println("WebDriver is null, if using saucelabs, has sauceleabs been uncommented in WebDriverUtil.java? If using a remote hub did you include the port?");
141 }
142 }
143 }
144
145 protected String getHTML(String urlToRead) {
146 URL url;
147 HttpURLConnection conn;
148 BufferedReader rd;
149 String line;
150 String result = "";
151 try {
152 url = new URL(urlToRead);
153 conn = (HttpURLConnection) url.openConnection();
154 conn.setRequestMethod("GET");
155 rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
156 while ((line = rd.readLine()) != null) {
157 result += line;
158 }
159 rd.close();
160 } catch (Exception e) {
161 e.printStackTrace();
162 }
163 return result;
164 }
165
166 protected void passed() {
167 passed = true;
168 }
169
170 protected void assertElementPresentByName(String name) {
171 driver.findElement(By.name(name));
172 }
173
174 protected void assertElementPresentByName(String name, String message) {
175 try {
176 driver.findElement(By.name(name));
177 } catch (Exception e) {
178 Assert.fail(name + " not present " + message);
179 }
180 }
181
182 protected void assertElementPresentByXpath(String locator) {
183 driver.findElement(By.xpath(locator));
184 }
185
186 protected void assertElementPresentByXpath(String locator, String message) {
187 try {
188 driver.findElement(By.xpath(locator));
189 } catch (Exception e) {
190 Assert.fail(locator + " not present " + message);
191 }
192 }
193
194 protected void assertElementPresentByLinkText(String linkText) {
195 driver.findElement(By.linkText(linkText));
196 }
197
198 protected void assertElementPresent(String locator) {
199 driver.findElement(By.cssSelector(locator));
200 }
201
202 protected void assertTextPresent(String text) {
203 assertTextPresent(text, "");
204 }
205
206 protected void assertTextPresent(String text, String message) {
207 if (!driver.getPageSource().contains(text)) {
208 Assert.fail(text + " not present " + message);
209 }
210 }
211
212 protected void blanketApproveTest() throws InterruptedException {
213 ITUtil.checkForIncidentReport(driver.getPageSource(), "methodToCall.blanketApprove", "");
214 waitAndClickByName("methodToCall.blanketApprove", "No blanket approve button does the user " + getUserName()
215 + " have permission?");
216 Thread.sleep(2000);
217
218 if (driver.findElements(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).size() > 0) {
219 String errorText = driver.findElement(By.xpath(ITUtil.DIV_ERROR_LOCATOR)).getText();
220 if (errorText != null && errorText.contains("error(s) found on page.")) {
221 errorText = ITUtil.blanketApprovalCleanUpErrorText(errorText);
222 if (driver.findElements(By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).size() > 0) {
223 errorText = ITUtil.blanketApprovalCleanUpErrorText(driver.findElement(
224 By.xpath(ITUtil.DIV_EXCOL_LOCATOR)).getText());
225 }
226
227
228
229
230 Assert.fail(errorText);
231 }
232 }
233 ITUtil.checkForIncidentReport(driver.getPageSource(), "//img[@alt='doc search']", "Blanket Approve failure");
234 waitAndClickByXpath("//img[@alt='doc search']");
235 assertEquals("Kuali Portal Index", driver.getTitle());
236 selectFrame("iframeportlet");
237 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
238 }
239
240 protected void checkForIncidentReport() {
241 checkForIncidentReport("", "");
242 }
243
244 protected void checkForIncidentReport(String locator) {
245 checkForIncidentReport(locator, "");
246 }
247
248 protected void checkForIncidentReport(String locator, String message) {
249 WebDriverUtil.checkForIncidentReport(driver, locator, message);
250 }
251
252 protected void clearText(By by) throws InterruptedException {
253 driver.findElement(by).clear();
254 }
255
256 protected void clearText(String selector) throws InterruptedException {
257 clearText(By.cssSelector(selector));
258 }
259
260 protected void clearTextByName(String name) throws InterruptedException {
261 clearText(By.name(name));
262 }
263
264 protected void clearTextByXpath(String locator) throws InterruptedException {
265 clearText(By.xpath(locator));
266 }
267
268 protected String getAttribute(By by, String attribute) throws InterruptedException {
269 waitFor(by);
270 return driver.findElement(by).getAttribute(attribute);
271 }
272
273
274
275
276
277
278
279 protected String getAttributeByName(String name, String attribute) throws InterruptedException {
280 return getAttribute(By.name(name), attribute);
281 }
282
283
284
285
286
287
288
289 protected String getAttributeByXpath(String locator, String attribute) throws InterruptedException {
290 return getAttribute(By.xpath(locator), attribute);
291 }
292
293 protected String getBaseUrlString() {
294 return ITUtil.getBaseUrlString();
295 }
296
297 protected String getText(By by) throws InterruptedException {
298 return driver.findElement(by).getText();
299 }
300
301 protected String getTextByName(String name) throws InterruptedException {
302 return getText(By.name(name));
303 }
304
305 protected String getText(String locator) throws InterruptedException {
306 return getText(By.cssSelector(locator));
307 }
308
309 protected String getTextByXpath(String locator) throws InterruptedException {
310 return getText(By.xpath(locator));
311 }
312
313 protected String getTitle() {
314 return driver.getTitle();
315 }
316
317
318
319
320
321 public String getUserName() {
322 return user;
323 }
324
325
326
327
328
329 protected void gotoNestedFrame() {
330 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
331 driver.switchTo().defaultContent();
332 if (driver.findElements(By.xpath("//iframe")).size() > 0) {
333 WebElement containerFrame = driver.findElement(By.xpath("//iframe"));
334 driver.switchTo().frame(containerFrame);
335 }
336 if (driver.findElements(By.xpath("//iframe")).size() > 0) {
337 WebElement contentFrame = driver.findElement(By.xpath("//iframe"));
338 driver.switchTo().frame(contentFrame);
339 }
340 driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_SEC, TimeUnit.SECONDS);
341 }
342
343 protected boolean isElementPresent(By by) {
344 return (driver.findElements(by)).size() > 0;
345 }
346
347 protected boolean isElementPresent(String locator) {
348 return (driver.findElements(By.cssSelector(locator))).size() > 0;
349 }
350
351 protected boolean isElementPresentByName(String name) {
352 return isElementPresent(By.name(name));
353 }
354
355 protected boolean isElementPresentByXpath(String locator) {
356 return isElementPresent(By.xpath(locator));
357 }
358
359 protected boolean isElementPresentByLinkText(String locator) {
360 return isElementPresent(By.linkText(locator));
361 }
362
363 protected void open(String url) {
364 driver.get(url);
365 }
366
367 protected void selectFrame(String locator) {
368 if ("iframeportlet".equals(locator)) {
369 gotoNestedFrame();
370 } else {
371 try {
372 driver.switchTo().frame(locator);
373 } catch (NoSuchFrameException nsfe) {
374
375 }
376 }
377 }
378
379 protected void selectTopFrame() {
380 driver.switchTo().defaultContent();
381 }
382
383 protected void selectWindow(String locator) {
384 driver.switchTo().window(locator);
385 }
386
387 protected void close() {
388 driver.close();
389 }
390
391 protected void testCancelConfirmation() throws InterruptedException {
392 waitAndCancelConfirmation();
393 passed();
394 }
395
396 protected void testCreateNewSearchReturnValueCancelConfirmation() throws InterruptedException, Exception {
397 selectFrame("iframeportlet");
398 waitAndCreateNew();
399 waitAndSearch();
400 waitAndReturnValue();
401 waitAndCancelConfirmation();
402 passed();
403 }
404
405 protected void testSearchEditCancel() throws InterruptedException {
406 selectFrame("iframeportlet");
407 waitAndSearch();
408 waitAndEdit();
409 testCancelConfirmation();
410 }
411
412 protected void testVerifyAddDeleteFiscalOfficerLegacy() throws Exception {
413 selectFrame("iframeportlet");
414 waitAndTypeByName("document.documentHeader.documentDescription", ITUtil.DTS_TWO);
415 waitAndTypeByName(
416 "newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number",
417 "1234567890");
418 waitAndTypeByName(
419 "newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId", "2");
420
421 waitAndClickByXpath("//button[@data-loadingmessage='Adding Line...']");
422
423 waitForElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number");
424
425 assertEquals(
426 "1234567890",
427 getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number",
428 "value"));
429 assertEquals("2",
430 getAttributeByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].foId", "value"));
431
432 waitAndClickByXpath("//button[@data-loadingmessage='Deleting Line...']");
433 Thread.sleep(3000);
434 assertEquals(Boolean.FALSE,
435 isElementPresentByName("document.newMaintainableObject.dataObject.fiscalOfficer.accounts[0].number"));
436 passed();
437 }
438
439 protected void waitAndCancelConfirmation() throws InterruptedException {
440 waitAndClickByName("methodToCall.cancel");
441 waitAndClickByName("methodToCall.processAnswer.button0");
442 }
443
444 protected void waitAndCreateNew() throws InterruptedException {
445 waitAndClickByXpath("//img[@alt='create new']");
446
447 }
448
449 protected void waitAndEdit() throws InterruptedException {
450 waitAndClickByLinkText("edit");
451 }
452
453 protected void waitAndReturnValue() throws InterruptedException {
454 waitAndClickByLinkText("return value");
455 }
456
457 protected void waitAndSearch() throws InterruptedException {
458 waitAndClickByXpath("//input[@value='search']");
459
460
461
462 }
463
464 protected String waitForDocId() throws InterruptedException {
465 waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]");
466 return driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText();
467 }
468
469 protected void waitForElementPresent(String locator) throws InterruptedException {
470 waitFor(By.cssSelector(locator));
471 }
472
473 protected void waitForElementPresentByXpath(String locator) throws InterruptedException {
474 waitFor(By.xpath(locator));
475 }
476
477 protected void waitForElementPresentByName(String name) throws InterruptedException {
478 waitFor(By.name(name));
479 }
480
481 protected void waitForTitleToEqualKualiPortalIndex() throws InterruptedException {
482 waitForTitleToEqualKualiPortalIndex("");
483 }
484
485 protected void waitForTitleToEqualKualiPortalIndex(String message) throws InterruptedException {
486 Thread.sleep(2000);
487
488
489
490
491
492
493
494
495
496 }
497
498 protected void waitAndClick(String locator) throws InterruptedException {
499 waitAndClick(locator, "");
500 }
501
502 protected void waitForPageToLoad() {
503
504 }
505
506 protected void waitFor(By by) throws InterruptedException {
507 waitFor(by, "");
508 }
509
510 protected void waitFor(By by, String message) throws InterruptedException {
511
512 Thread.sleep(1000);
513 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
514
515
516 try {
517 driver.findElement(by);
518
519 } catch (Exception e) {}
520 driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
521
522 }
523
524 protected void waitAndClick(By by) throws InterruptedException {
525 waitAndClick(by, "");
526 }
527
528 protected void waitAndClick(By by, String message) throws InterruptedException {
529 waitFor(by, message);
530 try {
531 (driver.findElement(by)).click();
532 } catch (Exception e) {
533 fail(e.getMessage() + " " + by.toString() + " " + message + " " + driver.getCurrentUrl());
534 e.printStackTrace();
535 }
536 }
537
538 protected void waitAndClick(String locator, String message) throws InterruptedException {
539 waitAndClick(By.cssSelector(locator), message);
540 }
541
542 protected void waitAndClickByLinkText(String text) throws InterruptedException {
543 waitAndClick(By.linkText(text), "");
544 }
545
546 protected void waitAndClickByLinkText(String text, String message) throws InterruptedException {
547 waitAndClick(By.linkText(text), message);
548 }
549
550 protected void waitAndClickByName(String name) throws InterruptedException {
551 waitAndClick(By.name(name), "");
552 }
553
554 protected void waitAndClickByXpath(String xpath) throws InterruptedException {
555 waitAndClick(By.xpath(xpath));
556 }
557
558 protected void waitAndClickByName(String name, String message) throws InterruptedException {
559 waitAndClick(By.name(name), message);
560 }
561
562 protected void waitAndClickByXpath(String xpath, String message) throws InterruptedException {
563 waitAndClick(By.xpath(xpath), message);
564 }
565
566 protected void waitAndType(By by, String text) throws InterruptedException {
567 waitFor(by, "");
568 try {
569 (driver.findElement(by)).sendKeys(text);
570 } catch (Exception e) {
571 fail(e.getMessage() + " " + by.toString() + " unable to type text '" + text + "' current url "
572 + driver.getCurrentUrl()
573 + "\n" + ITUtil.deLinespace(driver.getPageSource()));
574 e.printStackTrace();
575 }
576 }
577
578 protected void waitAndType(By by, String text, String message) throws InterruptedException {
579 waitFor(by, "");
580 try {
581 (driver.findElement(by)).sendKeys(text);
582 } catch (Exception e) {
583 fail(e.getMessage() + " " + by.toString() + " unable to type text '" + text + "' " + message
584 + " current url " + driver.getCurrentUrl()
585 + "\n" + ITUtil.deLinespace(driver.getPageSource()));
586 e.printStackTrace();
587 }
588 }
589
590 protected void waitAndType(String selector, String text) throws InterruptedException {
591 waitAndType(By.cssSelector(selector), text);
592 }
593
594 protected void waitAndTypeByXpath(String locator, String text) throws InterruptedException {
595 waitAndType(By.xpath(locator), text);
596 }
597
598 protected void waitAndTypeByXpath(String locator, String text, String message) throws InterruptedException {
599 waitAndType(By.xpath(locator), text, message);
600 }
601
602 protected void waitAndTypeByName(String name, String text) throws InterruptedException {
603 waitAndType(By.name(name), text);
604 }
605
606 protected void selectByXpath(String locator, String selectText) throws InterruptedException {
607 select(By.xpath(locator), selectText);
608 }
609
610 protected void selectByName(String name, String selectText) throws InterruptedException {
611 select(By.name(name), selectText);
612 }
613
614 protected void select(By by, String selectText) throws InterruptedException {
615 WebElement select1 = driver.findElement(by);
616 List<WebElement> options = select1.findElements(By.tagName("option"));
617 for (WebElement option : options) {
618 if (option.getText().equals(selectText)) {
619 option.click();
620 break;
621 }
622 }
623 }
624
625 protected void selectOptionByName(String name, String optionValue) throws InterruptedException {
626 selectOption(By.name(name), optionValue);
627 }
628
629 protected void selectOptionByXpath(String locator, String optionValue) throws InterruptedException {
630 selectOption(By.name(locator), optionValue);
631 }
632
633 protected void selectOption(By by, String optionValue) throws InterruptedException {
634 WebElement select1 = driver.findElement(by);
635 List<WebElement> options = select1.findElements(By.tagName("option"));
636 for (WebElement option : options) {
637 if (option.getAttribute("value").equals(optionValue)) {
638 option.click();
639 break;
640 }
641 }
642 }
643
644 protected String[] getSelectOptions(By by) throws InterruptedException {
645 WebElement select1 = driver.findElement(by);
646 List<WebElement> options = select1.findElements(By.tagName("option"));
647 String[] optionValues = new String[options.size()];
648 int counter = 0;
649 for (WebElement option : options) {
650 optionValues[counter] = option.getAttribute("value");
651 counter++;
652 }
653 return optionValues;
654 }
655
656 protected String[] getSelectOptionsByName(String name) throws InterruptedException {
657 return getSelectOptions(By.name(name));
658 }
659
660 protected String[] getSelectOptionsByXpath(String locator) throws InterruptedException {
661 return getSelectOptions(By.xpath(locator));
662 }
663
664 protected int getCssCount(String selector) {
665 return getCssCount(By.cssSelector(selector));
666 }
667
668 protected int getCssCount(By by) {
669 return (driver.findElements(by)).size();
670 }
671
672 protected void checkErrorMessageItem(String message)
673 {
674 final String error_locator = "//li[@class='uif-errorMessageItem']";
675 assertElementPresentByXpath(error_locator);
676 String errorText = null;
677 try {
678 errorText = getTextByXpath(error_locator);
679 } catch (InterruptedException e) {
680 e.printStackTrace();
681 }
682 if (errorText != null && errorText.contains("errors")) {
683 Assert.fail(errorText + message);
684 }
685
686 }
687
688 protected boolean isVisible(String locator) {
689 return driver.findElement(By.cssSelector(locator)).isDisplayed();
690 }
691
692 protected boolean isVisible(By by) {
693 return driver.findElement(by).isDisplayed();
694 }
695
696 protected boolean isVisibleByXpath(String locator) {
697 return isVisible(By.xpath(locator));
698 }
699
700 protected void waitNotVisible(By by) throws InterruptedException {
701 for (int second = 0;; second++) {
702 if (second >= 60) {
703 Assert.fail("timeout");
704 }
705
706 if (!isVisible(by)) {
707 break;
708 }
709
710 Thread.sleep(1000);
711 }
712 }
713
714 protected void waitNotVisibleByXpath(String locator) throws InterruptedException {
715 waitNotVisible(By.xpath(locator));
716 }
717
718 protected void waitIsVisible(By by) throws InterruptedException {
719 for (int second = 0;; second++) {
720 if (second >= 60) {
721 Assert.fail("timeout");
722 }
723 if (isVisible(by)) {
724 break;
725 }
726 Thread.sleep(1000);
727 }
728 }
729
730 protected void waitForElementVisible(String elementLocator, String message) throws InterruptedException {
731 boolean failed = false;
732 for (int second = 0;; second++) {
733 if (second >= 60)
734 failed = true;
735 try {
736 if (failed || (driver.findElements(By.cssSelector(elementLocator))).size() > 0)
737 break;
738 } catch (Exception e) {}
739 Thread.sleep(1000);
740 }
741 checkForIncidentReport(elementLocator);
742 if (failed)
743 fail("timeout of 60 seconds waiting for " + elementLocator + " " + message + " " + driver.getCurrentUrl());
744 }
745
746 protected void waitIsVisible(String locator) throws InterruptedException {
747 waitIsVisible(By.cssSelector(locator));
748 }
749
750 protected void waitIsVisibleByXpath(String locator) throws InterruptedException {
751 waitIsVisible(By.xpath(locator));
752 }
753
754 protected void colapseExpandByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
755 waitAndClickByXpath(clickLocator);
756 waitNotVisibleByXpath(visibleLocator);
757
758 waitAndClickByXpath(clickLocator);
759 waitIsVisibleByXpath(visibleLocator);
760 }
761
762 protected void expandColapseByXpath(String clickLocator, String visibleLocator) throws InterruptedException {
763 waitAndClickByXpath(clickLocator);
764 waitIsVisibleByXpath(visibleLocator);
765
766 waitAndClickByXpath(clickLocator);
767 waitNotVisibleByXpath(visibleLocator);
768 }
769
770 public void switchToWindow(String title) {
771 Set<String> windows = driver.getWindowHandles();
772
773 for (String window : windows) {
774 driver.switchTo().window(window);
775 if (driver.getTitle().contains(title)) {
776 return;
777 }
778 }
779 }
780
781 public String[] getAllWindowTitles() {
782 return (String[]) driver.getWindowHandles().toArray();
783 }
784
785 protected void check(By by) throws InterruptedException {
786 WebElement element = driver.findElement(by);
787 if (!element.isSelected()) {
788 element.click();
789 }
790 }
791
792 protected void checkByName(String name) throws InterruptedException {
793 check(By.name(name));
794 }
795
796 protected void checkByXpath(String locator) throws InterruptedException {
797 check(By.xpath(locator));
798 }
799
800 protected void uncheck(By by) throws InterruptedException {
801 WebElement element = driver.findElement(by);
802 if (element.isSelected()) {
803 element.click();
804 }
805 }
806
807 protected void uncheckByName(String name) throws InterruptedException {
808 uncheck(By.name(name));
809 }
810
811 protected void uncheckByXpath(String locator) throws InterruptedException {
812 uncheck(By.xpath(locator));
813 }
814
815 protected void fireEvent(String name, String event) {
816 ((JavascriptExecutor) driver).executeScript(
817 "var elements=document.getElementsByName(\"" + name + "\");" +
818 "for (var i = 0; i < elements.length; i++){" +
819 "elements[i]." + event + "();}"
820 );
821 }
822
823 protected void fireEvent(String name, String value, String event) {
824 ((JavascriptExecutor) driver).executeScript(
825 "var elements=document.getElementsByName(\"" + name + "\");" +
826 "for (var i = 0; i < elements.length; i++){" +
827 "if(elements[i].value=='" + value + "')" +
828 "elements[i]." + event + "();}"
829 );
830 }
831
832 public void fireMouseOverEventByName(String name) {
833 this.fireMouseOverEvent(By.name(name));
834 }
835
836 public void fireMouseOverEventByXpath(String locator) {
837 this.fireMouseOverEvent(By.xpath(locator));
838 }
839
840 public void fireMouseOverEvent(By by) {
841 Actions builder = new Actions(driver);
842 Actions hover = builder.moveToElement(driver.findElement(by));
843 hover.perform();
844
845 }
846
847 protected Boolean isTextPresent(String text)
848 {
849 if (driver.getPageSource().contains(text)) {
850 return Boolean.TRUE;
851 }
852 return Boolean.FALSE;
853 }
854
855 protected void testAgendaEditRuleRefreshIT() throws Exception {
856 selectFrame("iframeportlet");
857 waitAndClickByXpath("//div[@class='uif-boxLayout uif-horizontalBoxLayout clearfix']/button[1]"); // waitAndClick("id=32");
858 Thread.sleep(3000);
859 waitAndClickByXpath("//a[@title='edit Agenda Definition with Agenda Id=T1000']",
860 "Does user have edit permissions?");
861 checkForIncidentReport("");
862 Thread.sleep(3000);
863 waitAndClickByXpath("//li/a[@class='agendaNode ruleNode']"); // waitAndClick("//li[@id='473_node_0_parent_root']/a");
864 waitAndClickByXpath("//li/a[@class='agendaNode logicNode whenTrueNode']");
865 waitAndClickByLinkText("[-] collapse all");
866
867
868 for (int i = 0; i < 6; i++) {
869 for (int second = 0;; second++) {
870 if (second >= 60)
871 Assert.fail("timeout");
872 try {
873 if (isElementPresent(".kr-refresh-button"))
874 break;
875 } catch (Exception e) {}
876 Thread.sleep(1000);
877 }
878
879 waitAndClick("button.kr-refresh-button");
880 }
881 }
882
883 protected void assertBlanketApproveButtonsPresent() {
884 assertElementPresentByName("methodToCall.route");
885 assertElementPresentByName("methodToCall.save");
886 assertElementPresentByName("methodToCall.blanketApprove", "Blanket Approve button not present does " + user
887 + " have permssion?");
888 assertElementPresentByName("methodToCall.close");
889 assertElementPresentByName("methodToCall.cancel");
890 }
891
892 protected void assertDocFinal(String docId) throws InterruptedException {
893 waitFor(By.linkText("spreadsheet"));
894 if (isElementPresent(By.linkText(docId))) {
895 assertEquals("FINAL", getDocStatus());
896 } else {
897 assertEquals(docId, driver.findElement(By.xpath("//table[@id='row']/tbody/tr[1]/td[1]")));
898 assertEquals("FINAL", getDocStatus());
899 }
900 }
901
902 private String getDocStatus() {
903 return driver.findElement(By.xpath("//table[@id='row']/tbody/tr[1]/td[4]")).getText();
904 }
905
906 protected String configNameSpaceBlanketApprove() throws Exception {
907 String docId = waitForDocId();
908 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Namespace "
909 + ITUtil.DTS_TWO);
910 assertBlanketApproveButtonsPresent();
911 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", "VTN" + ITUtil.DTS_TWO);
912 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']",
913 "Validation Test NameSpace " + ITUtil.DTS_TWO);
914 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.applicationId']", "RICE");
915 return docId;
916 }
917
918 protected void testConfigNamespaceBlanketApprove() throws Exception {
919
920 selectFrame("iframeportlet");
921 waitAndCreateNew();
922 String docId = configNameSpaceBlanketApprove();
923 blanketApproveTest();
924 assertDocFinal(docId);
925 passed();
926 }
927
928 protected void testConfigParamaterBlanketApprove() throws Exception {
929
930 selectFrame("iframeportlet");
931 waitAndCreateNew();
932 String docId = waitForDocId();
933 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Parameter ");
934 assertBlanketApproveButtonsPresent();
935 assertEquals("", getTextByName("methodToCall.cancel"));
936 selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']", "KR-NS - Kuali Nervous System");
937
938 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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
939 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
940 waitAndClickByXpath(componentLookUp);
941 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
942 waitAndClickByLinkText("return value");
943
944 String parameterName = "ValidationTestParameter" + ITUtil.DTS;
945 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", parameterName);
946 waitAndTypeByXpath("//textarea[@id='document.newMaintainableObject.description']",
947 "Validation Test Parameter Description" + ITUtil.DTS);
948 selectByXpath("//select[@id='document.newMaintainableObject.parameterTypeCode']", "Document Validation");
949 waitAndClickByXpath("//input[@id='document.newMaintainableObject.evaluationOperatorCodeAllowed']");
950
951 waitForPageToLoad();
952 blanketApproveTest();
953 assertDocFinal(docId);
954 }
955
956 protected void testCreateNewCancel() throws Exception
957 {
958 selectFrame("iframeportlet");
959 waitAndCreateNew();
960 testCancelConfirmation();
961 }
962
963 protected void testCreateDocType() throws Exception {
964 selectFrame("iframeportlet");
965 waitAndCreateNew();
966 assertElementPresentByXpath("//*[@name='methodToCall.route' and @alt='submit']",
967 "save button does not exist on the page");
968 waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]");
969 String docId = driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText();
970 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Creating new Document Type");
971 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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
972 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
973 waitAndClickByXpath(parentDocType);
974 waitForPageToLoad();
975 Thread.sleep(2000);
976 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
977 waitForPageToLoad();
978 waitAndClickByLinkText("return value");
979 String docTypeName = "TestDocType" + ITUtil.DTS;
980 waitForElementPresentByXpath("//input[@id='document.newMaintainableObject.name']");
981 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
982 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']",
983 "${kr.url}/maintenance.do?methodToCall=docHandler");
984
985 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']", "TestDocument Label");
986 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']",
987 "default.htm?turl=WordDocuments%2Fdocumenttype.htm");
988
989 waitAndClickByXpath("//*[@name='methodToCall.route' and @alt='submit']");
990 checkForIncidentReport();
991 waitForPageToLoad();
992 driver.switchTo().defaultContent();
993
994 waitAndClickByXpath("//a[@title='Document Search']");
995 waitForPageToLoad();
996 selectFrame("iframeportlet");
997 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
998 Thread.sleep(2000);
999
1000 assertEquals(docId, driver.findElement(By.xpath("//table[@id='row']/tbody/tr[1]/td[1]")).getText());
1001
1002 }
1003
1004 protected void testIdentityGroupBlanketApprove() throws Exception
1005 {
1006 selectFrame("iframeportlet");
1007 waitAndCreateNew();
1008
1009 String docId = waitForDocId();
1010 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Group "
1011 + ITUtil.DTS_TWO);
1012 assertBlanketApproveButtonsPresent();
1013 selectByXpath("//select[@id='document.groupNamespace']", AdminMenuLegacyITBase.LABEL_KUALI_KUALI_SYSTEMS);
1014 waitAndTypeByXpath("//input[@id='document.groupName']", "Validation Test Group1 " + ITUtil.DTS_TWO);
1015 waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
1016 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1017 waitAndClickByLinkText("return value");
1018 waitAndClickByName("methodToCall.addMember.anchorAssignees");
1019 waitForPageToLoad();
1020
1021 blanketApproveTest();
1022 assertDocFinal(docId);
1023 }
1024
1025 protected void testIdentityPermissionBlanketApprove() throws Exception {
1026
1027 selectFrame("iframeportlet");
1028 waitAndCreateNew();
1029 String docId = waitForDocId();
1030 waitAndTypeByXpath("//input[@name='document.documentHeader.documentDescription']",
1031 "Validation Test Permission " + ITUtil.DTS_TWO);
1032 assertBlanketApproveButtonsPresent();
1033 waitAndTypeByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']", "10012");
1034 selectByXpath("//select[@name='document.newMaintainableObject.namespaceCode']",
1035 AdminMenuLegacyITBase.LABEL_KUALI_KUALI_SYSTEMS);
1036 selectByXpath("//select[@name='document.newMaintainableObject.templateId']",
1037 AdminMenuLegacyITBase.LABEL_KUALI_DEFAULT);
1038 waitAndTypeByXpath("//input[@name='document.newMaintainableObject.name']", "ValidationTestPermission"
1039 + ITUtil.DTS_TWO);
1040 blanketApproveTest();
1041 assertDocFinal(docId);
1042 }
1043
1044 protected void testIdentityPersonBlanketApprove() throws Exception {
1045
1046 selectFrame("iframeportlet");
1047 waitAndCreateNew();
1048 String docId = waitForDocId();
1049 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Person");
1050 assertBlanketApproveButtonsPresent();
1051 waitAndTypeByXpath("//input[@id='document.principalName']", "principal"
1052 + RandomStringUtils.randomAlphabetic(3).toLowerCase());
1053 selectByName("newAffln.affiliationTypeCode", "Affiliate");
1054 selectByName("newAffln.campusCode", "BX - BLGTN OFF CAMPUS");
1055 selectByName("newAffln.campusCode", "BL - BLOOMINGTON");
1056 assertElementPresentByName("newAffln.dflt");
1057 waitAndClickByName("newAffln.dflt");
1058 waitAndClickByName("methodToCall.addAffln.anchor");
1059 waitAndClickByName("methodToCall.toggleTab.tabContact");
1060 selectByName("newName.namePrefix", "Mr");
1061 waitAndTypeByName("newName.firstName", "First");
1062 waitAndTypeByName("newName.lastName", "Last");
1063 selectByName("newName.nameSuffix", "Mr");
1064 waitAndClickByName("newName.dflt");
1065 waitAndClickByName("methodToCall.addName.anchor");
1066 waitForPageToLoad();
1067 blanketApproveTest();
1068 assertDocFinal(docId);
1069 }
1070
1071 protected void testIdentityResponsibilityBlanketApprove() throws Exception {
1072
1073 selectFrame("iframeportlet");
1074 waitAndCreateNew();
1075 String docId = waitForDocId();
1076 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']",
1077 "Validation Test Responsibility " + ITUtil.DTS_TWO);
1078 assertBlanketApproveButtonsPresent();
1079 selectByXpath("//select[@id='document.newMaintainableObject.namespaceCode']",
1080 AdminMenuLegacyITBase.LABEL_KUALI_KUALI_SYSTEMS);
1081 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "Validation Test Responsibility "
1082 + ITUtil.DTS_TWO);
1083 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.documentTypeName']", "Test " + ITUtil.DTS_TWO);
1084 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.routeNodeName']", "Test " + ITUtil.DTS_TWO);
1085 waitAndClickByXpath("//input[@id='document.newMaintainableObject.actionDetailsAtRoleMemberLevel']");
1086 waitAndClickByXpath("//input[@id='document.newMaintainableObject.required']");
1087 blanketApproveTest();
1088 assertDocFinal(docId);
1089 }
1090
1091 protected void testIdentityRoleBlanketApprove() throws Exception {
1092
1093 selectFrame("iframeportlet");
1094 waitAndCreateNew();
1095 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']", "No search button to click.");
1096 waitAndClickByLinkText("return value", "No return value link");
1097
1098 String docId = waitForDocId();
1099 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Role "
1100 + ITUtil.DTS_TWO);
1101 assertBlanketApproveButtonsPresent();
1102 selectByXpath("//select[@id='document.roleNamespace']", AdminMenuLegacyITBase.LABEL_KUALI_KUALI_SYSTEMS);
1103 waitAndTypeByXpath("//input[@id='document.roleName']", "Validation Test Role " + ITUtil.DTS_TWO,
1104 "No Role Name input to type in.");
1105 waitAndClickByName("methodToCall.performLookup.(!!org.kuali.rice.kim.impl.identity.PersonImpl!!).(((principalId:member.memberId,principalName:member.memberName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorAssignees");
1106 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']", "No search button to click.");
1107 waitAndClickByLinkText("return value", "No return value link");
1108 waitAndClickByName("methodToCall.addMember.anchorAssignees");
1109 waitForPageToLoad();
1110 blanketApproveTest();
1111 assertDocFinal(docId);
1112
1113 }
1114
1115 protected void testLocationCampusBlanketApprove() throws Exception {
1116
1117 selectFrame("iframeportlet");
1118 waitAndCreateNew();
1119 String docId = waitForDocId();
1120 waitAndTypeByName("document.documentHeader.documentDescription", "Validation Test Campus");
1121 assertBlanketApproveButtonsPresent();
1122 waitAndTypeByName("document.newMaintainableObject.code", RandomStringUtils.randomAlphabetic(2));
1123 waitAndTypeByName("document.newMaintainableObject.name", "Validation Test Campus" + ITUtil.DTS);
1124 waitAndTypeByName("document.newMaintainableObject.shortName", "VTC");
1125 selectByName("document.newMaintainableObject.campusTypeCode", "B - BOTH");
1126 blanketApproveTest();
1127 assertDocFinal(docId);
1128 }
1129
1130 protected void testLocationCountryBlanketApprove() throws InterruptedException {
1131
1132 selectFrame("iframeportlet");
1133 waitAndCreateNew();
1134 String docId = waitForDocId();
1135 assertBlanketApproveButtonsPresent();
1136 String twoUpperCaseLetters = RandomStringUtils.randomAlphabetic(2).toUpperCase();
1137 String countryName = "Validation Test Country " + ITUtil.DTS + " " + twoUpperCaseLetters;
1138 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", countryName);
1139 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", twoUpperCaseLetters);
1140 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countryName);
1141 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.alternateCode']", "V" + twoUpperCaseLetters);
1142 blanketApproveTest();
1143 assertDocFinal(docId);
1144 }
1145
1146 protected void testLocationCountyBlanketApprove() throws Exception {
1147
1148 selectFrame("iframeportlet");
1149 waitAndCreateNew();
1150 String docId = waitForDocId();
1151 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test County");
1152 assertBlanketApproveButtonsPresent();
1153 String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1154 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1155 waitAndClickByXpath(countryLookUp);
1156 waitAndTypeByName("code", "US");
1157 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1158 waitAndClickByLinkText("return value");
1159 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", RandomStringUtils.randomAlphabetic(2)
1160 .toUpperCase());
1161 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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1162 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1163 waitAndClickByXpath(stateLookUp);
1164 waitAndTypeByName("code", "IN");
1165 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1166 waitAndClickByLinkText("return value");
1167 String countyName = "Validation Test County" + ITUtil.DTS;
1168 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", countyName);
1169 waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
1170 blanketApproveTest();
1171 assertDocFinal(docId);
1172 }
1173
1174 protected void testLocationPostBlanketApprove() throws Exception {
1175
1176 selectFrame("iframeportlet");
1177 waitAndCreateNew();
1178 String docId = waitForDocId();
1179 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Postal Code");
1180 assertBlanketApproveButtonsPresent();
1181 String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1182 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1183 waitAndClickByXpath(countryLookUp);
1184 waitAndTypeByName("code", "US");
1185 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1186 waitAndClickByLinkText("return value");
1187 String code = RandomStringUtils.randomNumeric(5);
1188 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", code);
1189 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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1190 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1191 waitAndClickByXpath(stateLookUp);
1192 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1193 waitAndClickByXpath("//table[@id='row']/tbody/tr[4]/td[1]/a");
1194 String cityName = "Validation Test Postal Code " + code;
1195 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.cityName']", cityName);
1196 blanketApproveTest();
1197 assertDocFinal(docId);
1198 }
1199
1200 protected void testLocationStateBlanketApprove() throws Exception {
1201
1202 selectFrame("iframeportlet");
1203 waitAndCreateNew();
1204 String docId = waitForDocId();
1205 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test State");
1206 assertBlanketApproveButtonsPresent();
1207
1208 String countryLookUp = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.location.impl.country.CountryBo!!).(((code:document.newMaintainableObject.countryCode,))).((`document.newMaintainableObject.countryCode:code,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1209 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1210 waitAndClickByXpath(countryLookUp);
1211 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1212 waitAndClickByLinkText("return value");
1213 String code = RandomStringUtils.randomAlphabetic(2).toUpperCase();
1214 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", code);
1215 String state = "Validation Test State " + code;
1216 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", state);
1217 waitAndClickByXpath("//input[@id='document.newMaintainableObject.active']");
1218 blanketApproveTest();
1219 assertDocFinal(docId);
1220 }
1221
1222 protected void testReferenceCampusTypeBlanketApprove() throws Exception {
1223
1224 selectFrame("iframeportlet");
1225 waitAndCreateNew();
1226 String docId = waitForDocId();
1227 assertBlanketApproveButtonsPresent();
1228 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Validation Test Campus Type "
1229 + ITUtil.DTS_TWO);
1230 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.code']", RandomStringUtils.randomAlphabetic(2));
1231 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", "Indianapolis" + ITUtil.DTS_TWO);
1232 blanketApproveTest();
1233 assertDocFinal(docId);
1234 }
1235
1236 protected void testWorkFlowDocTypeBlanketApprove() throws Exception {
1237
1238 selectFrame("iframeportlet");
1239 waitAndCreateNew();
1240 String docId = waitForDocId();
1241 assertBlanketApproveButtonsPresent();
1242 waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']",
1243 "Validation Test Document Type " + ITUtil.DTS);
1244 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,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;"
1245 + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
1246 waitAndClickByXpath(parentDocType);
1247 waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
1248 waitAndClickByLinkText("return value");
1249 String docTypeName = "DocType" + ITUtil.DTS;
1250 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
1251 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']",
1252 "${kr.url}/maintenance.do?methodToCall=docHandler");
1253
1254 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']",
1255 "Workflow Maintenance Document Type Document");
1256 waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']",
1257 "default.htm?turl=WordDocuments%2Fdocumenttype.htm");
1258 blanketApproveTest();
1259 assertDocFinal(docId);
1260 }
1261
1262 protected void testVerifyAddDeleteNoteLegacy() throws Exception {
1263 selectFrame("iframeportlet");
1264 waitAndClick("div.tableborders.wrap.uif-boxLayoutVerticalItem.clearfix span.uif-headerText-span > img.uif-disclosure-image");
1265 waitForElementPresent("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
1266 waitAndClickByName("newCollectionLines['document.notes'].noteText");
1267 waitAndTypeByName("newCollectionLines['document.notes'].noteText", "Test note");
1268 waitAndClick("button[title='Add a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
1269 waitForElementPresentByName("document.notes[0].noteText");
1270
1271 assertEquals("Test note", getTextByXpath("//pre"));
1272 waitAndClick("button[title='Delete a Note'].uif-action.uif-primaryActionButton.uif-smallActionButton");
1273 assertEquals(Boolean.FALSE, isElementPresentByName("document.notes[0].noteText"));
1274 passed();
1275 }
1276
1277 protected void testVerifyAdHocRecipientsLegacy() throws Exception {
1278 selectFrame("iframeportlet");
1279 waitAndClickByLinkText("Fiscal Officer Accounts");
1280
1281 assertElementPresentByXpath("//select[@name=\"newCollectionLines['document.adHocRoutePersons'].actionRequested\"]");
1282 assertElementPresentByXpath("//input[@name=\"newCollectionLines['document.adHocRoutePersons'].name\" and @type=\"text\"]");
1283
1284 assertElementPresentByXpath("//select[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].actionRequested\"]");
1285 assertElementPresentByXpath("//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientNamespaceCode\" and @type='text']");
1286 assertElementPresentByXpath("//input[@name=\"newCollectionLines['document.adHocRouteWorkgroups'].recipientName\" and @type='text']");
1287 passed();
1288 }
1289
1290 protected void testVerifyButtonsLegacy() throws Exception {
1291 selectFrame("iframeportlet");
1292 assertElementPresentByXpath("//button[contains(.,'ubmit')]");
1293 assertElementPresentByXpath("//button[contains(.,'ave')]");
1294 assertElementPresentByXpath("//button[contains(.,'lanket approve')]");
1295 assertElementPresentByXpath("//button[contains(.,'lose')]");
1296 assertElementPresentByXpath("//a[contains(.,'ancel')]");
1297 passed();
1298 }
1299
1300 protected void testVerifyConstraintText() throws Exception {
1301 selectFrame("iframeportlet");
1302 assertEquals(
1303 "* indicates required field",
1304 getText("div.uif-boxLayout.uif-horizontalBoxLayout.clearfix > span.uif-message.uif-requiredInstructionsMessage.uif-boxLayoutHorizontalItem"));
1305
1306 assertEquals(
1307 "Must not be more than 10 characters",
1308 getText("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"));
1309
1310 assertEquals(
1311 "Must not be more than 10 characters",
1312 getText("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"));
1313
1314 assertEquals(
1315 "Must not be more than 10 characters",
1316 getText("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"));
1317 passed();
1318 }
1319
1320 protected void testVerifyDisclosures() throws Exception {
1321 selectFrame("iframeportlet");
1322 assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
1323 assertElementPresentByXpath("//span[contains(text(),'Document Overview')]");
1324 assertElementPresentByXpath("//span[contains(text(),'Account Information')]");
1325 assertElementPresentByXpath("//span[contains(text(),'Fiscal Officer Accounts')]");
1326 assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
1327 assertElementPresentByXpath("//span[contains(text(),'Ad Hoc Recipients')]");
1328 assertElementPresentByXpath("//span[contains(text(),'Route Log')]");
1329
1330 colapseExpandByXpath("//span[contains(text(),'Document Overview')]//img",
1331 "//label[contains(text(),'Organization Document Number')]");
1332 colapseExpandByXpath("//span[contains(text(),'Account Information')]//img",
1333 "//label[contains(text(),'Travel Account Type Code')]");
1334 colapseExpandByXpath("//span[contains(text(),'Fiscal Officer Accounts')]//img",
1335 "//a[contains(text(),'Lookup/Add Multiple Lines')]");
1336
1337 expandColapseByXpath("//span[contains(text(),'Notes and Attachments')]//img",
1338 "//label[contains(text(),'Note Text')]");
1339 expandColapseByXpath("//span[contains(text(),'Ad Hoc Recipients')]",
1340 "//span[contains(text(),'Ad Hoc Group Requests')]");
1341
1342
1343 waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
1344 selectFrame("routeLogIFrame");
1345
1346 waitIsVisibleByXpath("//img[@alt='refresh']");
1347
1348
1349 selectTopFrame();
1350 selectFrame("iframeportlet");
1351 waitAndClickByXpath("//span[contains(text(),'Route Log')]//img");
1352 selectFrame("routeLogIFrame");
1353
1354 waitNotVisibleByXpath("//img[@alt='refresh']");
1355 passed();
1356 }
1357
1358 protected void testVerifyDocumentOverviewLegacy() throws Exception {
1359 selectFrame("iframeportlet");
1360 assertTextPresent("Document Overview");
1361 assertElementPresentByXpath("//input[@name='document.documentHeader.documentDescription']");
1362 assertElementPresentByXpath("//input[@name='document.documentHeader.organizationDocumentNumber']");
1363 assertElementPresentByXpath("//textarea[@name='document.documentHeader.explanation']");
1364 passed();
1365 }
1366
1367 protected void testVerifyExpandCollapse() throws Exception {
1368 selectFrame("iframeportlet");
1369 assertElementPresentByXpath("//button[contains(@class, 'uif-expandDisclosuresButton')]");
1370 assertElementPresentByXpath("//button[contains(@class, 'uif-collapseDisclosuresButton')]");
1371 passed();
1372 }
1373
1374 protected void testVerifyFieldsLegacy() throws Exception {
1375 selectFrame("iframeportlet");
1376 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.number' and @type='text' and @size=10 and @maxlength=10]");
1377 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.extension.accountTypeCode' and @type='text' and @size=2 and @maxlength=3]");
1378 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subAccount' and @type='text' and @size=10 and @maxlength=10]");
1379 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent' and @type='text' and @size=6 and @maxlength=20]");
1380 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.foId' and @type='text' and @size=5 and @maxlength=10]");
1381 assertElementPresentByXpath("//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].number\" and @type='text' and @size=10 and @maxlength=10]");
1382 assertElementPresentByXpath("//input[@name=\"newCollectionLines['document.newMaintainableObject.dataObject.fiscalOfficer.accounts'].foId\" and @type='text' and @size=5 and @maxlength=10]");
1383 passed();
1384 }
1385
1386 protected void testVerifyHeaderFieldsLegacy() throws Exception {
1387 selectFrame("iframeportlet");
1388 assertElementPresentByXpath("//div[contains(@class, 'uif-documentNumber')]");
1389 assertElementPresentByXpath("//div[contains(@class, 'uif-documentInitiatorNetworkId')]");
1390 assertElementPresentByXpath("//div[contains(@class, 'uif-documentStatus')]");
1391 assertElementPresentByXpath("//div[contains(@class, 'uif-documentCreateDate')]");
1392 passed();
1393 }
1394
1395 protected void testVerifyLookupAddMultipleLinesLegacy() throws Exception {
1396 selectFrame("iframeportlet");
1397 assertElementPresentByXpath("//a[contains(text(),'Lookup/Add Multiple Lines')]");
1398 passed();
1399 }
1400
1401 protected void testVerifyNotesAndAttachments() throws Exception {
1402 selectFrame("iframeportlet");
1403 waitAndClickByXpath("//span[contains(text(),'Notes and Attachments')]");
1404 waitForElementPresentByXpath("//button[@title='Add a Note']");
1405 assertElementPresentByXpath("//span[contains(text(),'Notes and Attachments')]");
1406 assertElementPresentByXpath("//textarea[@name=\"newCollectionLines['document.notes'].noteText\"]");
1407 assertElementPresentByXpath("//input[@name='attachmentFile']");
1408
1409 passed();
1410 }
1411
1412 protected void testVerifyQuickfinderIconsLegacy() throws Exception {
1413 selectFrame("iframeportlet");
1414 assertTextPresent("Document Overview");
1415 assertElementPresentByXpath("//*[@id='quickfinder1']");
1416 assertElementPresentByXpath("//*[@id='quickfinder2']");
1417 assertElementPresentByXpath("//*[@id='quickfinder3']");
1418 assertElementPresentByXpath("//*[@id='quickfinder4_add']");
1419
1420 passed();
1421 }
1422
1423 protected void testVerifyRouteLog() throws Exception {
1424 selectFrame("iframeportlet");
1425 waitAndClickByLinkText("Route Log");
1426 waitForElementPresent("//iframe[contains(@src,'RouteLog.do')]");
1427 passed();
1428 }
1429
1430 protected void testVerifySave() throws Exception {
1431 selectFrame("iframeportlet");
1432 waitAndTypeByName("document.documentHeader.documentDescription", "Test Document " + ITUtil.DTS);
1433 waitAndClickByName("document.newMaintainableObject.dataObject.number");
1434 waitAndTypeByName("document.newMaintainableObject.dataObject.number", "1234567890");
1435 waitAndTypeByName("document.newMaintainableObject.dataObject.extension.accountTypeCode", "EAT");
1436 waitAndTypeByName("document.newMaintainableObject.dataObject.subAccount", "a1");
1437 waitAndClick("button[data-loadingmessage='Saving...'].uif-action.uif-primaryActionButton.uif-boxLayoutHorizontalItem");
1438 Thread.sleep(2000);
1439
1440 passed();
1441 }
1442
1443 protected void testVerifySubsidizedPercentWatermarkLegacy() throws Exception {
1444 selectFrame("iframeportlet");
1445
1446
1447 assertElementPresentByXpath("//input[@name='document.newMaintainableObject.dataObject.subsidizedPercent']");
1448 passed();
1449 }
1450
1451 private void testLookUp() throws Exception {
1452 waitForPageToLoad();
1453 selectFrame("iframeportlet");
1454
1455 waitAndClick(By.xpath("//button[contains(text(),'Search')]"));
1456 waitAndClickByLinkText("edit", "edit button not present does user " + user + " have permission?");
1457 checkForIncidentReport("submit");
1458 assertTextPresent("ubmit");
1459 assertTextPresent("ave");
1460 assertTextPresent("pprove");
1461 assertTextPresent("lose");
1462 assertTextPresent("ancel");
1463
1464 }
1465
1466 protected void agendaLookupAssertions() throws Exception {
1467 testLookUp();
1468 assertTextPresent("Rules");
1469 waitAndClick(By.xpath("//a[contains(text(), 'Cancel')]"));
1470 passed();
1471 }
1472
1473 protected void testAttributeDefinitionLookUp() throws Exception {
1474 waitForPageToLoad();
1475 selectFrame("iframeportlet");
1476 waitAndClickByXpath("//button[contains(.,'earch')]");
1477 Thread.sleep(3000);
1478 waitForPageToLoad();
1479 driver.findElement(By.tagName("body")).getText().contains("Actions");
1480 waitAndClickByLinkText("1000");
1481 waitForPageToLoad();
1482
1483 driver.findElement(By.tagName("body")).getText().contains("Attribute Inquiry");
1484 driver.findElement(By.tagName("body")).getText().contains("KRMS Attributes");
1485 driver.findElement(By.tagName("body")).getText().contains("Attribute Label");
1486 driver.findElement(By.tagName("body")).getText().contains("1000");
1487 driver.findElement(By.tagName("body")).getText().contains("peopleFlowId");
1488 driver.findElement(By.tagName("body")).getText().contains("KR-RULE");
1489 driver.findElement(By.tagName("body")).getText().contains("PeopleFlow");
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503 passed();
1504 }
1505
1506 protected void contextLookupAssertions() throws Exception {
1507 testLookUp();
1508 assertTextPresent("Notes and Attachments");
1509 waitAndClick(By.xpath("//a[contains(text(), 'Cancel')]"));
1510 passed();
1511 }
1512
1513 protected void testCreateNewAgenda() throws Exception {
1514 selectFrame("iframeportlet");
1515 selectByName("document.newMaintainableObject.dataObject.namespace", "Kuali Rules Test");
1516 String agendaName = "Agenda Date :" + Calendar.getInstance().getTime().toString();
1517 waitAndTypeByName("document.newMaintainableObject.dataObject.agenda.name", "Agenda " + agendaName);
1518 waitAndTypeByName("document.newMaintainableObject.dataObject.contextName", "Context1");
1519 fireEvent("document.newMaintainableObject.dataObject.contextName", "blur");
1520 fireEvent("document.newMaintainableObject.dataObject.contextName", "focus");
1521 waitForElementPresentByName("document.newMaintainableObject.dataObject.agenda.typeId");
1522 selectByName("document.newMaintainableObject.dataObject.agenda.typeId", "Campus Agenda");
1523 waitForElementPresentByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]");
1524 waitAndTypeByName("document.newMaintainableObject.dataObject.customAttributesMap[Campus]", "BL");
1525 waitAndClickByXpath("//div[2]/button");
1526 waitForPageToLoad();
1527 waitAndClickByXpath("//div[2]/button[3]");
1528 waitForPageToLoad();
1529 selectTopFrame();
1530 waitAndClickByXpath("(//input[@name='imageField'])[2]");
1531 passed();
1532 }
1533
1534 protected void testPeopleFlow() throws Exception {
1535 selectFrame("iframeportlet");
1536
1537
1538
1539 waitAndClickByLinkText("Create New");
1540
1541
1542 waitForElementPresent("div[data-headerfor='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
1543 String docId = getText("div[data-headerfor='PeopleFlow-MaintenanceView'] div[data-label='Document Number'] > span");
1544
1545 driver.findElement(By.name("document.documentHeader.documentDescription")).clear();
1546 driver.findElement(By.name("document.documentHeader.documentDescription")).sendKeys("Description for Document");
1547 new Select(driver.findElement(By.name("document.newMaintainableObject.dataObject.namespaceCode")))
1548 .selectByVisibleText("KUALI - Kuali Systems");
1549 driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).clear();
1550 driver.findElement(By.name("document.newMaintainableObject.dataObject.name")).sendKeys(
1551 "Document Name" + ITUtil.DTS);
1552
1553
1554 driver.findElement(
1555 By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
1556 driver.findElement(
1557 By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName"))
1558 .sendKeys("kr");
1559 driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
1560 Thread.sleep(3000);
1561
1562 driver.findElement(
1563 By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName")).clear();
1564 driver.findElement(
1565 By.name("newCollectionLines['document.newMaintainableObject.dataObject.members'].memberName"))
1566 .sendKeys("admin");
1567 driver.findElement(By.cssSelector("button[data-loadingmessage='Adding Line...']")).click();
1568 Thread.sleep(3000);
1569
1570
1571 driver.findElement(
1572 By.cssSelector("div[data-parent='PeopleFlow-MaintenanceView'] > div.uif-footer button~button~button"))
1573 .click();
1574 Thread.sleep(5000);
1575
1576
1577
1578
1579 driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
1580 driver.findElement(By.cssSelector("img[alt=\"doc search\"]")).click();
1581 Thread.sleep(5000);
1582
1583 selectFrame("iframeportlet");
1584 driver.findElement(By.cssSelector("td.infoline > input[name=\"methodToCall.search\"]")).click();
1585 Thread.sleep(5000);
1586 assertEquals("FINAL", driver.findElement(By.xpath("//table[@id='row']/tbody/tr/td[4]")).getText());
1587 driver.switchTo().defaultContent();
1588 driver.findElement(By.name("imageField")).click();
1589
1590 }
1591
1592 protected void testTermLookupAssertions() throws Exception {
1593 testLookUp();
1594 assertTextPresent("Term Parameters");
1595 waitAndClick(By.xpath("//a[contains(text(), 'Cancel')]"));
1596 passed();
1597 }
1598
1599 protected void testTermSpecificationLookupAssertions() throws Exception {
1600 testLookUp();
1601 assertTextPresent("Context");
1602 waitAndClick(By.xpath("//a[contains(text(), 'Cancel')]"));
1603 passed();
1604 }
1605
1606 }