package org.fluentlenium.core.action; import org.assertj.core.api.Assertions; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.HasInputDevices; import org.openqa.selenium.interactions.Keyboard; import org.openqa.selenium.interactions.Mouse; import org.openqa.selenium.interactions.internal.Coordinates; import org.openqa.selenium.internal.Locatable; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class KeyboardElementActionsTest { @Mock private Keyboard keyboard; @Mock private Mouse mouse; @Mock private InputDevicesDriver driver; @Mock private LocatableElement element; @Mock private Coordinates coordinates; @Before public void before() { when(driver.getKeyboard()).thenReturn(keyboard); when(driver.getMouse()).thenReturn(mouse); when(element.getCoordinates()).thenReturn(coordinates); } @After public void after() { reset(driver, keyboard, mouse); } @Test public void testKeyDown() { KeyboardElementActions actions = new KeyboardElementActions(driver, element); actions.keyDown(Keys.SHIFT); verify(mouse).click(coordinates); verify(keyboard).pressKey(Keys.SHIFT); } @Test public void testKeyUp() { KeyboardElementActions actions = new KeyboardElementActions(driver, element); actions.keyUp(Keys.SHIFT); verify(mouse).click(coordinates); verify(keyboard).releaseKey(Keys.SHIFT); } @Test public void testSendKeys() { KeyboardElementActions actions = new KeyboardElementActions(driver, element); actions.sendKeys(Keys.ENTER, Keys.SPACE); verify(mouse).click(coordinates); verify(keyboard).sendKeys(Keys.ENTER, Keys.SPACE); } @Test public void testBasic() { KeyboardElementActions actions = new KeyboardElementActions(driver, element); Assertions.assertThat(actions.basic()).isSameAs(keyboard); } private abstract static class InputDevicesDriver implements WebDriver, HasInputDevices { // NOPMD AbstractNaming } private abstract static class LocatableElement implements WebElement, Locatable { // NOPMD AbstractNaming } }