Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

PopupDateFieldExtendedRangeTest.java 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. /*
  2. * Copyright 2000-2014 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.tests.components.datefield;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertFalse;
  19. import static org.junit.Assert.assertTrue;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import org.junit.Before;
  23. import org.junit.Test;
  24. import org.openqa.selenium.Keys;
  25. import org.openqa.selenium.WebElement;
  26. import org.openqa.selenium.interactions.Actions;
  27. import com.vaadin.testbench.By;
  28. import com.vaadin.testbench.elements.ButtonElement;
  29. import com.vaadin.testbench.elements.DateFieldElement;
  30. import com.vaadin.testbench.parallel.BrowserUtil;
  31. import com.vaadin.tests.tb3.MultiBrowserTest;
  32. /**
  33. * Tests contents and functionality of PopupDateField's popup.
  34. *
  35. * @author Vaadin Ltd
  36. */
  37. public class PopupDateFieldExtendedRangeTest extends MultiBrowserTest {
  38. @Override
  39. @Before
  40. public void setup() throws Exception {
  41. super.setup();
  42. openTestURL();
  43. }
  44. @Test
  45. public void testFirstDateField() {
  46. List<DateFieldElement> dateFields = $(DateFieldElement.class).all();
  47. assertEquals("unexpected amount of datefields", 3, dateFields.size());
  48. DateFieldElement dateField = dateFields.get(0);
  49. // open the popup
  50. dateField.findElement(By.tagName("button")).click();
  51. assertTrue("popup not found when there should be one",
  52. isElementPresent(By.className("v-datefield-popup")));
  53. // verify contents
  54. WebElement popup = findElement(By.className("v-datefield-popup"));
  55. assertEquals(
  56. "unexpected month",
  57. "tammikuu 2011",
  58. popup.findElements(
  59. By.className("v-datefield-calendarpanel-month")).get(1)
  60. .getText());
  61. List<WebElement> headerElements = popup.findElement(
  62. By.className("v-datefield-calendarpanel-weekdays"))
  63. .findElements(By.tagName("td"));
  64. List<WebElement> weekdays = new ArrayList<WebElement>();
  65. for (WebElement headerElement : headerElements) {
  66. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  67. weekdays.add(headerElement);
  68. }
  69. }
  70. assertEquals("unexpected weekday count", 7, weekdays.size());
  71. assertEquals("unexpected first day of week", "MA", weekdays.get(0)
  72. .getText());
  73. assertEquals(
  74. "unexpected weeknumber count",
  75. 0,
  76. popup.findElements(
  77. By.className("v-datefield-calendarpanel-weeknumber"))
  78. .size());
  79. assertEquals(
  80. "unexpected selection",
  81. "1",
  82. popup.findElement(
  83. By.className("v-datefield-calendarpanel-day-selected"))
  84. .getText());
  85. assertEquals(
  86. "unexpected focus",
  87. "1",
  88. popup.findElement(
  89. By.className("v-datefield-calendarpanel-day-focused"))
  90. .getText());
  91. List<WebElement> days = popup.findElements(By
  92. .className("v-datefield-calendarpanel-day"));
  93. assertEquals("unexpected day count", 42, days.size());
  94. assertEquals("unexpected day content", "27", days.get(0).getText());
  95. assertEquals("unexpected day content", "4", days.get(8).getText());
  96. assertEquals("unexpected day content", "21", days.get(25).getText());
  97. assertEquals("unexpected day content", "6", days.get(41).getText());
  98. // move to the previous month
  99. popup.findElement(By.className("v-datefield-calendarpanel-prevmonth"))
  100. .findElement(By.tagName("button")).click();
  101. // verify contents
  102. assertEquals(
  103. "unexpected month",
  104. "joulukuu 2010",
  105. popup.findElements(
  106. By.className("v-datefield-calendarpanel-month")).get(1)
  107. .getText());
  108. assertEquals(
  109. "unexpected selection",
  110. "1",
  111. popup.findElement(
  112. By.className("v-datefield-calendarpanel-day-selected"))
  113. .getText());
  114. assertEquals(
  115. "unexpected focus",
  116. 0,
  117. popup.findElements(
  118. By.className("v-datefield-calendarpanel-day-focused"))
  119. .size());
  120. days = popup
  121. .findElements(By.className("v-datefield-calendarpanel-day"));
  122. assertEquals("unexpected day count", 42, days.size());
  123. assertEquals("unexpected day content", "29", days.get(0).getText());
  124. assertEquals("unexpected day content", "7", days.get(8).getText());
  125. assertEquals("unexpected day content", "24", days.get(25).getText());
  126. assertEquals("unexpected day content", "9", days.get(41).getText());
  127. // move to the previous year
  128. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  129. .findElement(By.tagName("button")).click();
  130. // verify contents
  131. assertEquals(
  132. "unexpected month",
  133. "joulukuu 2009",
  134. popup.findElements(
  135. By.className("v-datefield-calendarpanel-month")).get(1)
  136. .getText());
  137. assertEquals(
  138. "unexpected selection",
  139. 0,
  140. popup.findElements(
  141. By.className("v-datefield-calendarpanel-day-selected"))
  142. .size());
  143. assertEquals(
  144. "unexpected focus",
  145. 0,
  146. popup.findElements(
  147. By.className("v-datefield-calendarpanel-day-focused"))
  148. .size());
  149. days = popup
  150. .findElements(By.className("v-datefield-calendarpanel-day"));
  151. assertEquals("unexpected day count", 42, days.size());
  152. assertEquals("unexpected day content", "30", days.get(0).getText());
  153. assertEquals("unexpected day content", "8", days.get(8).getText());
  154. assertEquals("unexpected day content", "25", days.get(25).getText());
  155. assertEquals("unexpected day content", "10", days.get(41).getText());
  156. // close the popup by clicking the button again
  157. dateField.findElement(By.tagName("button")).click();
  158. // TODO: remove this once #14405 has been fixed
  159. if (!getBrowsersExcludingIE().contains(getDesiredCapabilities())) {
  160. // click something else outside the popup to close it
  161. dateField.findElement(By.tagName("input")).click();
  162. }
  163. assertFalse("popup found when there should be none",
  164. isElementPresent(By.className("v-datefield-popup")));
  165. }
  166. @Test
  167. public void testSecondDateField() throws InterruptedException {
  168. DateFieldElement dateField = $(DateFieldElement.class).all().get(1);
  169. ButtonElement button = $(ButtonElement.class).first();
  170. // change the date
  171. button.click();
  172. sleep(100);
  173. // open the popup
  174. dateField.findElement(By.tagName("button")).click();
  175. assertTrue("popup not found when there should be one",
  176. isElementPresent(By.className("v-datefield-popup")));
  177. // verify contents
  178. WebElement popup = findElement(By.className("v-datefield-popup"));
  179. assertEquals(
  180. "unexpected month",
  181. "February 2010",
  182. popup.findElements(
  183. By.className("v-datefield-calendarpanel-month")).get(1)
  184. .getText());
  185. List<WebElement> headerElements = popup.findElement(
  186. By.className("v-datefield-calendarpanel-weekdays"))
  187. .findElements(By.tagName("td"));
  188. List<WebElement> weekdays = new ArrayList<WebElement>();
  189. for (WebElement headerElement : headerElements) {
  190. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  191. weekdays.add(headerElement);
  192. }
  193. }
  194. assertEquals("unexpected weekday count", 7, weekdays.size());
  195. assertEquals("unexpected first day of week", "SUN", weekdays.get(0)
  196. .getText());
  197. assertEquals(
  198. "unexpected weeknumber count",
  199. 0,
  200. popup.findElements(
  201. By.className("v-datefield-calendarpanel-weeknumber"))
  202. .size());
  203. assertEquals(
  204. "unexpected selection",
  205. "16",
  206. popup.findElement(
  207. By.className("v-datefield-calendarpanel-day-selected"))
  208. .getText());
  209. assertEquals(
  210. "unexpected focus",
  211. "16",
  212. popup.findElement(
  213. By.className("v-datefield-calendarpanel-day-focused"))
  214. .getText());
  215. List<WebElement> days = popup.findElements(By
  216. .className("v-datefield-calendarpanel-day"));
  217. assertEquals("unexpected day count", 42, days.size());
  218. assertEquals("unexpected day content", "31", days.get(0).getText());
  219. assertEquals("unexpected day content", "8", days.get(8).getText());
  220. assertEquals("unexpected day content", "25", days.get(25).getText());
  221. assertEquals("unexpected day content", "13", days.get(41).getText());
  222. // navigate down
  223. WebElement popupBody = popup.findElement(By
  224. .className("v-datefield-calendarpanel"));
  225. popupBody.sendKeys(Keys.ARROW_DOWN);
  226. // ensure the focus changed
  227. assertEquals(
  228. "unexpected focus",
  229. "23",
  230. popup.findElement(
  231. By.className("v-datefield-calendarpanel-day-focused"))
  232. .getText());
  233. // navigate down
  234. popupBody.sendKeys(Keys.ARROW_DOWN);
  235. // verify contents
  236. assertEquals(
  237. "unexpected month",
  238. "March 2010",
  239. popup.findElements(
  240. By.className("v-datefield-calendarpanel-month")).get(1)
  241. .getText());
  242. assertEquals(
  243. "unexpected selection",
  244. 0,
  245. popup.findElements(
  246. By.className("v-datefield-calendarpanel-day-selected"))
  247. .size());
  248. assertEquals(
  249. "unexpected focus",
  250. "2",
  251. popup.findElement(
  252. By.className("v-datefield-calendarpanel-day-focused"))
  253. .getText());
  254. days = popup
  255. .findElements(By.className("v-datefield-calendarpanel-day"));
  256. assertEquals("unexpected day count", 42, days.size());
  257. assertEquals("unexpected day content", "28", days.get(0).getText());
  258. assertEquals("unexpected day content", "8", days.get(8).getText());
  259. assertEquals("unexpected day content", "25", days.get(25).getText());
  260. assertEquals("unexpected day content", "10", days.get(41).getText());
  261. // navigate left
  262. popupBody = popup
  263. .findElement(By.className("v-datefield-calendarpanel"));
  264. popupBody.sendKeys(Keys.ARROW_LEFT);
  265. // ensure the focus changed
  266. assertEquals(
  267. "unexpected focus",
  268. "1",
  269. popup.findElement(
  270. By.className("v-datefield-calendarpanel-day-focused"))
  271. .getText());
  272. // navigate left
  273. popupBody.sendKeys(Keys.ARROW_LEFT);
  274. // verify contents
  275. assertEquals(
  276. "unexpected month",
  277. "February 2010",
  278. popup.findElements(
  279. By.className("v-datefield-calendarpanel-month")).get(1)
  280. .getText());
  281. assertEquals(
  282. "unexpected selection",
  283. "16",
  284. popup.findElement(
  285. By.className("v-datefield-calendarpanel-day-selected"))
  286. .getText());
  287. assertEquals(
  288. "unexpected focus",
  289. "28",
  290. popup.findElement(
  291. By.className("v-datefield-calendarpanel-day-focused"))
  292. .getText());
  293. days = popup
  294. .findElements(By.className("v-datefield-calendarpanel-day"));
  295. assertEquals("unexpected day count", 42, days.size());
  296. assertEquals("unexpected day content", "31", days.get(0).getText());
  297. assertEquals("unexpected day content", "8", days.get(8).getText());
  298. assertEquals("unexpected day content", "25", days.get(25).getText());
  299. assertEquals("unexpected day content", "13", days.get(41).getText());
  300. // close the popup by clicking the input field
  301. dateField.findElement(By.tagName("input")).click();
  302. assertFalse("popup found when there should be none",
  303. isElementPresent(By.className("v-datefield-popup")));
  304. }
  305. @Test
  306. public void testThirdDateField() throws InterruptedException {
  307. DateFieldElement dateField = $(DateFieldElement.class).all().get(2);
  308. ButtonElement button = $(ButtonElement.class).first();
  309. // change the date
  310. button.click();
  311. sleep(100);
  312. // open the popup
  313. dateField.findElement(By.tagName("button")).click();
  314. assertTrue("popup not found when there should be one",
  315. isElementPresent(By.className("v-datefield-popup")));
  316. // verify contents
  317. WebElement popup = findElement(By.className("v-datefield-popup"));
  318. assertEquals(
  319. "unexpected month",
  320. "helmikuu 2010",
  321. popup.findElements(
  322. By.className("v-datefield-calendarpanel-month")).get(1)
  323. .getText());
  324. List<WebElement> headerElements = popup.findElement(
  325. By.className("v-datefield-calendarpanel-weekdays"))
  326. .findElements(By.tagName("td"));
  327. List<WebElement> weekdays = new ArrayList<WebElement>();
  328. for (WebElement headerElement : headerElements) {
  329. if ("columnheader".equals(headerElement.getAttribute("role"))) {
  330. weekdays.add(headerElement);
  331. }
  332. }
  333. assertEquals("unexpected weekday count", 7, weekdays.size());
  334. assertEquals("unexpected first day of week", "MA", weekdays.get(0)
  335. .getText());
  336. List<WebElement> weeknumbers = popup.findElements(By
  337. .className("v-datefield-calendarpanel-weeknumber"));
  338. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  339. assertEquals("unexpected weeknumber content", "5", weeknumbers.get(0)
  340. .getText());
  341. assertEquals("unexpected weeknumber content", "10", weeknumbers.get(5)
  342. .getText());
  343. assertEquals(
  344. "unexpected selection",
  345. "16",
  346. popup.findElement(
  347. By.className("v-datefield-calendarpanel-day-selected"))
  348. .getText());
  349. assertEquals(
  350. "unexpected focus",
  351. "16",
  352. popup.findElement(
  353. By.className("v-datefield-calendarpanel-day-focused"))
  354. .getText());
  355. List<WebElement> days = popup.findElements(By
  356. .className("v-datefield-calendarpanel-day"));
  357. assertEquals("unexpected day count", 42, days.size());
  358. assertEquals("unexpected day content", "1", days.get(0).getText());
  359. assertEquals("unexpected day content", "9", days.get(8).getText());
  360. assertEquals("unexpected day content", "26", days.get(25).getText());
  361. assertEquals("unexpected day content", "14", days.get(41).getText());
  362. // navigate to previous month
  363. WebElement popupBody = popup.findElement(By
  364. .className("v-datefield-calendarpanel"));
  365. new Actions(driver).keyDown(Keys.SHIFT).perform();
  366. popupBody.sendKeys(Keys.ARROW_LEFT);
  367. new Actions(driver).keyUp(Keys.SHIFT).perform();
  368. // TODO: remove this once #14406 has been fixed
  369. if (BrowserUtil.isIE(getDesiredCapabilities())
  370. && !BrowserUtil.isIE8(getDesiredCapabilities())) {
  371. popup.findElement(
  372. By.className("v-datefield-calendarpanel-prevmonth"))
  373. .findElement(By.tagName("button")).click();
  374. }
  375. // verify contents
  376. assertEquals(
  377. "unexpected month",
  378. "tammikuu 2010",
  379. popup.findElements(
  380. By.className("v-datefield-calendarpanel-month")).get(1)
  381. .getText());
  382. weeknumbers = popup.findElements(By
  383. .className("v-datefield-calendarpanel-weeknumber"));
  384. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  385. assertEquals("unexpected weeknumber content", "53", weeknumbers.get(0)
  386. .getText());
  387. assertEquals("unexpected weeknumber content", "5", weeknumbers.get(5)
  388. .getText());
  389. assertEquals(
  390. "unexpected selection",
  391. 0,
  392. popup.findElements(
  393. By.className("v-datefield-calendarpanel-day-selected"))
  394. .size());
  395. // TODO: remove this check once #14406 has been fixed -- clicking the
  396. // button instead of navigating with arrow keys steals the focus
  397. if (!BrowserUtil.isIE(getDesiredCapabilities())
  398. || BrowserUtil.isIE8(getDesiredCapabilities())) {
  399. assertEquals(
  400. "unexpected focus",
  401. "16",
  402. popup.findElement(
  403. By.className("v-datefield-calendarpanel-day-focused"))
  404. .getText());
  405. }
  406. days = popup
  407. .findElements(By.className("v-datefield-calendarpanel-day"));
  408. assertEquals("unexpected day count", 42, days.size());
  409. assertEquals("unexpected day content", "28", days.get(0).getText());
  410. assertEquals("unexpected day content", "5", days.get(8).getText());
  411. assertEquals("unexpected day content", "22", days.get(25).getText());
  412. assertEquals("unexpected day content", "7", days.get(41).getText());
  413. // navigate to previous year
  414. new Actions(driver).keyDown(Keys.SHIFT).perform();
  415. popupBody.sendKeys(Keys.ARROW_DOWN);
  416. new Actions(driver).keyUp(Keys.SHIFT).perform();
  417. // TODO: remove this once #14406 has been fixed
  418. popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
  419. .findElement(By.tagName("button")).click();
  420. // verify contents
  421. assertEquals(
  422. "unexpected month",
  423. "tammikuu 2009",
  424. popup.findElements(
  425. By.className("v-datefield-calendarpanel-month")).get(1)
  426. .getText());
  427. weeknumbers = popup.findElements(By
  428. .className("v-datefield-calendarpanel-weeknumber"));
  429. assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
  430. assertEquals("unexpected weeknumber content", "1", weeknumbers.get(0)
  431. .getText());
  432. assertEquals("unexpected weeknumber content", "6", weeknumbers.get(5)
  433. .getText());
  434. assertEquals(
  435. "unexpected selection",
  436. 0,
  437. popup.findElements(
  438. By.className("v-datefield-calendarpanel-day-selected"))
  439. .size());
  440. // TODO: remove this check once #14406 has been fixed -- clicking the
  441. // button instead of navigating with arrow keys steals the focus
  442. if (false) {
  443. assertEquals(
  444. "unexpected focus",
  445. "16",
  446. popup.findElement(
  447. By.className("v-datefield-calendarpanel-day-focused"))
  448. .getText());
  449. }
  450. days = popup
  451. .findElements(By.className("v-datefield-calendarpanel-day"));
  452. assertEquals("unexpected day count", 42, days.size());
  453. assertEquals("unexpected day content", "29", days.get(0).getText());
  454. assertEquals("unexpected day content", "6", days.get(8).getText());
  455. assertEquals("unexpected day content", "23", days.get(25).getText());
  456. assertEquals("unexpected day content", "8", days.get(41).getText());
  457. // close the popup by clicking an unrelated element
  458. button.click();
  459. assertFalse("popup found when there should be none",
  460. isElementPresent(By.className("v-datefield-popup")));
  461. }
  462. }