001    /**
002     * Copyright 2005-2014 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.sampleu.krad.validationmessagesview;
017    
018    import com.thoughtworks.selenium.SeleneseTestBase;
019    import org.kuali.rice.testtools.common.JiraAwareFailable;
020    import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
021    import org.openqa.selenium.By;
022    
023    /**
024     * Tests the Component section in Rice.
025     *
026     * @author Kuali Rice Team (rice.collab@kuali.org)
027     */
028    public abstract class ClientErrorsAftBase extends WebDriverLegacyITBase {
029    
030        /**
031         * "/kr-krad/uicomponents?viewId=Demo-ValidationLayout&methodToCall=start"
032         */
033        public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=Demo-ValidationLayout&methodToCall=start";
034    
035        @Override
036        public String getBookmarkUrl() {
037            return BOOKMARK_URL;
038        }
039    
040    
041        protected void navigation() throws InterruptedException {
042            waitAndClickKRAD();
043            waitAndClickByXpath(VALIDATION_FRAMEWORK_DEMO_XPATH);
044            switchToWindow(KUALI_VIEW_WINDOW_TITLE);
045        }
046    
047        protected void testClientErrorsNav(JiraAwareFailable failable) throws Exception {
048            navigation();
049            testClientErrors();
050            passed();
051        }
052    
053        protected void testClientErrorsBookmark(JiraAwareFailable failable) throws Exception {
054            testClientErrors();
055            passed();
056        }
057    
058        protected void testClientErrors() throws Exception {
059            fireEvent("field1", "focus");
060            fireEvent("field1", "blur");
061            Thread.sleep(3000);
062            fireMouseOverEventByName("field1");
063            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("field1", "aria-invalid"));
064            assertAttributeClassRegexMatches("field1", REGEX_ERROR);
065            assertTrue(isTextPresent("Required"));
066    
067            fireMouseOverEventByName("field1");
068    
069            for (int second = 0;; second++) {
070                if (second >= 10) {
071                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
072                }
073    
074                try {
075                    if (isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']")) {
076                        break;
077                    }
078                } catch (Exception e) {}
079    
080                Thread.sleep(1000);
081            }
082    
083            assertTrue(isVisible(".jquerybubblepopup-innerHtml > .uif-clientMessageItems  .uif-errorMessageItem-field"));
084    
085            waitAndTypeByName("field1", "a");
086            fireEvent("field1", "blur");
087            fireMouseOverEventByName("field1");
088    
089            for (int second = 0;; second++) {
090                if (second >= 10) {
091                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
092                }
093    
094                try {
095                    if (!isVisibleByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']")) {
096                        break;
097                    }
098                } catch (Exception e) {}
099    
100                Thread.sleep(1000);
101            }
102    
103            assertFalse(isVisibleByXpath(
104                    "//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']"));
105    
106            fireEvent("field1", "blur");
107            Thread.sleep(500);
108            assertFalse(isElementPresentByXpath("//*[@name='field1' and @aria-invalid]"));
109            assertAttributeClassRegexMatches("field1", REGEX_VALID);
110            assertTrue(isTextPresent("Required"));
111    
112            fireEvent("field2", "focus");
113            fireEvent("field2", "blur");
114            fireMouseOverEventByName("field2");
115            Thread.sleep(500);
116            //        SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("field2", "aria-invalid"));
117            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("field2", "aria-required"));
118            assertAttributeClassRegexMatches("field2", REGEX_ERROR);
119            assertTrue(isTextPresent("Required"));
120    
121            fireEvent("field2", "focus");
122            waitAndTypeByName("field2", "a");
123            fireEvent("field2", "blur");
124            Thread.sleep(500);
125            assertFalse(isElementPresentByXpath("//*[@name='field2' and @aria-invalid]"));
126            assertAttributeClassRegexMatches("field2", REGEX_VALID);
127            assertFalse(isElementPresentByXpath("//textarea[@name='field2']/../img[@alt='Error']"));
128    
129            fireEvent("field3", "focus");
130            fireEvent("field3", "blur");
131            fireMouseOverEventByName("field3");
132            Thread.sleep(500);
133            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("field3", "aria-invalid"));
134            assertAttributeClassRegexMatches("field3", REGEX_ERROR);
135            assertTrue(isTextPresent("Required"));
136    
137            fireEvent("field3", "focus");
138            selectByName("field3", "Option 1");
139            fireEvent("field3", "blur");
140            Thread.sleep(500);
141            assertFalse(isElementPresentByXpath("//*[@name='field3' and @aria-invalid]"));
142            assertAttributeClassRegexMatches("field3", REGEX_VALID);
143            assertFalse(isElementPresentByXpath("//select[@name='field3']/../img[@alt='Error']"));
144    
145            fireEvent("field114", "focus");
146            fireMouseOverEventByName("field114");
147            driver.findElement(By.name("field114")).findElements(By.tagName("option")).get(0).click();
148            fireEvent("field114", "blur");
149            Thread.sleep(500);
150            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("field114", "aria-invalid"));
151            assertAttributeClassRegexMatches("field114", REGEX_ERROR);
152            assertTrue(isTextPresent("Required"));
153    
154            fireEvent("field114", "focus");
155            selectByName("field114", "Option 1");
156            fireEvent("field114", "blur");
157            Thread.sleep(500);
158            assertFalse(isElementPresentByXpath("//*[@name='field114' and @aria-invalid]"));
159            assertAttributeClassRegexMatches("field114", REGEX_VALID);
160            assertFalse(isElementPresentByXpath("//select[@name='field114']/../img[@alt='Error']"));
161    
162            fireEvent("field117", "3", "focus");
163            uncheckByXpath("//*[@name='field117' and @value='3']");
164            fireEvent("field117", "blur");
165            fireMouseOverEventByName("field117");
166    
167            for (int second = 0;; second++) {
168                if (second >= 10) {
169                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
170                }
171    
172                try {
173                    if (isElementPresentByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']")) {
174                        break;
175                    }
176                } catch (Exception e) {}
177    
178                Thread.sleep(1000);
179            }
180    
181            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByXpath("//*[@name='field117' and @value='1']",
182                    "aria-invalid"));
183            assertTrue(waitAndGetAttributeByXpath("//*[@name='field117' and @value='1']", "class").matches(
184                    REGEX_ERROR));
185            assertTrue(isTextPresent("Required"));
186    
187            fireEvent("field117", "3", "focus");
188            checkByXpath("//*[@name='field117' and @value='3']");
189            fireEvent("field117", "3", "blur");
190    
191            for (int second = 0;; second++) {
192                if (second >= waitSeconds) {
193                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
194                }
195    
196                try {
197                    if (!isElementPresentByXpath("//input[@name='field117']/../../../img[@alt='Error']")) {
198                        break;
199                    }
200                } catch (Exception e) {}
201    
202                Thread.sleep(1000);
203            }
204    
205            assertFalse(isElementPresentByXpath("//*[@name='field117' and @value='3' and @aria-invalid]"));
206            assertTrue(waitAndGetAttributeByXpath("//*[@name='field117' and @value='3']", "class").matches(REGEX_VALID));
207            assertFalse(isElementPresentByXpath("//input[@name='field117']/../../../img[@alt='Error']"));
208    
209            fireEvent("bField1", "focus");
210            uncheckByName("bField1");
211            fireEvent("bField1", "blur");
212            fireMouseOverEventByName("bField1");
213            Thread.sleep(500);
214            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByName("bField1", "aria-invalid"));
215            assertAttributeClassRegexMatches("bField1", REGEX_ERROR);
216            assertTrue(isTextPresent("Required"));
217    
218            fireEvent("bField1", "focus");
219            checkByName("bField1");
220            fireEvent("bField1", "blur");
221            Thread.sleep(500);
222            assertFalse(isElementPresentByXpath("//*[@name='bField1' and @aria-invalid]"));
223            assertAttributeClassRegexMatches("bField1", REGEX_VALID);
224            assertFalse(isElementPresentByXpath("//input[@name='bField1' and following-sibling::img[@alt='Error']]"));
225    
226            fireEvent("field115", "3", "focus");
227            uncheckByXpath("//*[@name='field115' and @value='3']");
228            uncheckByXpath("//*[@name='field115' and @value='4']");
229            fireEvent("field115", "blur");
230            fireMouseOverEventByName("field115");
231    
232            for (int second = 0;; second++) {
233                if (second >= waitSeconds) {
234                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
235                }
236    
237                try {
238                    if (isElementPresentByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-kr-error-cs']")) {
239                        break;
240                    }
241                } catch (Exception e) {}
242    
243                Thread.sleep(1000);
244            }
245    
246            SeleneseTestBase.assertEquals("true", waitAndGetAttributeByXpath("//*[@name='field115' and @value='1']",
247                    "aria-invalid"));
248            assertTrue(waitAndGetAttributeByXpath("//*[@name='field115' and @value='1']", "class").matches(REGEX_ERROR));
249            assertTrue(isTextPresent("Required"));
250    
251            fireEvent("field115", "3", "focus");
252            checkByXpath("//*[@name='field115' and @value='3']");
253            checkByXpath("//*[@name='field115' and @value='4']");
254            fireEvent("field115", "blur");
255    
256            for (int second = 0;; second++) {
257                if (second >= waitSeconds) {
258                    SeleneseTestBase.fail(TIMEOUT_MESSAGE);
259                }
260    
261                try {
262                    if (!isElementPresentByXpath("//input[@name='field115']/../../../img[@alt='Error']")) {
263                        break;
264                    }
265                } catch (Exception e) {}
266    
267                Thread.sleep(1000);
268            }
269    
270            assertFalse(isElementPresentByXpath("//*[@name='field115' and @value='3' and @aria-invalid]"));
271            assertFalse(isElementPresentByXpath("//input[@name='field115']/../../../img[@alt='Error']"));
272        }
273    }