|
|
@@ -0,0 +1,405 @@ |
|
|
|
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(100); |
|
|
|
} |
|
|
|
} |