001 /* 002 * Copyright 2006-2012 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 017 package edu.samplu.krad.validationmessagesview; 018 019 import com.thoughtworks.selenium.Selenium; 020 import junit.framework.Assert; 021 import org.openqa.selenium.firefox.FirefoxDriver; 022 import org.openqa.selenium.WebDriver; 023 import org.openqa.selenium.WebDriverBackedSelenium; 024 import org.junit.After; 025 import org.junit.Before; 026 import org.junit.Test; 027 028 public class ClientErrorsIT { 029 private Selenium selenium; 030 031 @Before 032 public void setUp() throws Exception { 033 WebDriver driver = new FirefoxDriver(); 034 selenium = new WebDriverBackedSelenium(driver, 035 "http://localhost:8080/kr-dev/kr-krad/uicomponents?viewId=Demo-ValidationLayout&methodToCall=start"); 036 037 // Login 038 selenium.open( 039 "http://localhost:8080/kr-dev/kr-krad/uicomponents?viewId=Demo-ValidationLayout&methodToCall=start"); 040 Assert.assertEquals("Login", selenium.getTitle()); 041 selenium.type("__login_user", "admin"); 042 selenium.click("//input[@value='Login']"); 043 selenium.waitForPageToLoad("30000"); 044 } 045 046 @Test 047 public void testClientErrors() throws Exception { 048 selenium.fireEvent("name=field1", "focus"); 049 selenium.type("name=field1", ""); 050 selenium.fireEvent("name=field1", "blur"); 051 Assert.assertEquals("true", selenium.getAttribute("name=field1@aria-invalid")); 052 Assert.assertTrue(selenium.getAttribute("name=field1@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 053 Assert.assertTrue(selenium.isElementPresent("//textarea[@name='field1']/../img[@alt='Error']")); 054 selenium.fireEvent("name=field1", "focus"); 055 for (int second = 0; ; second++) { 056 if (second >= 60) { 057 Assert.fail("timeout"); 058 } 059 try { 060 if (selenium.isVisible("css=.jquerybubblepopup-innerHtml")) { 061 break; 062 } 063 } catch (Exception e) { 064 } 065 Thread.sleep(1000); 066 } 067 068 Assert.assertTrue(selenium.isVisible( 069 "css=.jquerybubblepopup-innerHtml > .uif-clientMessageItems .uif-errorMessageItem-field")); 070 selenium.type("name=field1", "a"); 071 selenium.keyDown("name=field1", "b"); 072 selenium.keyUp("name=field1", "b"); 073 for (int second = 0; ; second++) { 074 if (second >= 60) { 075 Assert.fail("timeout"); 076 } 077 try { 078 if (!selenium.isVisible("css=.jquerybubblepopup-innerHtml")) { 079 break; 080 } 081 } catch (Exception e) { 082 } 083 Thread.sleep(1000); 084 } 085 086 Assert.assertFalse(selenium.isVisible("css=.jquerybubblepopup-innerHtml > .uif-clientMessageItems")); 087 selenium.fireEvent("name=field1", "blur"); 088 Assert.assertFalse(selenium.isElementPresent("name=field1@aria-invalid")); 089 Assert.assertTrue(selenium.getAttribute("name=field1@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 090 Assert.assertFalse(selenium.isElementPresent("//textarea[@name='field1']/../img[@alt='Error']")); 091 selenium.fireEvent("name=field2", "focus"); 092 selenium.type("name=field2", ""); 093 selenium.fireEvent("name=field2", "blur"); 094 Assert.assertEquals("true", selenium.getAttribute("name=field2@aria-invalid")); 095 Assert.assertTrue(selenium.getAttribute("name=field2@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 096 Assert.assertTrue(selenium.isElementPresent("//input[@name='field2']/../img[@alt='Error']")); 097 selenium.fireEvent("name=field2", "focus"); 098 selenium.type("name=field2", "a"); 099 selenium.fireEvent("name=field2", "blur"); 100 Assert.assertFalse(selenium.isElementPresent("name=field2@aria-invalid")); 101 Assert.assertTrue(selenium.getAttribute("name=field2@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 102 Assert.assertFalse(selenium.isElementPresent("//textarea[@name='field2']/../img[@alt='Error']")); 103 selenium.fireEvent("name=field3", "focus"); 104 selenium.select("name=field3", ""); 105 selenium.fireEvent("name=field3", "blur"); 106 Assert.assertEquals("true", selenium.getAttribute("name=field3@aria-invalid")); 107 Assert.assertTrue(selenium.getAttribute("name=field3@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 108 Assert.assertTrue(selenium.isElementPresent("//select[@name='field3']/../img[@alt='Error']")); 109 selenium.fireEvent("name=field3", "focus"); 110 selenium.select("name=field3", "Option 1"); 111 selenium.fireEvent("name=field3", "blur"); 112 Assert.assertFalse(selenium.isElementPresent("name=field3@aria-invalid")); 113 Assert.assertTrue(selenium.getAttribute("name=field3@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 114 Assert.assertFalse(selenium.isElementPresent("//select[@name='field3']/../img[@alt='Error']")); 115 selenium.fireEvent("name=field4", "focus"); 116 selenium.removeAllSelections("name=field4"); 117 selenium.fireEvent("name=field4", "blur"); 118 Assert.assertEquals("true", selenium.getAttribute("name=field4@aria-invalid")); 119 Assert.assertTrue(selenium.getAttribute("name=field4@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 120 Assert.assertTrue(selenium.isElementPresent("//select[@name='field4']/../img[@alt='Error']")); 121 selenium.fireEvent("name=field4", "focus"); 122 selenium.select("name=field4", "Option 1"); 123 selenium.fireEvent("name=field4", "blur"); 124 Assert.assertFalse(selenium.isElementPresent("name=field4@aria-invalid")); 125 Assert.assertTrue(selenium.getAttribute("name=field4@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 126 Assert.assertFalse(selenium.isElementPresent("//select[@name='field4']/../img[@alt='Error']")); 127 selenium.fireEvent("name=field117 value=3", "focus"); 128 selenium.uncheck("name=field117 value=3"); 129 selenium.fireEvent("name=field117", "blur"); 130 for (int second = 0; ; second++) { 131 if (second >= 60) { 132 Assert.fail("timeout"); 133 } 134 try { 135 if (selenium.isElementPresent("//input[@name='field117']/../../../img[@alt='Error']")) { 136 break; 137 } 138 } catch (Exception e) { 139 } 140 Thread.sleep(1000); 141 } 142 143 Assert.assertEquals("true", selenium.getAttribute("name=field117 value=1@aria-invalid")); 144 Assert.assertTrue(selenium.getAttribute("name=field117 value=1@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 145 Assert.assertTrue(selenium.isElementPresent("//input[@name='field117']/../../../img[@alt='Error']")); 146 selenium.fireEvent("name=field117 value=3", "focus"); 147 selenium.check("name=field117 value=3"); 148 selenium.fireEvent("name=field117 value=3", "blur"); 149 for (int second = 0; ; second++) { 150 if (second >= 60) { 151 Assert.fail("timeout"); 152 } 153 try { 154 if (!selenium.isElementPresent("//input[@name='field117']/../../../img[@alt='Error']")) { 155 break; 156 } 157 } catch (Exception e) { 158 } 159 Thread.sleep(1000); 160 } 161 162 Assert.assertFalse(selenium.isElementPresent("name=field117 value=1@aria-invalid")); 163 Assert.assertTrue(selenium.getAttribute("name=field117 value=3@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 164 Assert.assertFalse(selenium.isElementPresent("//input[@name='field117']/../../../img[@alt='Error']")); 165 selenium.fireEvent("name=bField1", "focus"); 166 selenium.uncheck("name=bField1"); 167 selenium.fireEvent("name=bField1", "blur"); 168 Assert.assertEquals("true", selenium.getAttribute("name=bField1@aria-invalid")); 169 Assert.assertTrue(selenium.getAttribute("name=bField1@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 170 Assert.assertTrue(selenium.isElementPresent( 171 "//input[@name='bField1' and following-sibling::img[@alt='Error']]")); 172 selenium.fireEvent("name=bField1", "focus"); 173 selenium.check("name=bField1"); 174 selenium.fireEvent("name=bField1", "blur"); 175 Assert.assertFalse(selenium.isElementPresent("name=bField1@aria-invalid")); 176 Assert.assertTrue(selenium.getAttribute("name=bField1@class").matches("^[\\s\\S]*valid[\\s\\S]*$")); 177 Assert.assertFalse(selenium.isElementPresent( 178 "//input[@name='bField1' and following-sibling::img[@alt='Error']]")); 179 selenium.fireEvent("name=field114 value=3", "focus"); 180 selenium.uncheck("name=field114 value=3"); 181 selenium.uncheck("name=field114 value=4"); 182 selenium.fireEvent("name=field114", "blur"); 183 for (int second = 0; ; second++) { 184 if (second >= 60) { 185 Assert.fail("timeout"); 186 } 187 try { 188 if (selenium.isElementPresent("//input[@name='field114']/../../../img[@alt='Error']")) { 189 break; 190 } 191 } catch (Exception e) { 192 } 193 Thread.sleep(1000); 194 } 195 196 Assert.assertEquals("true", selenium.getAttribute("name=field114 value=1@aria-invalid")); 197 Assert.assertTrue(selenium.getAttribute("name=field114 value=1@class").matches("^[\\s\\S]*error[\\s\\S]*$")); 198 Assert.assertTrue(selenium.isElementPresent("//input[@name='field114']/../../../img[@alt='Error']")); 199 selenium.fireEvent("name=field114 value=3", "focus"); 200 selenium.check("name=field114 value=3"); 201 selenium.check("name=field114 value=4"); 202 selenium.fireEvent("name=field114", "blur"); 203 for (int second = 0; ; second++) { 204 if (second >= 60) { 205 Assert.fail("timeout"); 206 } 207 try { 208 if (!selenium.isElementPresent("//input[@name='field114']/../../../img[@alt='Error']")) { 209 break; 210 } 211 } catch (Exception e) { 212 } 213 Thread.sleep(1000); 214 } 215 216 Assert.assertFalse(selenium.isElementPresent("name=field114 value=1@aria-invalid")); 217 Assert.assertFalse(selenium.isElementPresent("//input[@name='field114']/../../../img[@alt='Error']")); 218 } 219 220 @After 221 public void tearDown() throws Exception { 222 selenium.stop(); 223 } 224 }