123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- package com.vaadin.tests.components.datefield;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import org.junit.Before;
- import org.junit.Test;
- import org.openqa.selenium.Keys;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.interactions.Actions;
-
- import com.vaadin.testbench.By;
- import com.vaadin.testbench.elements.ButtonElement;
- import com.vaadin.testbench.elements.DateFieldElement;
- import com.vaadin.testbench.parallel.BrowserUtil;
- import com.vaadin.tests.tb3.MultiBrowserTest;
-
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertTrue;
-
- /**
- * Tests contents and functionality of PopupDateField's popup.
- *
- * @author Vaadin Ltd
- */
- public class PopupDateFieldExtendedRangeTest extends MultiBrowserTest {
-
- @Override
- @Before
- public void setup() throws Exception {
- super.setup();
- openTestURL();
- }
-
- @Test
- public void testFirstDateField() {
- List<DateFieldElement> dateFields = $(DateFieldElement.class).all();
- assertEquals("unexpected amount of datefields", 3, dateFields.size());
-
- DateFieldElement dateField = dateFields.get(0);
-
- // open the popup
- dateField.findElement(By.tagName("button")).click();
-
- assertTrue("popup not found when there should be one",
- isElementPresent(By.className("v-datefield-popup")));
-
- // verify contents
- WebElement popup = findElement(By.className("v-datefield-popup"));
- assertEquals("unexpected month", "tammikuu 2011", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- List<WebElement> headerElements = popup
- .findElement(By.className("v-datefield-calendarpanel-weekdays"))
- .findElements(By.tagName("td"));
- List<WebElement> weekdays = new ArrayList<>();
- for (WebElement headerElement : headerElements) {
- if ("columnheader".equals(headerElement.getAttribute("role"))) {
- weekdays.add(headerElement);
- }
- }
- assertEquals("unexpected weekday count", 7, weekdays.size());
- assertEquals("unexpected first day of week", "MA",
- weekdays.get(0).getText());
- assertEquals("unexpected weeknumber count", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-weeknumber"))
- .size());
- assertEquals("unexpected selection", "1",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-selected"))
- .getText());
- assertEquals("unexpected focus", "1",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
- List<WebElement> days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "27", days.get(0).getText());
- assertEquals("unexpected day content", "4", days.get(8).getText());
- assertEquals("unexpected day content", "21", days.get(25).getText());
- assertEquals("unexpected day content", "6", days.get(41).getText());
-
- // move to the previous month
- popup.findElement(By.className("v-datefield-calendarpanel-prevmonth"))
- .findElement(By.tagName("button")).click();
-
- // verify contents
- assertEquals("unexpected month", "joulukuu 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- assertEquals("unexpected selection", "1",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-selected"))
- .getText());
- assertEquals("unexpected focus", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-focused"))
- .size());
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "29", days.get(0).getText());
- assertEquals("unexpected day content", "7", days.get(8).getText());
- assertEquals("unexpected day content", "24", days.get(25).getText());
- assertEquals("unexpected day content", "9", days.get(41).getText());
-
- // move to the previous year
- popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
- .findElement(By.tagName("button")).click();
-
- // verify contents
- assertEquals("unexpected month", "joulukuu 2009", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- assertEquals("unexpected selection", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-selected"))
- .size());
- assertEquals("unexpected focus", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-focused"))
- .size());
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "30", days.get(0).getText());
- assertEquals("unexpected day content", "8", days.get(8).getText());
- assertEquals("unexpected day content", "25", days.get(25).getText());
- assertEquals("unexpected day content", "10", days.get(41).getText());
-
- // close the popup by clicking the button again
- dateField.findElement(By.tagName("button")).click();
-
- assertFalse("popup found when there should be none",
- isElementPresent(By.className("v-datefield-popup")));
- }
-
- @Test
- public void testSecondDateField() throws InterruptedException {
- DateFieldElement dateField = $(DateFieldElement.class).all().get(1);
- ButtonElement button = $(ButtonElement.class).first();
-
- // change the date
- button.click();
- sleep(100);
-
- // open the popup
- dateField.findElement(By.tagName("button")).click();
-
- assertTrue("popup not found when there should be one",
- isElementPresent(By.className("v-datefield-popup")));
-
- // verify contents
- WebElement popup = findElement(By.className("v-datefield-popup"));
- assertEquals("unexpected month", "February 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- List<WebElement> headerElements = popup
- .findElement(By.className("v-datefield-calendarpanel-weekdays"))
- .findElements(By.tagName("td"));
- List<WebElement> weekdays = new ArrayList<>();
- for (WebElement headerElement : headerElements) {
- if ("columnheader".equals(headerElement.getAttribute("role"))) {
- weekdays.add(headerElement);
- }
- }
- assertEquals("unexpected weekday count", 7, weekdays.size());
- assertEquals("unexpected first day of week", "SUN",
- weekdays.get(0).getText());
- assertEquals("unexpected weeknumber count", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-weeknumber"))
- .size());
- assertEquals("unexpected selection", "16",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-selected"))
- .getText());
- assertEquals("unexpected focus", "16",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
- List<WebElement> days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "31", days.get(0).getText());
- assertEquals("unexpected day content", "8", days.get(8).getText());
- assertEquals("unexpected day content", "25", days.get(25).getText());
- assertEquals("unexpected day content", "13", days.get(41).getText());
-
- // navigate down
- WebElement popupBody = popup
- .findElement(By.className("v-datefield-calendarpanel"));
- popupBody.sendKeys(Keys.ARROW_DOWN);
-
- // ensure the focus changed
- assertEquals("unexpected focus", "23",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
-
- // navigate down
- popupBody.sendKeys(Keys.ARROW_DOWN);
-
- // verify contents
- assertEquals("unexpected month", "March 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- assertEquals("unexpected selection", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-selected"))
- .size());
- assertEquals("unexpected focus", "2",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "28", days.get(0).getText());
- assertEquals("unexpected day content", "8", days.get(8).getText());
- assertEquals("unexpected day content", "25", days.get(25).getText());
- assertEquals("unexpected day content", "10", days.get(41).getText());
-
- // navigate left
- popupBody = popup
- .findElement(By.className("v-datefield-calendarpanel"));
- popupBody.sendKeys(Keys.ARROW_LEFT);
-
- // ensure the focus changed
- assertEquals("unexpected focus", "1",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
-
- // navigate left
- popupBody.sendKeys(Keys.ARROW_LEFT);
-
- // verify contents
- assertEquals("unexpected month", "February 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- assertEquals("unexpected selection", "16",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-selected"))
- .getText());
- assertEquals("unexpected focus", "28",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "31", days.get(0).getText());
- assertEquals("unexpected day content", "8", days.get(8).getText());
- assertEquals("unexpected day content", "25", days.get(25).getText());
- assertEquals("unexpected day content", "13", days.get(41).getText());
-
- // close the popup by clicking the input field
- dateField.findElement(By.tagName("input")).click();
-
- assertFalse("popup found when there should be none",
- isElementPresent(By.className("v-datefield-popup")));
- }
-
- @Test
- public void testThirdDateField() throws InterruptedException {
- DateFieldElement dateField = $(DateFieldElement.class).all().get(2);
- ButtonElement button = $(ButtonElement.class).first();
-
- // change the date
- button.click();
- sleep(100);
-
- // open the popup
- dateField.findElement(By.tagName("button")).click();
-
- assertTrue("popup not found when there should be one",
- isElementPresent(By.className("v-datefield-popup")));
-
- // verify contents
- WebElement popup = findElement(By.className("v-datefield-popup"));
- assertEquals("unexpected month", "helmikuu 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- List<WebElement> headerElements = popup
- .findElement(By.className("v-datefield-calendarpanel-weekdays"))
- .findElements(By.tagName("td"));
- List<WebElement> weekdays = new ArrayList<>();
- for (WebElement headerElement : headerElements) {
- if ("columnheader".equals(headerElement.getAttribute("role"))) {
- weekdays.add(headerElement);
- }
- }
- assertEquals("unexpected weekday count", 7, weekdays.size());
- assertEquals("unexpected first day of week", "MA",
- weekdays.get(0).getText());
- List<WebElement> weeknumbers = popup.findElements(
- By.className("v-datefield-calendarpanel-weeknumber"));
- assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
- assertEquals("unexpected weeknumber content", "5",
- weeknumbers.get(0).getText());
- assertEquals("unexpected weeknumber content", "10",
- weeknumbers.get(5).getText());
- assertEquals("unexpected selection", "16",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-selected"))
- .getText());
- assertEquals("unexpected focus", "16",
- popup.findElement(
- By.className("v-datefield-calendarpanel-day-focused"))
- .getText());
- List<WebElement> days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "1", days.get(0).getText());
- assertEquals("unexpected day content", "9", days.get(8).getText());
- assertEquals("unexpected day content", "26", days.get(25).getText());
- assertEquals("unexpected day content", "14", days.get(41).getText());
-
- // navigate to previous month
- WebElement popupBody = popup
- .findElement(By.className("v-datefield-calendarpanel"));
- popupBody.sendKeys(Keys.SHIFT, Keys.ARROW_LEFT);
-
- // TODO: remove this once #14406 has been fixed
- if (BrowserUtil.isIE(getDesiredCapabilities())
- || BrowserUtil.isFirefox(getDesiredCapabilities())) {
- popup.findElement(
- By.className("v-datefield-calendarpanel-prevmonth"))
- .findElement(By.tagName("button")).click();
- }
-
- // verify contents
- assertEquals("unexpected month", "tammikuu 2010", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- weeknumbers = popup.findElements(
- By.className("v-datefield-calendarpanel-weeknumber"));
- assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
- assertEquals("unexpected weeknumber content", "53",
- weeknumbers.get(0).getText());
- assertEquals("unexpected weeknumber content", "5",
- weeknumbers.get(5).getText());
- assertEquals("unexpected selection", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-selected"))
- .size());
- // TODO: remove this check once #14406 has been fixed -- clicking the
- // button instead of navigating with arrow keys steals the focus
- if (!BrowserUtil.isIE(getDesiredCapabilities())
- && !BrowserUtil.isFirefox(getDesiredCapabilities())) {
- assertEquals("unexpected focus", "16",
- popup.findElement(By
- .className("v-datefield-calendarpanel-day-focused"))
- .getText());
- }
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "28", days.get(0).getText());
- assertEquals("unexpected day content", "5", days.get(8).getText());
- assertEquals("unexpected day content", "22", days.get(25).getText());
- assertEquals("unexpected day content", "7", days.get(41).getText());
-
- // navigate to previous year
- new Actions(driver).sendKeys(Keys.chord(Keys.SHIFT, Keys.ARROW_DOWN));
-
- // TODO: remove this once #14406 has been fixed
- popup.findElement(By.className("v-datefield-calendarpanel-prevyear"))
- .findElement(By.tagName("button")).click();
-
- // verify contents
- assertEquals("unexpected month", "tammikuu 2009", popup
- .findElements(By.className("v-datefield-calendarpanel-month"))
- .get(1).getText());
- weeknumbers = popup.findElements(
- By.className("v-datefield-calendarpanel-weeknumber"));
- assertEquals("unexpected weeknumber count", 6, weeknumbers.size());
- assertEquals("unexpected weeknumber content", "1",
- weeknumbers.get(0).getText());
- assertEquals("unexpected weeknumber content", "6",
- weeknumbers.get(5).getText());
- assertEquals("unexpected selection", 0,
- popup.findElements(
- By.className("v-datefield-calendarpanel-day-selected"))
- .size());
- // TODO: remove this check once #14406 has been fixed -- clicking the
- // button instead of navigating with arrow keys steals the focus
- if (false) {
- assertEquals("unexpected focus", "16",
- popup.findElement(By
- .className("v-datefield-calendarpanel-day-focused"))
- .getText());
- }
- days = popup
- .findElements(By.className("v-datefield-calendarpanel-day"));
- assertEquals("unexpected day count", 42, days.size());
- assertEquals("unexpected day content", "29", days.get(0).getText());
- assertEquals("unexpected day content", "6", days.get(8).getText());
- assertEquals("unexpected day content", "23", days.get(25).getText());
- assertEquals("unexpected day content", "8", days.get(41).getText());
-
- // close the popup by clicking an unrelated element
- button.click();
-
- assertFalse("popup found when there should be none",
- isElementPresent(By.className("v-datefield-popup")));
- }
-
- }
|