You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PopupDateFieldExtendedRangeTest.java 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. package com.vaadin.tests.components.datefield;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.openqa.selenium.Keys;
  7. import org.openqa.selenium.WebElement;
  8. import org.openqa.selenium.interactions.Actions;
  9. import com.vaadin.testbench.By;
  10. import com.vaadin.testbench.elements.ButtonElement;
  11. import com.vaadin.testbench.elements.DateFieldElement;
  12. import com.vaadin.testbench.parallel.BrowserUtil;
  13. import com.vaadin.tests.tb3.MultiBrowserTest;
  14. import static org.junit.Assert.assertEquals;
  15. import static org.junit.Assert.assertFalse;
  16. import static org.junit.Assert.assertTrue;
  17. /**
  18. * Tests contents and functionality of PopupDateField's popup.
  19. *
  20. * @author Vaadin Ltd
  21. */
  22. public class PopupDateFieldExtendedRangeTest extends MultiBrowserTest {
  23. @Override
  24. @Before
  25. public void setup() throws Exception {
  26. super.setup();
  27. openTestURL();
  28. }
  29. @Test
  30. public void testFirstDateField() {
  31. List<DateFieldElement> dateFields = $(DateFieldElement.class).all();
  32. assertEquals("unexpected amount of datefields", 3, dateFields.size());
  33. DateFieldElement dateField = dateFields.get(0);
  34. // open the popup
  35. dateField.findElement(By.tagName("button")).click();
  36. assertTrue("popup not found when there should be one",
  37. isElementPresent(By.className("v-datefield-popup")));
  38. // verify contents
  39. WebElement popup = findElement(By.className("v-datefield-popup"));
  40. assertEquals("unexpected month", "tammikuu 2011", popup
  41. .findElements(By.className("v-datefield-calendarpanel-month"))
  42. .get(1).getText());
  43. List<WebElement> headerElements = popup
  44. .findElement(By.className("v-datefield-calendarpanel-weekdays"))
  45. .findElements(By.tagName("td"));
  46. List<WebElement> weekdays = new ArrayList<>();
  47. for (WebElement headerElement : headerElements) {
  48. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  49. weekdays.add(headerElement);
  50. }
  51. }
  52. assertEquals("unexpected weekday count", 7, weekdays.size());
  53. assertEquals("unexpected first day of week", "MA",
  54. weekdays.get(0).getText());
  55. assertEquals("unexpected weeknumber count", 0,
  56. popup.findElements(
  57. By.className("v-datefield-calendarpanel-weeknumber"))
  58. .size());
  59. assertEquals("unexpected selection", "1",
  60. popup.findElement(
  61. By.className("v-datefield-calendarpanel-day-selected"))
  62. .getText());
  63. assertEquals("unexpected focus", "1",
  64. popup.findElement(
  65. By.className("v-datefield-calendarpanel-day-focused"))
  66. .getText());
  67. List<WebElement> days = popup
  68. .findElements(By.className("v-datefield-calendarpanel-day"));
  69. assertEquals("unexpected day count", 42, days.size());
  70. assertEquals("unexpected day content", "27", days.get(0).getText());
  71. assertEquals("unexpected day content", "4", days.get(8).getText());
  72. assertEquals("unexpected day content", "21", days.get(25).getText());
  73. assertEquals("unexpected day content", "6", days.get(41).getText());
  74. // move to the previous month
  75. popup.findElement(By.className("v-datefield-calendarpanel-prevmonth"))
  76. .findElement(By.tagName("button")).click();
  77. // verify contents
  78. assertEquals("unexpected month", "joulukuu 2010", popup
  79. .findElements(By.className("v-datefield-calendarpanel-month"))
  80. .get(1).getText());
  81. assertEquals("unexpected selection", "1",
  82. popup.findElement(
  83. By.className("v-datefield-calendarpanel-day-selected"))
  84. .getText());
  85. assertEquals("unexpected focus", 0,
  86. popup.findElements(
  87. By.className("v-datefield-calendarpanel-day-focused"))
  88. .size());
  89. days = popup
  90. .findElements(By.className("v-datefield-calendarpanel-day"));
  91. assertEquals("unexpected day count", 42, days.size());
  92. assertEquals("unexpected day content", "29", days.get(0).getText());
  93. assertEquals("unexpected day content", "7", days.get(8).getText());
  94. assertEquals("unexpected day content", "24", days.get(25).getText());
  95. assertEquals("unexpected day content", "9", days.get(41).getText());
  96. // move to the previous year
  97. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  98. .findElement(By.tagName("button")).click();
  99. // verify contents
  100. assertEquals("unexpected month", "joulukuu 2009", popup
  101. .findElements(By.className("v-datefield-calendarpanel-month"))
  102. .get(1).getText());
  103. assertEquals("unexpected selection", 0,
  104. popup.findElements(
  105. By.className("v-datefield-calendarpanel-day-selected"))
  106. .size());
  107. assertEquals("unexpected focus", 0,
  108. popup.findElements(
  109. By.className("v-datefield-calendarpanel-day-focused"))
  110. .size());
  111. days = popup
  112. .findElements(By.className("v-datefield-calendarpanel-day"));
  113. assertEquals("unexpected day count", 42, days.size());
  114. assertEquals("unexpected day content", "30", days.get(0).getText());
  115. assertEquals("unexpected day content", "8", days.get(8).getText());
  116. assertEquals("unexpected day content", "25", days.get(25).getText());
  117. assertEquals("unexpected day content", "10", days.get(41).getText());
  118. // close the popup by clicking the button again
  119. dateField.findElement(By.tagName("button")).click();
  120. assertFalse("popup found when there should be none",
  121. isElementPresent(By.className("v-datefield-popup")));
  122. }
  123. @Test
  124. public void testSecondDateField() throws InterruptedException {
  125. DateFieldElement dateField = $(DateFieldElement.class).all().get(1);
  126. ButtonElement button = $(ButtonElement.class).first();
  127. // change the date
  128. button.click();
  129. sleep(100);
  130. // open the popup
  131. dateField.findElement(By.tagName("button")).click();
  132. assertTrue("popup not found when there should be one",
  133. isElementPresent(By.className("v-datefield-popup")));
  134. // verify contents
  135. WebElement popup = findElement(By.className("v-datefield-popup"));
  136. assertEquals("unexpected month", "February 2010", popup
  137. .findElements(By.className("v-datefield-calendarpanel-month"))
  138. .get(1).getText());
  139. List<WebElement> headerElements = popup
  140. .findElement(By.className("v-datefield-calendarpanel-weekdays"))
  141. .findElements(By.tagName("td"));
  142. List<WebElement> weekdays = new ArrayList<>();
  143. for (WebElement headerElement : headerElements) {
  144. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  145. weekdays.add(headerElement);
  146. }
  147. }
  148. assertEquals("unexpected weekday count", 7, weekdays.size());
  149. assertEquals("unexpected first day of week", "SUN",
  150. weekdays.get(0).getText());
  151. assertEquals("unexpected weeknumber count", 0,
  152. popup.findElements(
  153. By.className("v-datefield-calendarpanel-weeknumber"))
  154. .size());
  155. assertEquals("unexpected selection", "16",
  156. popup.findElement(
  157. By.className("v-datefield-calendarpanel-day-selected"))
  158. .getText());
  159. assertEquals("unexpected focus", "16",
  160. popup.findElement(
  161. By.className("v-datefield-calendarpanel-day-focused"))
  162. .getText());
  163. List<WebElement> days = popup
  164. .findElements(By.className("v-datefield-calendarpanel-day"));
  165. assertEquals("unexpected day count", 42, days.size());
  166. assertEquals("unexpected day content", "31", days.get(0).getText());
  167. assertEquals("unexpected day content", "8", days.get(8).getText());
  168. assertEquals("unexpected day content", "25", days.get(25).getText());
  169. assertEquals("unexpected day content", "13", days.get(41).getText());
  170. // navigate down
  171. WebElement popupBody = popup
  172. .findElement(By.className("v-datefield-calendarpanel"));
  173. popupBody.sendKeys(Keys.ARROW_DOWN);
  174. // ensure the focus changed
  175. assertEquals("unexpected focus", "23",
  176. popup.findElement(
  177. By.className("v-datefield-calendarpanel-day-focused"))
  178. .getText());
  179. // navigate down
  180. popupBody.sendKeys(Keys.ARROW_DOWN);
  181. // verify contents
  182. assertEquals("unexpected month", "March 2010", popup
  183. .findElements(By.className("v-datefield-calendarpanel-month"))
  184. .get(1).getText());
  185. assertEquals("unexpected selection", 0,
  186. popup.findElements(
  187. By.className("v-datefield-calendarpanel-day-selected"))
  188. .size());
  189. assertEquals("unexpected focus", "2",
  190. popup.findElement(
  191. By.className("v-datefield-calendarpanel-day-focused"))
  192. .getText());
  193. days = popup
  194. .findElements(By.className("v-datefield-calendarpanel-day"));
  195. assertEquals("unexpected day count", 42, days.size());
  196. assertEquals("unexpected day content", "28", days.get(0).getText());
  197. assertEquals("unexpected day content", "8", days.get(8).getText());
  198. assertEquals("unexpected day content", "25", days.get(25).getText());
  199. assertEquals("unexpected day content", "10", days.get(41).getText());
  200. // navigate left
  201. popupBody = popup
  202. .findElement(By.className("v-datefield-calendarpanel"));
  203. popupBody.sendKeys(Keys.ARROW_LEFT);
  204. // ensure the focus changed
  205. assertEquals("unexpected focus", "1",
  206. popup.findElement(
  207. By.className("v-datefield-calendarpanel-day-focused"))
  208. .getText());
  209. // navigate left
  210. popupBody.sendKeys(Keys.ARROW_LEFT);
  211. // verify contents
  212. assertEquals("unexpected month", "February 2010", popup
  213. .findElements(By.className("v-datefield-calendarpanel-month"))
  214. .get(1).getText());
  215. assertEquals("unexpected selection", "16",
  216. popup.findElement(
  217. By.className("v-datefield-calendarpanel-day-selected"))
  218. .getText());
  219. assertEquals("unexpected focus", "28",
  220. popup.findElement(
  221. By.className("v-datefield-calendarpanel-day-focused"))
  222. .getText());
  223. days = popup
  224. .findElements(By.className("v-datefield-calendarpanel-day"));
  225. assertEquals("unexpected day count", 42, days.size());
  226. assertEquals("unexpected day content", "31", days.get(0).getText());
  227. assertEquals("unexpected day content", "8", days.get(8).getText());
  228. assertEquals("unexpected day content", "25", days.get(25).getText());
  229. assertEquals("unexpected day content", "13", days.get(41).getText());
  230. // close the popup by clicking the input field
  231. dateField.findElement(By.tagName("input")).click();
  232. assertFalse("popup found when there should be none",
  233. isElementPresent(By.className("v-datefield-popup")));
  234. }
  235. @Test
  236. public void testThirdDateField() throws InterruptedException {
  237. DateFieldElement dateField = $(DateFieldElement.class).all().get(2);
  238. ButtonElement button = $(ButtonElement.class).first();
  239. // change the date
  240. button.click();
  241. sleep(100);
  242. // open the popup
  243. dateField.findElement(By.tagName("button")).click();
  244. assertTrue("popup not found when there should be one",
  245. isElementPresent(By.className("v-datefield-popup")));
  246. // verify contents
  247. WebElement popup = findElement(By.className("v-datefield-popup"));
  248. assertEquals("unexpected month", "helmikuu 2010", popup
  249. .findElements(By.className("v-datefield-calendarpanel-month"))
  250. .get(1).getText());
  251. List<WebElement> headerElements = popup
  252. .findElement(By.className("v-datefield-calendarpanel-weekdays"))
  253. .findElements(By.tagName("td"));
  254. List<WebElement> weekdays = new ArrayList<>();
  255. for (WebElement headerElement : headerElements) {
  256. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  257. weekdays.add(headerElement);
  258. }
  259. }
  260. assertEquals("unexpected weekday count", 7, weekdays.size());
  261. assertEquals("unexpected first day of week", "MA",
  262. weekdays.get(0).getText());
  263. List<WebElement> weeknumbers = popup.findElements(
  264. By.className("v-datefield-calendarpanel-weeknumber"));
  265. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  266. assertEquals("unexpected weeknumber content", "5",
  267. weeknumbers.get(0).getText());
  268. assertEquals("unexpected weeknumber content", "10",
  269. weeknumbers.get(5).getText());
  270. assertEquals("unexpected selection", "16",
  271. popup.findElement(
  272. By.className("v-datefield-calendarpanel-day-selected"))
  273. .getText());
  274. assertEquals("unexpected focus", "16",
  275. popup.findElement(
  276. By.className("v-datefield-calendarpanel-day-focused"))
  277. .getText());
  278. List<WebElement> days = popup
  279. .findElements(By.className("v-datefield-calendarpanel-day"));
  280. assertEquals("unexpected day count", 42, days.size());
  281. assertEquals("unexpected day content", "1", days.get(0).getText());
  282. assertEquals("unexpected day content", "9", days.get(8).getText());
  283. assertEquals("unexpected day content", "26", days.get(25).getText());
  284. assertEquals("unexpected day content", "14", days.get(41).getText());
  285. // navigate to previous month
  286. WebElement popupBody = popup
  287. .findElement(By.className("v-datefield-calendarpanel"));
  288. popupBody.sendKeys(Keys.SHIFT, Keys.ARROW_LEFT);
  289. // TODO: remove this once #14406 has been fixed
  290. if (BrowserUtil.isIE(getDesiredCapabilities())
  291. || BrowserUtil.isFirefox(getDesiredCapabilities())) {
  292. popup.findElement(
  293. By.className("v-datefield-calendarpanel-prevmonth"))
  294. .findElement(By.tagName("button")).click();
  295. }
  296. // verify contents
  297. assertEquals("unexpected month", "tammikuu 2010", popup
  298. .findElements(By.className("v-datefield-calendarpanel-month"))
  299. .get(1).getText());
  300. weeknumbers = popup.findElements(
  301. By.className("v-datefield-calendarpanel-weeknumber"));
  302. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  303. assertEquals("unexpected weeknumber content", "53",
  304. weeknumbers.get(0).getText());
  305. assertEquals("unexpected weeknumber content", "5",
  306. weeknumbers.get(5).getText());
  307. assertEquals("unexpected selection", 0,
  308. popup.findElements(
  309. By.className("v-datefield-calendarpanel-day-selected"))
  310. .size());
  311. // TODO: remove this check once #14406 has been fixed -- clicking the
  312. // button instead of navigating with arrow keys steals the focus
  313. if (!BrowserUtil.isIE(getDesiredCapabilities())
  314. && !BrowserUtil.isFirefox(getDesiredCapabilities())) {
  315. assertEquals("unexpected focus", "16",
  316. popup.findElement(By
  317. .className("v-datefield-calendarpanel-day-focused"))
  318. .getText());
  319. }
  320. days = popup
  321. .findElements(By.className("v-datefield-calendarpanel-day"));
  322. assertEquals("unexpected day count", 42, days.size());
  323. assertEquals("unexpected day content", "28", days.get(0).getText());
  324. assertEquals("unexpected day content", "5", days.get(8).getText());
  325. assertEquals("unexpected day content", "22", days.get(25).getText());
  326. assertEquals("unexpected day content", "7", days.get(41).getText());
  327. // navigate to previous year
  328. new Actions(driver).sendKeys(Keys.chord(Keys.SHIFT, Keys.ARROW_DOWN));
  329. // TODO: remove this once #14406 has been fixed
  330. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  331. .findElement(By.tagName("button")).click();
  332. // verify contents
  333. assertEquals("unexpected month", "tammikuu 2009", popup
  334. .findElements(By.className("v-datefield-calendarpanel-month"))
  335. .get(1).getText());
  336. weeknumbers = popup.findElements(
  337. By.className("v-datefield-calendarpanel-weeknumber"));
  338. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  339. assertEquals("unexpected weeknumber content", "1",
  340. weeknumbers.get(0).getText());
  341. assertEquals("unexpected weeknumber content", "6",
  342. weeknumbers.get(5).getText());
  343. assertEquals("unexpected selection", 0,
  344. popup.findElements(
  345. By.className("v-datefield-calendarpanel-day-selected"))
  346. .size());
  347. // TODO: remove this check once #14406 has been fixed -- clicking the
  348. // button instead of navigating with arrow keys steals the focus
  349. if (false) {
  350. assertEquals("unexpected focus", "16",
  351. popup.findElement(By
  352. .className("v-datefield-calendarpanel-day-focused"))
  353. .getText());
  354. }
  355. days = popup
  356. .findElements(By.className("v-datefield-calendarpanel-day"));
  357. assertEquals("unexpected day count", 42, days.size());
  358. assertEquals("unexpected day content", "29", days.get(0).getText());
  359. assertEquals("unexpected day content", "6", days.get(8).getText());
  360. assertEquals("unexpected day content", "23", days.get(25).getText());
  361. assertEquals("unexpected day content", "8", days.get(41).getText());
  362. // close the popup by clicking an unrelated element
  363. button.click();
  364. assertFalse("popup found when there should be none",
  365. isElementPresent(By.className("v-datefield-popup")));
  366. }
  367. }