Skip to content

Commit 24c0d66

Browse files
TikhomirovSergeypfoster-youitv
authored andcommitted
appium#242 fix: The general test and bug fixes
1 parent 62c733d commit 24c0d66

19 files changed

+466
-80
lines changed

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

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,22 +113,24 @@ void add(Collection<Listener> listeners) {
113113
}
114114

115115
@Before("execution(* org.openqa.selenium.WebDriver.Navigation.get(..)) || "
116-
+ "execution(* org.openqa.selenium.WebDriver.Navigation.to(..))")
116+
+ "execution(* org.openqa.selenium.WebDriver.Navigation.to(..)) || "
117+
+ "execution(* org.openqa.selenium.WebDriver.get(..))")
117118
public void beforeNavigateTo(JoinPoint joinPoint) throws Throwable {
118119
try {
119-
String url = String.valueOf(joinPoint.getArgs()[0]);
120-
listener.beforeNavigateTo(url, driver);
120+
Object url = String.valueOf(joinPoint.getArgs()[0]);
121+
listener.beforeNavigateTo(String.valueOf(url), driver);
121122
} catch (Throwable t) {
122123
throw getRootCause(t);
123124
}
124125
}
125126

126127
@After("execution(* org.openqa.selenium.WebDriver.Navigation.get(..)) || "
127-
+ "execution(* org.openqa.selenium.WebDriver.Navigation.to(..))")
128+
+ "execution(* org.openqa.selenium.WebDriver.Navigation.to(..)) || "
129+
+ "execution(* org.openqa.selenium.WebDriver.get(..))")
128130
public void afterNavigateTo(JoinPoint joinPoint) throws Throwable {
129131
try {
130-
String url = String.valueOf(joinPoint.getArgs()[0]);
131-
listener.afterNavigateTo(url, driver);
132+
Object url = String.valueOf(joinPoint.getArgs()[0]);
133+
listener.afterNavigateTo(String.valueOf(url), driver);
132134
} catch (Throwable t) {
133135
throw getRootCause(t);
134136
}
@@ -418,6 +420,26 @@ public void afterWindowIsMoved(JoinPoint joinPoint) throws Throwable {
418420
}
419421
}
420422

