Skip to content

Commit e792a8c

Browse files
appium#846: listeners
1 parent fa3ede2 commit e792a8c

File tree

8 files changed

+105
-2
lines changed

8 files changed

+105
-2
lines changed

src/main/java/io/appium/java_client/events/DefaultAspect.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ class DefaultAspect {
8383
+ ".rotate(..))";
8484
private static final String EXECUTION_CONTEXT = "execution(* org.openqa.selenium.ContextAware."
8585
+ "context(..))";
86+
private static final String EXECUTION_SWITCH_TO_WINDOW = "execution(* org.openqa.selenium.WebDriver.TargetLocator"
87+
+ ".window(..))";
8688
private static final String AROUND = "execution(* org.openqa.selenium.WebDriver.*(..)) || "
8789
+ "execution(* org.openqa.selenium.WebElement.*(..)) || "
8890
+ "execution(* org.openqa.selenium.WebDriver.Navigation.*(..)) || "
@@ -463,6 +465,24 @@ public void afterMaximization(JoinPoint joinPoint) throws Throwable {
463465
}
464466
}
465467

468+
@Before(EXECUTION_SWITCH_TO_WINDOW)
469+
public void beforeSwitchToWindow(JoinPoint joinPoint) throws Throwable {
470+
try {
471+
listener.beforeSwitchToWindow(castArgument(joinPoint, 0), driver);
472+
} catch (Throwable t) {
473+
throw getRootCause(t);
474+
}
475+
}
476+
477+
@After(EXECUTION_SWITCH_TO_WINDOW)
478+
public void afterSwitchToWindow(JoinPoint joinPoint) throws Throwable {
479+
try {
480+
listener.afterSwitchToWindow(castArgument(joinPoint, 0), driver);
481+
} catch (Throwable t) {
482+
throw getRootCause(t);
483+
}
484+
}
485+
466486
@Before(EXECUTION_ROTATE)
467487
public void beforeRotation(JoinPoint joinPoint) throws Throwable {
468488
try {

src/main/java/io/appium/java_client/events/DefaultListener.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ public void afterWindowIsMoved(WebDriver driver, WebDriver.Window window, Point
209209
((WindowEventListener) dispatcher).afterWindowIsMaximized(driver, window);
210210
}
211211

212+
@Override
213+
public void beforeSwitchToWindow(String windowName, WebDriver driver) {
214+
((WebDriverEventListener) dispatcher).beforeSwitchToWindow(windowName, driver);
215+
}
216+
217+
@Override
218+
public void afterSwitchToWindow(String windowName, WebDriver driver) {
219+
((WebDriverEventListener) dispatcher).afterSwitchToWindow(windowName, driver);
220+
}
221+
212222
@Override public void beforeSwitchingToContext(WebDriver driver, String context) {
213223
((ContextEventListener) dispatcher).beforeSwitchingToContext(driver, context);
214224
}

src/main/java/io/appium/java_client/events/api/general/WindowEventListener.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,20 @@ void afterWindowIsMoved(WebDriver driver, WebDriver.Window window,
7878
* @param window is the window which has been maximized
7979
*/
8080
void afterWindowIsMaximized(WebDriver driver, WebDriver.Window window);
81+
82+
/**
83+
* This action will be performed each time before
84+
* {@link org.openqa.selenium.WebDriver.TargetLocator#window(java.lang.String)}.
85+
*
86+
* @param driver WebDriver
87+
*/
88+
void beforeSwitchToWindow(String windowName, WebDriver driver);
89+
90+
/**
91+
* This action will be performed each time after
92+
* {@link org.openqa.selenium.WebDriver.TargetLocator#window(java.lang.String)}.
93+
*
94+
* @param driver WebDriver
95+
*/
96+
void afterSwitchToWindow(String windowName, WebDriver driver);
8197
}

src/test/java/io/appium/java_client/events/BaseListenerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ protected boolean assertThatWindowListenerWorks(EmptyWebDriver driver, TestListe
270270

271271
window.maximize();
272272

273+
driver.switchTo().window("Test window");
274+
273275
assertThat(listener.messages,
274276
contains(prefix + "Attempt to change size of the window. The height is " + d.getHeight()
275277
+ " the width is " + d.getWidth(),
@@ -280,7 +282,9 @@ protected boolean assertThatWindowListenerWorks(EmptyWebDriver driver, TestListe
280282
prefix + "The position the window has been changed. The X is " + p.getX()
281283
+ " the Y is " + p.getY(),
282284
prefix + "Attempt to maximize the window.",
283-
prefix + "The window has been maximized"));
285+
prefix + "The window has been maximized",
286+
prefix + "Attempt to switch to window Test window",
287+
prefix + "driver is switched to window Test window"));
284288
return true;
285289
} finally {
286290
listener.messages.clear();

src/test/java/io/appium/java_client/events/WebDriverEventListenerCompatibilityTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package io.appium.java_client.events;
22

3+
import static org.hamcrest.Matchers.contains;
34
import static org.hamcrest.core.Is.is;
45
import static org.hamcrest.core.IsCollectionContaining.hasItems;
56
import static org.junit.Assert.assertThat;
67

78
import io.appium.java_client.events.listeners.AppiumListener;
89
import io.appium.java_client.events.listeners.SingleListeners;
10+
import io.appium.java_client.events.listeners.TestListener;
911
import org.junit.BeforeClass;
1012
import org.junit.FixMethodOrder;
1113
import org.junit.Test;
1214
import org.junit.runners.MethodSorters;
1315
import org.openqa.selenium.Alert;
16+
import org.openqa.selenium.Dimension;
17+
import org.openqa.selenium.Point;
18+
import org.openqa.selenium.WebDriver;
1419

1520
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
1621
public class WebDriverEventListenerCompatibilityTest extends BaseListenerTest {
@@ -71,7 +76,6 @@ public void alertEventTest() {
7176
WEBDRIVER_EVENT_LISTENER + "The alert was accepted",
7277
WEBDRIVER_EVENT_LISTENER + "Attempt to dismiss alert",
7378
WEBDRIVER_EVENT_LISTENER + "The alert was dismissed"));
74-
assertThat(listener.messages.size(), is(4));
7579
} finally {
7680
listener.messages.clear();
7781
}
@@ -82,4 +86,17 @@ public void exceptionEventTest() {
8286
assertThat(super.assertThatExceptionListenerWorks(driver, listener, WEBDRIVER_EVENT_LISTENER),
8387
is(true));
8488
}
89+
90+
@Test
91+
public void windowListenerTest() {
92+
try {
93+
driver.switchTo().window("Test window");
94+
assertThat(listener.messages,
95+
hasItems(WEBDRIVER_EVENT_LISTENER + "Attempt to switch to window Test window",
96+
WEBDRIVER_EVENT_LISTENER + "driver is switched to window Test window"));
97+
} finally {
98+
listener.messages.clear();
99+
}
100+
101+
}
85102
}

