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