423+
@Before("execution(* org.openqa.selenium.WebDriver.Window.maximize(..))")
424+
public void beforeMaximization(JoinPoint joinPoint) throws Throwable {
425+
try {
426+
WebDriver.Window window = (WebDriver.Window) joinPoint.getTarget();
427+
listener.beforeWindowIsMaximized(driver, window);
428+
} catch (Throwable t) {
429+
throw getRootCause(t);
430+
}
431+
}
432+
433+
@After("execution(* org.openqa.selenium.WebDriver.Window.maximize(..))")
434+
public void afterMaximization(JoinPoint joinPoint) throws Throwable {
435+
try {
436+
WebDriver.Window window = (WebDriver.Window) joinPoint.getTarget();
437+
listener.afterWindowIsMaximized(driver, window);
438+
} catch (Throwable t) {
439+
throw getRootCause(t);
440+
}
441+
}
442+
421443
@Before("execution(* org.openqa.selenium.Rotatable.rotate(..))")
422444
public void beforeRotation(JoinPoint joinPoint) throws Throwable {
423445
try {
@@ -439,6 +461,27 @@ public void afterRotation(JoinPoint joinPoint) throws Throwable {
439461
}
440462
}
441463

464+
@Before("execution(* org.openqa.selenium.ContextAware.context(..))")
465+
public void beforeSwitchingToContext(JoinPoint joinPoint) throws Throwable {
466+
try {
467+
String context = (String) joinPoint.getArgs()[0];
468+
listener.beforeSwitchingToContext(driver, context);
469+
} catch (Throwable t) {
470+
throw getRootCause(t);
471+
}
472+
473+
}
474+
475+
@After("execution(* org.openqa.selenium.ContextAware.context(..))")
476+
public void afterSwitchingToContextn(JoinPoint joinPoint) throws Throwable {
477+
try {
478+
String context = (String) joinPoint.getArgs()[0];
479+
listener.afterSwitchingToContext(driver, context);
480+
} catch (Throwable t) {
481+
throw getRootCause(t);
482+
}
483+
}
484+
442485
@Around("execution(* org.openqa.selenium.WebDriver.*(..)) || "
443486
+ "execution(* org.openqa.selenium.WebElement.*(..)) || "
444487
+ "execution(* org.openqa.selenium.WebDriver.Navigation.*(..)) || "

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ <T extends WebDriver> T getListenableWebdriver(T driver, List<Listener> listener
5151
}
5252

5353
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
54-
@Bean(name = "webdriverAspect", destroyMethod = "quit")
54+
@Bean(name = "webdriverAspect")
5555
DefaultAspect getAspect() {
5656
DefaultAspect aspect = new DefaultAspect(context, driver);
5757
aspect.add(listeners);
5858
return aspect;
5959
}
6060

6161
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
62-
@Bean(name = COMPONENT_BEAN, destroyMethod = "quit")
62+
@Bean(name = COMPONENT_BEAN)
6363
Object getComponent(Object component) {
6464
return component;
6565
}

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,26 @@
3535
import org.openqa.selenium.WebDriver;
3636
import org.openqa.selenium.WebElement;
3737
import org.openqa.selenium.security.Credentials;
38+
import org.openqa.selenium.support.events.WebDriverEventListener;
3839

3940
import java.lang.reflect.Proxy;
4041
import java.util.ArrayList;
4142
import java.util.Collection;
4243
import java.util.List;
4344

44-
public class DefaultListener implements AppiumWebDriverEventListener, AlertEventListener,
45+
public class DefaultListener implements Listener, AppiumWebDriverEventListener, ListensToException,
46+
SearchingEventListener, NavigationEventListener,
47+
JavaScriptEventListener, ElementEventListener, AlertEventListener,
4548
WindowEventListener, ContextEventListener, RotationEventListener {
4649

4750
private final List<Listener> listeners = new ArrayList<>();
4851

4952
Object dispatcher = Proxy.newProxyInstance(Listener.class.getClassLoader(),
50-
new Class[] {AlertEventListener.class, AppiumWebDriverEventListener.class,
53+
new Class[] {AlertEventListener.class,
5154
ContextEventListener.class, ElementEventListener.class, JavaScriptEventListener.class,
5255
ListensToException.class, NavigationEventListener.class, RotationEventListener.class,
53-
SearchingEventListener.class, WindowEventListener.class},
56+
SearchingEventListener.class, WindowEventListener.class,
57+
WebDriverEventListener.class},
5458
new ListenerInvocationHandler(listeners));
5559

5660
@Override public void beforeNavigateTo(String url, WebDriver driver) {
@@ -86,11 +90,11 @@ public class DefaultListener implements AppiumWebDriverEventListener, AlertEvent
8690
}
8791

8892
@Override public void beforeFindBy(By by, WebElement element, WebDriver driver) {
89-
((SearchingEventListener) driver).beforeFindBy(by, element, driver);
93+
((SearchingEventListener) dispatcher).beforeFindBy(by, element, driver);
9094
}
9195

9296
@Override public void afterFindBy(By by, WebElement element, WebDriver driver) {
93-
((SearchingEventListener) driver).afterFindBy(by, element, driver);
97+
((SearchingEventListener) dispatcher).afterFindBy(by, element, driver);
9498
}
9599

96100
@Override public void beforeClickOn(WebElement element, WebDriver driver) {

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.appium.java_client.events;
1818

1919
import io.appium.java_client.events.api.Listener;
20+
import org.openqa.selenium.support.events.WebDriverEventListener;
2021

2122
import java.lang.reflect.InvocationHandler;
2223
import java.lang.reflect.Method;
@@ -30,10 +31,26 @@ public class ListenerInvocationHandler implements InvocationHandler {
3031
this.listeners = listeners;
3132
}
3233

34+
private Method findElementInWebDriverEventListener(Method m) {
35+
try {
36+
return WebDriverEventListener.class.getMethod(m.getName(), m.getParameterTypes());
37+
} catch (NoSuchMethodException e) {
38+
return null;
39+
}
40+
}
41+
3342
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
3443
for (Listener l: listeners) {
3544
if (method.getDeclaringClass().isAssignableFrom(l.getClass())) {
3645
method.invoke(l, args);
46+
return null;
47+
}
48+
49+
Method webDriverEventListenerMethod = findElementInWebDriverEventListener(method);
50+
if (webDriverEventListenerMethod != null
51+
&& WebDriverEventListener.class.isAssignableFrom(l.getClass())) {
52+
webDriverEventListenerMethod.invoke(l, args);
53+
return null;
3754
}
3855
}
3956
return null;

0 commit comments

Comments
 (0)