src/test/java/io/appium/java_client/events/listeners/AppiumListener.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.appium.java_client.events.listeners;
22

3+
import static java.lang.String.format;
4+
35
import io.appium.java_client.events.api.general.AppiumWebDriverEventListener;
46
import org.openqa.selenium.By;
57
import org.openqa.selenium.WebDriver;
@@ -112,4 +114,14 @@ public void beforeAlertDismiss(WebDriver driver) {
112114
@Override public void onException(Throwable throwable, WebDriver driver) {
113115
messages.add("WebDriverEventListener: The exception was thrown: " + throwable.getClass());
114116
}
117+
118+
@Override
119+
public void beforeSwitchToWindow(String windowName, WebDriver driver) {
120+
messages.add(format("WebDriverEventListener: Attempt to switch to window %s", windowName));
121+
}
122+
123+
@Override
124+
public void afterSwitchToWindow(String windowName, WebDriver driver) {
125+
messages.add(format("WebDriverEventListener: driver is switched to window %s", windowName));
126+
}
115127
}

src/test/java/io/appium/java_client/events/listeners/WindowListener.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.appium.java_client.events.listeners;
22

3+
import static java.lang.String.format;
4+
35
import io.appium.java_client.events.api.general.WindowEventListener;
46
import org.openqa.selenium.Dimension;
57
import org.openqa.selenium.Point;
@@ -42,4 +44,14 @@ public void afterWindowIsMoved(WebDriver driver, WebDriver.Window window, Point
4244
@Override public void afterWindowIsMaximized(WebDriver driver, WebDriver.Window window) {
4345
messages.add("The window has been maximized");
4446
}
47+
48+
@Override
49+
public void beforeSwitchToWindow(String windowName, WebDriver driver) {
50+
messages.add(format("Attempt to switch to window %s", windowName));
51+
}
52+
53+
@Override
54+
public void afterSwitchToWindow(String windowName, WebDriver driver) {
55+
messages.add(format("driver is switched to window %s", windowName));
56+
}
4557
}

src/test/java/io/appium/java_client/events/listeners/WindowListener2.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.appium.java_client.events.listeners;
22

3+
import static java.lang.String.format;
4+
35
import io.appium.java_client.events.api.general.WindowEventListener;
46
import org.openqa.selenium.Dimension;
57
import org.openqa.selenium.Point;
@@ -46,4 +48,14 @@ public void afterWindowIsMoved(WebDriver driver, WebDriver.Window window, Point
4648
@Override public void afterWindowIsMaximized(WebDriver driver, WebDriver.Window window) {
4749
messages.add("Externally defined listener: The window has been maximized");
4850
}
51+
52+
@Override
53+
public void beforeSwitchToWindow(String windowName, WebDriver driver) {
54+
messages.add(format("Externally defined listener: Attempt to switch to window %s", windowName));
55+
}
56+
57+
@Override
58+
public void afterSwitchToWindow(String windowName, WebDriver driver) {
59+
messages.add(format("Externally defined listener: driver is switched to window %s", windowName));
60+
}
4961
}

0 commit comments

Comments
 (0)