123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- package com.vaadin.tests.components.window;
-
- import static org.junit.Assert.assertTrue;
-
- import java.io.IOException;
-
- import org.junit.Test;
- import org.openqa.selenium.JavascriptExecutor;
- 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.WindowElement;
- import com.vaadin.tests.tb3.MultiBrowserTest;
-
- public class WindowHeaderButtonKeyboardActionsTest extends MultiBrowserTest {
-
- private static final String HEADER_CLASS = "v-window-header";
- private static final String RESTORE_BOX_CLASS = "v-window-restorebox";
- private static final String MAXIMIZE_BOX_CLASS = "v-window-maximizebox";
- private static final String CLOSE_BOX_CLASS = "v-window-closebox";
-
- @Override
- public void setup() throws Exception {
- super.setup();
- openTestURL();
-
- // open window before each test case
- waitForElementPresent(By.id("firstButton"));
- WebElement button = findElement(By.id("firstButton"));
- button.click();
-
- waitForElementPresent(By.id("testWindow"));
- }
-
- /**
- * Scenario: focus the close button of the opened window -> press ENTER key
- * -> window should be closed
- */
- @Test
- public void testCloseWindowWithEnter() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.ENTER);
- assertTrue("Window is not closed",
- findElements(By.className("v-window")).size() == 0);
- }
-
- /**
- * Scenario: focus the close button of the opened window -> press SPACE key
- * -> window should be closed
- */
- @Test
- public void testCloseWindowWithSpace() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.SPACE);
-
- assertTrue("Window is not closed",
- findElements(By.className("v-window")).size() == 0);
- }
-
- /**
- * Scenario: focus close button of opened window -> press keys DELETE,
- * ARROW_LEFT, and END -> window should remain open after all actions
- */
- @Test
- public void testIncorrectKeyInputDoesntFireClose() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.DELETE);
- assertTrue(
- "Window is closed by DELETE when close button is the focused element",
- findElements(By.className("v-window")).size() > 0);
-
- pressKeyAndWait(Keys.ARROW_LEFT);
- assertTrue(
- "Window is closed by ARROW_LEFT when close button is the focused element",
- findElements(By.className("v-window")).size() > 0);
-
- pressKeyAndWait(Keys.END);
- assertTrue(
- "Window is closed by END when close button is the focused element",
- findElements(By.className("v-window")).size() > 0);
- }
-
- /**
- * Scenario: close button of opened window is not focused -> press keys
- * ENTER and SPACE -> window should remain open after all actions
- */
- @Test
- public void testNonfocusedKeyDoesntCloseWindow() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- assertTrue("Window's close button is the focused element",
- !closeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.ENTER);
- assertTrue(
- "Window is closed by ENTER when close button is not the focused element",
- findElements(By.className("v-window")).size() > 0);
-
- pressKeyAndWait(Keys.SPACE);
- assertTrue(
- "Window is closed by SPACE when close button is not the focused element",
- findElements(By.className("v-window")).size() > 0);
- }
-
- /**
- * Scenario: focus close button of opened window -> press keys TAB, and
- * TAB+SHIFT in succession, shifting focus from and back to the button ->
- * press ENTER key -> window should be closed
- */
- @Test
- public void testShiftFocusAndCloseWindow() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.TAB);
- assertTrue("Window's close button is the focused element",
- !closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.SHIFT, Keys.TAB);
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.ENTER);
- assertTrue("Window is not closed when focus is shifted back-and-forth",
- findElements(By.className("v-window")).size() == 0);
- }
-
- /**
- * Scenario: focus close button of opened window -> click close button with
- * the mouse cursor -> window should be closed
- */
- @Test
- public void testMouseClickClosesWindowOnFocus() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(CLOSE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
- assertTrue("Window's close button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
-
- // click button with mouse and wait
- closeButton.click();
- sleep(200);
-
- assertTrue("Window is not closed when focused element is clicked",
- findElements(By.className("v-window")).size() == 0);
- }
-
- // Tests for maximize-restore button
-
- /**
- * Scenario: focus the maximize button of the opened window -> press ENTER
- * key -> window should be maximized
- */
- @Test
- public void testMaximizeWindowWithEnter() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's maximize button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.ENTER);
-
- assertTrue("Window is not maximized", windowElement.isMaximized());
- }
-
- /**
- * Scenario: focus the maximize button of the opened window -> press SPACE
- * key -> window should be maximized
- */
- @Test
- public void testMaximizeWindowWithSpace() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's maximize button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.SPACE);
-
- assertTrue("Window is not maximized", windowElement.isMaximized());
- }
-
- /**
- * Scenario: focus maximize button of opened window -> press keys DELETE,
- * ARROW_UP, and ADD -> window should remain open after all actions
- */
- @Test
- public void testIncorrectKeyInputDoesntFireMaximize() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement maximizeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(maximizeButton);
-
- assertTrue("Window's maximize button is not the focused element",
- maximizeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.DELETE);
- assertTrue(
- "Window is maximized by DELETE when maximize button is the focused element",
- !windowElement.isMaximized());
-
- pressKeyAndWait(Keys.ARROW_UP);
- assertTrue(
- "Window is cmaximized by ARROW_UP when maximize button is the focused element",
- !windowElement.isMaximized());
-
- pressKeyAndWait(Keys.ADD);
- assertTrue(
- "Window is maximized by ADD when maximize button is the focused element",
- !windowElement.isMaximized());
- }
-
- /**
- * Scenario: close button of opened window is not focused -> press keys
- * ENTER and SPACE -> window should remain non-maximized after all actions
- */
- @Test
- public void testNonfocusedKeyDoesntMaximizeWindow() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement maximizeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- assertTrue("Window's close button is the focused element",
- !maximizeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.ENTER);
- assertTrue(
- "Window is maximized by ENTER when maximize button is not the focused element",
- !windowElement.isMaximized());
-
- pressKeyAndWait(Keys.SPACE);
- assertTrue(
- "Window is maximized by SPACE when maximize button is not the focused element",
- !windowElement.isMaximized());
- }
-
- /**
- * Scenario: focus maximize button of opened window -> press keys TAB, and
- * TAB+SHIFT in succession, shifting focus from and back to the button ->
- * press ENTER key -> window should be maximized
- */
- @Test
- public void testShiftFocusAndMaximizeWindow() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement maximizeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(maximizeButton);
- assertTrue("Window's maximize button is not the focused element",
- maximizeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.TAB);
- assertTrue("Window's maximize button is the focused element",
- !maximizeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.SHIFT, Keys.TAB);
- assertTrue("Window's maximize button is not the focused element",
- maximizeButton.equals(driver.switchTo().activeElement()));
-
- pressKeyAndWait(Keys.ENTER);
- assertTrue(
- "Window is not maximized when focus is shifted back-and-forth",
- windowElement.isMaximized());
- }
-
- /**
- * Scenario: focus maximize button of opened window -> click maximize button
- * with mouse cursor -> window should be maximized
- */
- @Test
- public void testMouseClickMaximizesWindowOnFocus() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement maximizeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(maximizeButton);
- assertTrue("Window's maximize button is not the focused element",
- maximizeButton.equals(driver.switchTo().activeElement()));
-
- // click button with mouse and wait
- maximizeButton.click();
- sleep(100);
-
- assertTrue("Window is not maximized when focused element is clicked",
- windowElement.isMaximized());
- }
-
- /**
- * Scenario: focus the maximize button of the opened window -> press ENTER
- * key -> window should be maximized -> press ENTER key again -> window
- * should be restored
- */
- @Test
- public void testMaximizeAndRestoreWindowWithEnter() throws IOException {
-
- assertTrue("Window is not open",
- findElements(By.id("testWindow")).size() == 1);
-
- WindowElement windowElement = $(WindowElement.class).first();
- WebElement closeButton = windowElement
- .findElement(By.className(MAXIMIZE_BOX_CLASS));
- setFocusToElementAndWait(closeButton);
-
- assertTrue("Window's maximize button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.ENTER);
-
- assertTrue("Window is not maximized", windowElement.isMaximized());
-
- assertTrue("Window's maximize button is not the focused element",
- closeButton.equals(driver.switchTo().activeElement()));
- pressKeyAndWait(Keys.ENTER);
-
- assertTrue("Window remains maximized", !windowElement.isMaximized());
- }
-
- protected void setFocusToElementAndWait(WebElement element) {
- String elementId = element.getAttribute("id");
-
- ((JavascriptExecutor) getDriver()).executeScript(
- "document.getElementById('" + elementId + "').focus();",
- element);
- sleep(100);
- }
-
- protected void pressKeyAndWait(Keys... key) {
- new Actions(driver).sendKeys(key).build().perform();
- sleep(1000);
- }
- }
|