diff --git a/docs/The-event_firing.md b/docs/The-event_firing.md index 1dcbc1024..7fa0a58d6 100644 --- a/docs/The-event_firing.md +++ b/docs/The-event_firing.md @@ -1,151 +1,76 @@ -since 4.1.0 +since v8.0.0 # The purpose -This feature allows end user to organize the event logging on the client side. Also this feature may be useful in a binding with standard or custom reporting -frameworks. - - -# The API - -The API was designed the way which allows end user to select events (searching, navigation, exception throwing etc.) which should be listened to. It contains -the following list of interfaces (new items may be added further): - -- `io.appium.java_client.events.api.Listener` is the basic interface -- `io.appium.java_client.events.api.general.AlertEventListener` is for the listening to alerts -- `io.appium.java_client.events.api.general.ElementEventListener` is for the listening to actions related to elements -- `io.appium.java_client.events.api.general.JavaScriptEventListener` is for the listening to java script executing -- `io.appium.java_client.events.api.general.ListensToException` is for the listening to exceptions which are thrown -- `io.appium.java_client.events.api.general.NavigationEventListener` is for the listening to events related to navigation -- `io.appium.java_client.events.api.general.SearchingEventListener` is for the listening to events related to the searching. -- `io.appium.java_client.events.api.general.WindowEventListener` is for the listening to actions on a window -- `io.appium.java_client.events.api.mobile.ContextEventListener` is for the listening to the switching to mobile context -- `io.appium.java_client.events.api.mobile.RotationEventListener` is for the listening to screen rotation -- `io.appium.java_client.events.api.general.AppiumWebDriverEventListener` was added to provide the compatibility with -user's implementation of `org.openqa.selenium.support.events.WebDriverEventListener`. Also it extends some interfaces above. - -# Briefly about the engine. - -This is pretty similar solution as the `org.openqa.selenium.support.events.EventFiringWebDriver` of the Selenium project. You -can read about this thing there [The blog post](https://seleniumworks.blogspot.com/2014/02/eventfiringwebdriver.html). - -Here we were trying to improve existing drawbacks and restrictions using: - -- API splitting, see above. - -- the binding of some [Spring framework engines](https://spring.io/projects/spring-framework) with [AspectJ](https://en.wikipedia.org/wiki/AspectJ). - -# How to use - -It is easy. - -```java -import io.appium.java_client.events.api.general.AlertEventListener; - -public class AlertListener implements AlertEventListener { -... -} - -... -import io.appium.java_client.events.api.general.ElementEventListener; - -public class ElementListener implements ElementEventListener { -... -} - -//and so on -... -import io.appium.java_client.events.EventFiringWebDriverFactory; -import io.appium.java_client.events.api.Listener; -... - -AndroidDriver driver = new AndroidDriver(parameters); -driver = EventFiringWebDriverFactory.getEventFiringWebDriver(driver, new AlertListener(), - new ElementListener()); - -//or -AndroidDriver driver2 = new AndroidDriver(parameters); -List listeners = new ArrayList<>(); -listeners.add(new AlertListener()); -listeners.add(new ElementListener()); -driver = EventFiringWebDriverFactory.getEventFiringWebDriver(driver2, listeners); -``` - -## What if there are listeners which used everywhere by default. - -In order to avoid the repeating actions an end user is free to do these things: - -- create folders `/META-INF/services` and put the file `io.appium.java_client.events.api.Listener` there. Please read about -[SPI](https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html). - -![image](https://cloud.githubusercontent.com/assets/4927589/16731325/24eab680-4780-11e6-8551-a3c72d4b9c38.png) - -- define the list of default listeners at the `io.appium.java_client.events.api.Listener` - -![image](https://cloud.githubusercontent.com/assets/4927589/16731509/2734a4e0-4781-11e6-81cb-ab64a5924c35.png) - -And then it is enough +This feature allows end user to organize the event logging on the client side. +Also this feature may be useful in a binding with standard or custom reporting +frameworks. The feature has been introduced first since Selenium API v4. -```java - -//and so on -... -import io.appium.java_client.events.EventFiringWebDriverFactory; -... - -AndroidDriver driver = new AndroidDriver(parameters); -driver = EventFiringWebDriverFactory.getEventFiringWebDriver(driver); -``` - -If there are listeners defined externally when this collection is merged with default set of listeners. - -# How to reuse customized WebDriverEventListener - -If an end user has their own `org.openqa.selenium.support.events.WebDriverEventListener` implementation then in order to -make it compatible with this engine it is enough to do the following. - - -```java -import org.openqa.selenium.support.events.WebDriverEventListener; -import io.appium.java_client.events.api.general.AppiumWebDriverEventListener; - -public class UsersWebDriverEventListener implements WebDriverEventListener, AppiumWebDriverEventListener { -... -} -``` - -or just - -```java -import io.appium.java_client.events.api.general.AppiumWebDriverEventListener; - -public class UsersWebDriverEventListener implements AppiumWebDriverEventListener { -... -} -``` -# Also - -As soon as Appium java client has *Java 8-style* API (methods with default implementation) there was provided the ability to get objects created by these interfaces (anonymous types) listenable. Also there is an option to make some objects (some single element that has been found, for example) listenable too. +# The API +There are two main entities used to implement events firing logic: +- [org.openqa.selenium.support.events.EventFiringDecorator](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java) class +- [org.openqa.selenium.support.events.WebDriverListener](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/support/events/WebDriverListener.java) interface + +## WebDriverListener + +Classes that implement this interface are intended to be used with EventFiringDecorator. +This interface provides empty default implementation for all methods that do nothing. +You could easily extend that interface to add more methods that you'd like to listen to. +The strategy to add new/custom event listeners is the following. Let say there is a public `setOrientation` +method in the target WebDriver instance. Then you'd have to add `beforeSetOrientation` and/or +`afterSetOrientation` methods to your WebDriverListener descendant accepting single argument +of `WebDriver` type. If the target method accepts one or more arguments then these arguments +should also be added to the event listeners in the same order they are accepted by the original method, +but the very first argument should still be the firing WebDriver instance. + +_Important_: Make sure that your implementation of WebDriverListener class is public +and that event listener methods are also public. + +## EventFiringDecorator + +This decorator creates a wrapper around an arbitrary WebDriver instance that notifies +registered listeners about events happening in this WebDriver and derived objects, +such as WebElements and Alert. +Listeners should implement WebDriverListener. It supports three types of events: +- "before"-event: a method is about to be called; +- "after"-event: a method was called successfully and returned some result; +- "error"-event: a method was called and thrown an exception. + +To use this decorator you have to prepare a listener, create a decorator using this listener, +decorate the original WebDriver instance with this decorator and use the new WebDriver instance +created by the decorator instead of the original one: ```java -import static io.appium.java_client.events.EventFiringObjectFactory.getEventFiringObject; -... - -AppiumDriver appiumDriver = new AppiumDriver(parameters); -FindsByAndroidUIAutomator findsByAndroidUIAutomator = - new FindsByAndroidUIAutomator() { - - @Override - public AndroidElement findElement(String by, String using) { - return appiumDriver.findElement(String by, String using); - } - - @Override - public List findElements(String by, String using) { - return appiumDriver.findElements(by, using); - } -}; - -findsByAndroidUIAutomator = - getEventFiringObject(findsByAndroidUIAutomator, appiumDriver, listeners); +WebDriver original = new AndroidDriver(); +// it is expected that MyListener class implements WebDriverListener +// interface or its descendant +WebDriverListener listener = new MyListener(); +WebDriver decorated = new EventFiringDecorator(listener).decorate(original); +// the next call is going to fire: +// - beforeAnyCall +// - beforeAnyWebDriverCall +// - beforeGet +// - afterGet +// - afterAnyWebDriverCall +// - afterAnyCall +// events in the listener instence (in this order) +decorated.get("http://example.com/"); +// the next call is going to fire: +// - beforeAnyCall +// - beforeAnyWebDriverCall +// - beforeFindElement +// - afterFindElement +// - afterAnyWebDriverCall +// - afterAnyCall +// events in the listener instence (in this order) +WebElement header = decorated.findElement(By.tagName("h1")); +// if an error happens during any of these calls the the onError event is fired ``` +The instance of WebDriver created by the decorator implements all the same interfaces +as the original driver. A listener can subscribe to "specific" or "generic" events (or both). +A "specific" event correspond to a single specific method, a "generic" event correspond to any +method called in a class or in any class. To subscribe to a "specific" event a listener should +implement a method with a name derived from the target method to be watched. The listener methods +for "before"-events receive the parameters passed to the decorated method. The listener +methods for "after"-events receive the parameters passed to the decorated method as well as the +result returned by this method. diff --git a/src/main/java/io/appium/java_client/events/DefaultAspect.java b/src/main/java/io/appium/java_client/events/DefaultAspect.java index 3ce9794be..bb38d80e6 100644 --- a/src/main/java/io/appium/java_client/events/DefaultAspect.java +++ b/src/main/java/io/appium/java_client/events/DefaultAspect.java @@ -39,6 +39,10 @@ import java.util.Collection; import java.util.List; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated @SuppressWarnings("unused") @Aspect class DefaultAspect { diff --git a/src/main/java/io/appium/java_client/events/DefaultBeanConfiguration.java b/src/main/java/io/appium/java_client/events/DefaultBeanConfiguration.java index b50a36ee3..ac2dd1581 100644 --- a/src/main/java/io/appium/java_client/events/DefaultBeanConfiguration.java +++ b/src/main/java/io/appium/java_client/events/DefaultBeanConfiguration.java @@ -28,6 +28,10 @@ import java.util.ArrayList; import java.util.List; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated @Configuration @EnableAspectJAutoProxy(proxyTargetClass = true) class DefaultBeanConfiguration { diff --git a/src/main/java/io/appium/java_client/events/DefaultListener.java b/src/main/java/io/appium/java_client/events/DefaultListener.java index b260b1875..87c2cf15d 100644 --- a/src/main/java/io/appium/java_client/events/DefaultListener.java +++ b/src/main/java/io/appium/java_client/events/DefaultListener.java @@ -42,6 +42,10 @@ import java.util.Collection; import java.util.List; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated class DefaultListener implements Listener, AppiumWebDriverEventListener, ListensToException, SearchingEventListener, NavigationEventListener, JavaScriptEventListener, ElementEventListener, AlertEventListener, diff --git a/src/main/java/io/appium/java_client/events/EventFiringObjectFactory.java b/src/main/java/io/appium/java_client/events/EventFiringObjectFactory.java index 7b5d723c0..867251ccd 100644 --- a/src/main/java/io/appium/java_client/events/EventFiringObjectFactory.java +++ b/src/main/java/io/appium/java_client/events/EventFiringObjectFactory.java @@ -12,6 +12,10 @@ import java.util.List; import java.util.ServiceLoader; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public class EventFiringObjectFactory { /** diff --git a/src/main/java/io/appium/java_client/events/EventFiringWebDriverFactory.java b/src/main/java/io/appium/java_client/events/EventFiringWebDriverFactory.java index 7b53dc346..f0d255772 100644 --- a/src/main/java/io/appium/java_client/events/EventFiringWebDriverFactory.java +++ b/src/main/java/io/appium/java_client/events/EventFiringWebDriverFactory.java @@ -23,6 +23,10 @@ import java.util.Collection; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public class EventFiringWebDriverFactory { /** diff --git a/src/main/java/io/appium/java_client/events/ListenerInvocationHandler.java b/src/main/java/io/appium/java_client/events/ListenerInvocationHandler.java index d6e51c0ce..7fe31125d 100644 --- a/src/main/java/io/appium/java_client/events/ListenerInvocationHandler.java +++ b/src/main/java/io/appium/java_client/events/ListenerInvocationHandler.java @@ -23,6 +23,10 @@ import java.lang.reflect.Method; import java.util.List; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated class ListenerInvocationHandler implements InvocationHandler { private final List listeners; diff --git a/src/main/java/io/appium/java_client/events/api/Listener.java b/src/main/java/io/appium/java_client/events/api/Listener.java index e1ea35c1d..aeb7e7986 100644 --- a/src/main/java/io/appium/java_client/events/api/Listener.java +++ b/src/main/java/io/appium/java_client/events/api/Listener.java @@ -18,6 +18,8 @@ /** * This interface just marks event listeners. + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. */ +@Deprecated public interface Listener { } diff --git a/src/main/java/io/appium/java_client/events/api/general/AlertEventListener.java b/src/main/java/io/appium/java_client/events/api/general/AlertEventListener.java index 2a96d1792..a9895b758 100644 --- a/src/main/java/io/appium/java_client/events/api/general/AlertEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/AlertEventListener.java @@ -20,6 +20,10 @@ import org.openqa.selenium.Alert; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface AlertEventListener extends Listener { /** diff --git a/src/main/java/io/appium/java_client/events/api/general/AppiumWebDriverEventListener.java b/src/main/java/io/appium/java_client/events/api/general/AppiumWebDriverEventListener.java index 5b249b3f2..d232c207e 100644 --- a/src/main/java/io/appium/java_client/events/api/general/AppiumWebDriverEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/AppiumWebDriverEventListener.java @@ -19,6 +19,10 @@ import io.appium.java_client.events.api.Listener; import org.openqa.selenium.support.events.WebDriverEventListener; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface AppiumWebDriverEventListener extends Listener, WebDriverEventListener, ListensToException, SearchingEventListener, NavigationEventListener, JavaScriptEventListener, ElementEventListener { diff --git a/src/main/java/io/appium/java_client/events/api/general/ElementEventListener.java b/src/main/java/io/appium/java_client/events/api/general/ElementEventListener.java index 1f0f9be3e..6b5d72935 100644 --- a/src/main/java/io/appium/java_client/events/api/general/ElementEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/ElementEventListener.java @@ -20,6 +20,10 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface ElementEventListener extends Listener { /** * Called before {@link WebElement#click WebElement.click()}. diff --git a/src/main/java/io/appium/java_client/events/api/general/JavaScriptEventListener.java b/src/main/java/io/appium/java_client/events/api/general/JavaScriptEventListener.java index f7addb68e..25556a961 100644 --- a/src/main/java/io/appium/java_client/events/api/general/JavaScriptEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/JavaScriptEventListener.java @@ -19,6 +19,10 @@ import io.appium.java_client.events.api.Listener; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface JavaScriptEventListener extends Listener { /** * Called before diff --git a/src/main/java/io/appium/java_client/events/api/general/ListensToException.java b/src/main/java/io/appium/java_client/events/api/general/ListensToException.java index 89733e693..a6f3b4b3d 100644 --- a/src/main/java/io/appium/java_client/events/api/general/ListensToException.java +++ b/src/main/java/io/appium/java_client/events/api/general/ListensToException.java @@ -19,6 +19,10 @@ import io.appium.java_client.events.api.Listener; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface ListensToException extends Listener { /** * Called whenever an exception would be thrown. diff --git a/src/main/java/io/appium/java_client/events/api/general/NavigationEventListener.java b/src/main/java/io/appium/java_client/events/api/general/NavigationEventListener.java index d8662960f..9b2b33e39 100644 --- a/src/main/java/io/appium/java_client/events/api/general/NavigationEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/NavigationEventListener.java @@ -19,6 +19,10 @@ import io.appium.java_client.events.api.Listener; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface NavigationEventListener extends Listener { /** diff --git a/src/main/java/io/appium/java_client/events/api/general/SearchingEventListener.java b/src/main/java/io/appium/java_client/events/api/general/SearchingEventListener.java index bd5d47ae3..03be74a3e 100644 --- a/src/main/java/io/appium/java_client/events/api/general/SearchingEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/SearchingEventListener.java @@ -21,6 +21,10 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface SearchingEventListener extends Listener { /** diff --git a/src/main/java/io/appium/java_client/events/api/general/WindowEventListener.java b/src/main/java/io/appium/java_client/events/api/general/WindowEventListener.java index 056043a59..5a50294ec 100644 --- a/src/main/java/io/appium/java_client/events/api/general/WindowEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/general/WindowEventListener.java @@ -21,6 +21,10 @@ import org.openqa.selenium.Point; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface WindowEventListener extends Listener { /** * This action will be performed each time before {@link WebDriver.Window#setSize(Dimension)}. diff --git a/src/main/java/io/appium/java_client/events/api/mobile/ContextEventListener.java b/src/main/java/io/appium/java_client/events/api/mobile/ContextEventListener.java index f3282df76..3372e1b2e 100644 --- a/src/main/java/io/appium/java_client/events/api/mobile/ContextEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/mobile/ContextEventListener.java @@ -19,6 +19,10 @@ import io.appium.java_client.events.api.Listener; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface ContextEventListener extends Listener { /** diff --git a/src/main/java/io/appium/java_client/events/api/mobile/RotationEventListener.java b/src/main/java/io/appium/java_client/events/api/mobile/RotationEventListener.java index a500c3d76..b57b8542e 100644 --- a/src/main/java/io/appium/java_client/events/api/mobile/RotationEventListener.java +++ b/src/main/java/io/appium/java_client/events/api/mobile/RotationEventListener.java @@ -20,6 +20,10 @@ import org.openqa.selenium.ScreenOrientation; import org.openqa.selenium.WebDriver; +/** + * Deprecated. Use EventFiringDecorator and WebDriverListener instead. + */ +@Deprecated public interface RotationEventListener extends Listener { /** diff --git a/src/test/java/io/appium/java_client/events/AbilityToDefineListenersExternally.java b/src/test/java/io/appium/java_client/events/AbilityToDefineListenersExternally.java deleted file mode 100644 index 91fceed10..000000000 --- a/src/test/java/io/appium/java_client/events/AbilityToDefineListenersExternally.java +++ /dev/null @@ -1,99 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; - -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; - -import io.appium.java_client.events.listeners.AlertListener2; -import io.appium.java_client.events.listeners.ContextListener2; -import io.appium.java_client.events.listeners.ElementListener2; -import io.appium.java_client.events.listeners.ExceptionListener2; -import io.appium.java_client.events.listeners.JavaScriptListener2; -import io.appium.java_client.events.listeners.NavigationListener2; -import io.appium.java_client.events.listeners.RotationListener2; -import io.appium.java_client.events.listeners.SearchingListener2; -import io.appium.java_client.events.listeners.WindowListener2; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class AbilityToDefineListenersExternally extends BaseListenerTest { - - private static final String PREFIX = "Externally defined listener: "; - private static EmptyWebDriver emptyWebDriver; - private static SearchingListener2 searchingListener = new SearchingListener2(); - private static NavigationListener2 navigationListener = new NavigationListener2(); - private static ElementListener2 elementListener = new ElementListener2(); - private static JavaScriptListener2 javaScriptListener = new JavaScriptListener2(); - private static ExceptionListener2 exceptionListener = new ExceptionListener2(); - private static AlertListener2 alertListener = new AlertListener2(); - private static ContextListener2 contextListener = new ContextListener2(); - private static RotationListener2 rotationListener = new RotationListener2(); - private static WindowListener2 windowListener = new WindowListener2(); - - @BeforeClass public static void beforeClass() { - emptyWebDriver = new EmptyWebDriver(); - emptyWebDriver = EventFiringWebDriverFactory.getEventFiringWebDriver(emptyWebDriver, - searchingListener, navigationListener, elementListener, javaScriptListener, - exceptionListener, alertListener, contextListener, rotationListener, windowListener); - } - - @Test - public void searchContextEventTest() { - assertThat(super.assertThatSearchListenerWorks(emptyWebDriver, searchingListener, PREFIX), - is(true)); - } - - @Test - public void navigationEventTest() throws Exception { - assertThat( - super - .assertThatNavigationListenerWorks(emptyWebDriver, navigationListener, PREFIX), - is(true)); - } - - @Test - public void elementEventTest() { - assertThat(super.assertThatElementListenerWorks(emptyWebDriver, elementListener, PREFIX), - is(true)); - } - - @Test - public void javaScriptEventTest() { - assertThat(super - .assertThatJavaScriptListenerWorks(emptyWebDriver, javaScriptListener, PREFIX), - is(true)); - } - - @Test - public void exceptionEventTest() { - assertThat(super.assertThatExceptionListenerWorks(emptyWebDriver, exceptionListener, PREFIX), - is(true)); - } - - @Test - public void alertEventTest() { - assertThat(super.assertThatAlertListenerWorks(emptyWebDriver, alertListener, PREFIX), - is(true)); - } - - @Test - public void contextEventListener() { - assertThat(super.assertThatConrextListenerWorks(emptyWebDriver, contextListener, PREFIX), - is(true)); - } - - @Test - public void rotationEventListener() { - assertThat(super.assertThatRotationListenerWorks(emptyWebDriver, rotationListener, PREFIX), - is(true)); - } - - @Test - public void windowEventListener() { - assertThat(super.assertThatWindowListenerWorks(emptyWebDriver, windowListener, PREFIX), - is(true)); - } -} diff --git a/src/test/java/io/appium/java_client/events/BaseListenerTest.java b/src/test/java/io/appium/java_client/events/BaseListenerTest.java deleted file mode 100644 index 5ce04f204..000000000 --- a/src/test/java/io/appium/java_client/events/BaseListenerTest.java +++ /dev/null @@ -1,272 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.Matchers.contains; -import static org.junit.Assert.assertThat; - -import java.net.URL; - -import org.openqa.selenium.Alert; -import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.Point; -import org.openqa.selenium.ScreenOrientation; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebDriverException; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.events.listeners.TestListener; - -public class BaseListenerTest { - - protected boolean assertThatSearchListenerWorks(EmptyWebDriver driver, TestListener listener, - String prefix) { - try { - listener.messages.clear(); - - driver.findElement(By.id("someId")); - assertThat(listener.messages, - contains(prefix + "Attempt to find something using By.id: someId. The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null")); - - driver.findElements(By.id("someId2")); - - assertThat(listener.messages, - contains(prefix + "Attempt to find something using By.id: someId. The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.id: someId2. The root element is null", - prefix + "The searching for something using By.id: someId2 has beed finished. " - + "The root element was null")); - - driver.findElement(By.id("someId")).findElement(MobileBy.className("someClazz")); - - assertThat(listener.messages, - contains(prefix + "Attempt to find something using By.id: someId. The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.id: someId2. The root element is null", - prefix + "The searching for something using By.id: someId2 has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.id: someId. " - + "The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.className: someClazz. " - + "The root element is io.appium.java_client.events.StubWebElement", - prefix + "The searching for something using By.className: someClazz has beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement")); - - driver.findElements(By.id("someId2")).get(0).findElements(MobileBy.className("someClazz2")); - assertThat(listener.messages, - contains(prefix + "Attempt to find something using By.id: someId. The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.id: someId2. The root element is null", - prefix + "The searching for something using By.id: someId2 has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.id: someId. The root element is null", - prefix + "The searching for something using By.id: someId has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.className: someClazz. " - + "The root element is io.appium.java_client.events.StubWebElement", - prefix + "The searching for something using By.className: someClazz has beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement", - prefix + "Attempt to find something using By.id: someId2. The root element is null", - prefix + "The searching for something using By.id: someId2 has beed finished. " - + "The root element was null", - prefix + "Attempt to find something using By.className: someClazz2. " - + "The root element is io.appium.java_client.events.StubWebElement", - prefix + "The searching for something using By.className: someClazz2 has beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement")); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatNavigationListenerWorks(EmptyWebDriver driver, - TestListener listener, String prefix) throws Exception { - try { - driver.get("www.google.com"); - driver.navigate().to("www.google2.com"); - driver.navigate().to(new URL("https://www.google3.com")); - driver.navigate().forward(); - driver.navigate().back(); - driver.navigate().refresh(); - - assertThat(listener.messages, - contains(prefix + "Attempt to navigate to www.google.com", - prefix + "Navigation to www.google.com was successful", - prefix + "Attempt to navigate to www.google2.com", - prefix + "Navigation to www.google2.com was successful", - prefix + "Attempt to navigate to https://www.google3.com", - prefix + "Navigation to https://www.google3.com was successful", - prefix + "Attempt to navigate forward", - prefix + "Navigation forward was successful", - prefix + "Attempt to navigate back", - prefix + "Navigation back was successful", - prefix + "Attempt to refresh", - prefix + "The refreshing was successful")); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatElementListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - StubWebElement e = driver.findElement(MobileBy.AccessibilityId("SomeAccessibility")); - listener.messages.clear(); - - e.click(); - e.sendKeys("Test keys"); - - assertThat(listener.messages, - contains(prefix + "Attempt to click on the element", - prefix + "Thee element was clicked", - prefix + "Attempt to change value of the element", - prefix + "The value of the element was changed")); - return true; - } finally { - listener.messages.clear(); - } - } - - - protected boolean assertThatJavaScriptListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - driver.executeScript("Some test script"); - driver.executeAsyncScript("Some test async script"); - - assertThat(listener.messages, - contains(prefix + "Attempt to perform java script: Some test script", - prefix + "Java script Some test script was performed", - prefix + "Attempt to perform java script: Some test async script", - prefix + "Java script Some test async script was performed")); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatExceptionListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - try { - StubWebElement element = driver.findElement(MobileBy.AccessibilityId("SomeAccessibility")); - listener.messages.clear(); - - element.getRect(); - } catch (Exception ignored) { - ignored.printStackTrace(); - } - - try { - driver.getPageSource(); - } catch (Exception ignored) { - ignored.printStackTrace(); - } - - - assertThat(listener.messages, - contains(prefix + "The exception was thrown: " - + WebDriverException.class, - prefix + "The exception was thrown: " - + WebDriverException.class)); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatAlertListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - Alert alert = driver.switchTo().alert(); - alert.accept(); - alert.dismiss(); - alert.sendKeys("Keys"); - - assertThat(listener.messages, - contains(prefix + "Attempt to accept alert", - prefix + "The alert was accepted", - prefix + "Attempt to dismiss alert", - prefix + "The alert was dismissed", - prefix + "Attempt to send keys to alert", - prefix + "Keys were sent to alert")); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatConrextListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - driver.context("NATIVE_APP"); - driver.context("WEB_VIEW"); - - assertThat(listener.messages, - contains(prefix + "Attempt to change current context to NATIVE_APP", - prefix + "The previous context has been changed to NATIVE_APP", - prefix + "Attempt to change current context to WEB_VIEW", - prefix + "The previous context has been changed to WEB_VIEW")); - return true; - } finally { - listener.messages.clear(); - } - } - - - protected boolean assertThatRotationListenerWorks(EmptyWebDriver driver, TestListener listener, - String prefix) { - try { - driver.rotate(ScreenOrientation.LANDSCAPE); - driver.rotate(ScreenOrientation.PORTRAIT); - - assertThat(listener.messages, - contains(prefix + "Attempt to change screen orientation. The new screen orientation is " - + ScreenOrientation.LANDSCAPE.toString(), - prefix + "The screen orientation has been changed to " - + ScreenOrientation.LANDSCAPE.toString(), - prefix + "Attempt to change screen orientation. The new screen orientation is " - + ScreenOrientation.PORTRAIT.toString(), - prefix + "The screen orientation has been changed to " - + ScreenOrientation.PORTRAIT.toString())); - return true; - } finally { - listener.messages.clear(); - } - } - - protected boolean assertThatWindowListenerWorks(EmptyWebDriver driver, TestListener listener, String prefix) { - try { - WebDriver.Window window = driver.manage().window(); - Dimension d = new Dimension(500, 500); - window.setSize(d); - - Point p = new Point(50, 50); - window.setPosition(p); - - window.maximize(); - - driver.switchTo().window("Test window"); - - assertThat(listener.messages, - contains(prefix + "Attempt to change size of the window. The height is " + d.getHeight() - + " the width is " + d.getWidth(), - prefix + "Size of the window has been changed. The height is " + d.getHeight() - + " the width is " + d.getWidth(), - prefix + "Attempt to change position of the window. The X is " + p.getX() - + " the Y is " + p.getY(), - prefix + "The position the window has been changed. The X is " + p.getX() - + " the Y is " + p.getY(), - prefix + "Attempt to maximize the window.", - prefix + "The window has been maximized", - prefix + "Attempt to switch to window Test window", - prefix + "driver is switched to window Test window")); - return true; - } finally { - listener.messages.clear(); - } - - } -} diff --git a/src/test/java/io/appium/java_client/events/CustomListener.java b/src/test/java/io/appium/java_client/events/CustomListener.java new file mode 100644 index 000000000..e9d446462 --- /dev/null +++ b/src/test/java/io/appium/java_client/events/CustomListener.java @@ -0,0 +1,73 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.events.WebDriverListener; + +import java.lang.reflect.Method; + +public class CustomListener implements WebDriverListener { + private boolean didCallBeforeGet = false; + private boolean didCallAfterGet = false; + private String url; + + private boolean didCallBeforeAnyWebDriverCall = false; + private boolean didCallAfterWebDriverAnyCall = false; + + @Override + public void beforeGet(WebDriver driver, String url) { + didCallBeforeGet = true; + this.url = url; + } + + @Override + public void afterGet(WebDriver driver, String url) { + didCallAfterGet = true; + this.url = url; + } + + @Override + public void beforeAnyWebDriverCall(WebDriver driver, Method method, Object[] args) { + didCallBeforeAnyWebDriverCall = true; + } + + @Override + public void afterAnyWebDriverCall(WebDriver driver, Method method, Object[] args, Object result) { + didCallAfterWebDriverAnyCall = true; + } + + public boolean isDidCallBeforeGet() { + return didCallBeforeGet; + } + + public boolean isDidCallAfterGet() { + return didCallAfterGet; + } + + public String getUrl() { + return url; + } + + public boolean isDidCallBeforeAnyWebDriverCall() { + return didCallBeforeAnyWebDriverCall; + } + + public boolean isDidCallAfterWebDriverAnyCall() { + return didCallAfterWebDriverAnyCall; + } +} \ No newline at end of file diff --git a/src/test/java/io/appium/java_client/events/DefaultEventListenerTest.java b/src/test/java/io/appium/java_client/events/DefaultEventListenerTest.java deleted file mode 100644 index 7cbdfee4f..000000000 --- a/src/test/java/io/appium/java_client/events/DefaultEventListenerTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; - -import org.apache.commons.lang3.StringUtils; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; -import org.openqa.selenium.Capabilities; - -import io.appium.java_client.events.listeners.AlertListener; -import io.appium.java_client.events.listeners.ContextListener; -import io.appium.java_client.events.listeners.ElementListener; -import io.appium.java_client.events.listeners.ExceptionListener; -import io.appium.java_client.events.listeners.JavaScriptListener; -import io.appium.java_client.events.listeners.NavigationListener; -import io.appium.java_client.events.listeners.RotationListener; -import io.appium.java_client.events.listeners.SearchingListener; -import io.appium.java_client.events.listeners.SingleListeners; -import io.appium.java_client.events.listeners.WindowListener; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class DefaultEventListenerTest extends BaseListenerTest { - - private static EmptyWebDriver driver; - - @BeforeClass public static void beforeClass() { - EmptyWebDriver emptyWebDriver = new EmptyWebDriver(); - driver = EventFiringWebDriverFactory.getEventFiringWebDriver(emptyWebDriver); - } - - @Test - public void searchContextEventTest() { - assertThat(super.assertThatSearchListenerWorks(driver, SingleListeners - .listeners.get(SearchingListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void navigationEventTest() throws Exception { - assertThat(super.assertThatNavigationListenerWorks(driver, SingleListeners - .listeners.get(NavigationListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void elementEventTest() { - assertThat(super.assertThatElementListenerWorks(driver, SingleListeners - .listeners.get(ElementListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void javaScriptEventTest() { - assertThat(super.assertThatJavaScriptListenerWorks(driver, SingleListeners - .listeners.get(JavaScriptListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void exceptionEventTest() { - assertThat(super.assertThatExceptionListenerWorks(driver, SingleListeners - .listeners.get(ExceptionListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void alertEventTest() { - assertThat(super.assertThatAlertListenerWorks(driver, SingleListeners - .listeners.get(AlertListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void contextEventListener() { - assertThat(super.assertThatConrextListenerWorks(driver, SingleListeners - .listeners.get(ContextListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void rotationEventListener() { - assertThat(super.assertThatRotationListenerWorks(driver, SingleListeners - .listeners.get(RotationListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void windowEventListener() { - assertThat(super.assertThatWindowListenerWorks(driver, SingleListeners - .listeners.get(WindowListener.class), StringUtils.EMPTY), is(true)); - } - - @Test - public void whenNonListenableObjectIsReturned() { - Capabilities capabilities = driver.getCapabilities(); - assertNotNull(capabilities); - assertEquals(capabilities.asMap().size(), 2); - } -} diff --git a/src/test/java/io/appium/java_client/events/EmptyWebDriver.java b/src/test/java/io/appium/java_client/events/EmptyWebDriver.java deleted file mode 100644 index 5bc7149c0..000000000 --- a/src/test/java/io/appium/java_client/events/EmptyWebDriver.java +++ /dev/null @@ -1,249 +0,0 @@ -package io.appium.java_client.events; - -import com.google.common.collect.ImmutableList; - -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.Alert; -import org.openqa.selenium.By; -import org.openqa.selenium.Capabilities; -import org.openqa.selenium.ContextAware; -import org.openqa.selenium.Cookie; -import org.openqa.selenium.DeviceRotation; -import org.openqa.selenium.HasCapabilities; -import org.openqa.selenium.JavascriptExecutor; -import org.openqa.selenium.OutputType; -import org.openqa.selenium.Rotatable; -import org.openqa.selenium.ScreenOrientation; -import org.openqa.selenium.TakesScreenshot; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebDriverException; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.WindowType; -import org.openqa.selenium.logging.Logs; -import org.openqa.selenium.remote.DesiredCapabilities; - -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class EmptyWebDriver implements WebDriver, ContextAware, Rotatable, JavascriptExecutor, HasCapabilities, - TakesScreenshot { - - private static List createStubList() { - return ImmutableList.of(new StubWebElement(), new StubWebElement()); - } - - @Override public WebDriver context(String name) { - return null; - } - - @Override public Set getContextHandles() { - return null; - } - - @Override public String getContext() { - return StringUtils.EMPTY; - } - - @Override public void rotate(ScreenOrientation orientation) { - //The rotation does nothing there - } - - @Override public void rotate(DeviceRotation rotation) { - //The rotation does nothing there - } - - @Override public ScreenOrientation getOrientation() { - return null; - } - - @Override public DeviceRotation rotation() { - return null; - } - - @Override public void get(String url) { - //There is no navigation. It is added only for event firing - } - - @Override public String getCurrentUrl() { - return null; - } - - @Override public String getTitle() { - return null; - } - - @Override public StubWebElement findElement(By by) { - return new StubWebElement(); - } - - @Override public List findElements(By by) { - return createStubList(); - } - - @Override public String getPageSource() { - throw new WebDriverException(); - } - - @Override public void close() { - //There is no closing - } - - @Override public void quit() { - //It is only the stub - } - - @Override public Set getWindowHandles() { - return null; - } - - @Override public String getWindowHandle() { - throw new WebDriverException(); - } - - @Override public TargetLocator switchTo() { - return new StubTargetLocator(this); - } - - @Override public Navigation navigate() { - return new StubNavigation(); - } - - @Override public Options manage() { - return new StubOptions(); - } - - @Override public Object executeScript(String script, Object... args) { - return null; - } - - @Override public Object executeAsyncScript(String script, Object... args) { - return null; - } - - @Override public Capabilities getCapabilities() { - Map map = new HashMap<>(); - map.put("0",StringUtils.EMPTY); - map.put("1",StringUtils.EMPTY); - return new DesiredCapabilities(map); - } - - @Override - public X getScreenshotAs(OutputType target) throws WebDriverException { - return target.convertFromPngBytes(new byte[]{1,2}); - } - - private class StubTargetLocator implements TargetLocator { - - private final WebDriver driver; - - StubTargetLocator(WebDriver driver) { - this.driver = driver; - } - - @Override public WebDriver frame(int index) { - return driver; - } - - @Override public WebDriver frame(String nameOrId) { - return driver; - } - - @Override public WebDriver frame(WebElement frameElement) { - return driver; - } - - @Override public WebDriver parentFrame() { - return driver; - } - - @Override public WebDriver window(String nameOrHandle) { - return driver; - } - - @Override - public WebDriver newWindow(WindowType typeHint) { - return driver; - } - - @Override public WebDriver defaultContent() { - return driver; - } - - @Override public WebElement activeElement() { - return new StubWebElement(); - } - - @Override public Alert alert() { - return new StubAlert(); - } - } - - private class StubOptions implements Options { - - @Override public void addCookie(Cookie cookie) { - //STUB: No adding cookie - } - - @Override public void deleteCookieNamed(String name) { - //STUB No removal cookie - } - - @Override public void deleteCookie(Cookie cookie) { - //STUB No deleting cookie - } - - @Override public void deleteAllCookies() { - //STUB it does nothing - } - - @Override public Set getCookies() { - return null; - } - - @Override public Cookie getCookieNamed(String name) { - return null; - } - - @Override public Timeouts timeouts() { - return null; - } - - @Override public ImeHandler ime() { - return null; - } - - @Override public Window window() { - return new StubWindow(); - } - - @Override public Logs logs() { - return null; - } - } - - private class StubNavigation implements Navigation { - - @Override public void back() { - //STUB: It doesn't navigate back - } - - @Override public void forward() { - //STUB: No the navigation forward - } - - @Override public void to(String url) { - //STUB: Added only for event firing - } - - @Override public void to(URL url) { - //STUB: Event firing of the navigation to some URL - } - - @Override public void refresh() { - //STUB: The firing of the refreshing - } - } -} diff --git a/src/test/java/io/appium/java_client/events/EventsFiringTest.java b/src/test/java/io/appium/java_client/events/EventsFiringTest.java new file mode 100644 index 000000000..f6d0d2890 --- /dev/null +++ b/src/test/java/io/appium/java_client/events/EventsFiringTest.java @@ -0,0 +1,53 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events; + +import io.appium.java_client.events.stubs.EmptyWebDriver; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.events.EventFiringDecorator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class EventsFiringTest { + private final WebDriver emptyWebDriver = new EmptyWebDriver(); + private CustomListener listener; + private WebDriver decorated; + + @Before + public void beforeTest() { + listener = new CustomListener(); + decorated = new EventFiringDecorator(listener).decorate(emptyWebDriver); + } + + @Test + public void checkBasicEventsFiring() { + decorated.get("http://example.com/"); + assertTrue(listener.isDidCallBeforeGet()); + assertTrue(listener.isDidCallAfterGet()); + assertEquals(listener.getUrl(), "http://example.com/"); + } + + @Test + public void checkAnyWebDriverEventsFiring() { + decorated.get("http://example.com/"); + assertTrue(listener.isDidCallBeforeAnyWebDriverCall()); + assertTrue(listener.isDidCallAfterWebDriverAnyCall()); + } +} diff --git a/src/test/java/io/appium/java_client/events/ExtendedEventListenerTest.java b/src/test/java/io/appium/java_client/events/ExtendedEventListenerTest.java deleted file mode 100644 index 560875eb4..000000000 --- a/src/test/java/io/appium/java_client/events/ExtendedEventListenerTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.core.IsIterableContaining.hasItems; -import static org.junit.Assert.assertThat; - -import io.appium.java_client.MobileBy; -import io.appium.java_client.events.listeners.SearchingListener; -import io.appium.java_client.events.listeners.SingleListeners; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.By; - -public class ExtendedEventListenerTest { - - private static EmptyWebDriver stubWebDriver; - - @BeforeClass public static void beforeClass() { - stubWebDriver = new EmptyWebDriver(); - stubWebDriver = EventFiringWebDriverFactory.getEventFiringWebDriver(stubWebDriver); - } - - @Test - public void searchingTest() { - StubWebElement androidElement = stubWebDriver.findElement(By.id("someId")); - androidElement.findElement(MobileBy.custom("some value")) - .findElements(MobileBy.AndroidUIAutomator("Android UI Automator")); - androidElement.findElements(MobileBy.custom("some value2")).get(0) - .findElements(MobileBy.AndroidUIAutomator("Android UI Automator2")); - - SearchingListener listener = (SearchingListener) SingleListeners - .listeners.get(SearchingListener.class); - assertThat(listener.messages, - hasItems("Attempt to find something using By.AndroidUIAutomator: Android UI Automator. " - + "The root element is io.appium.java_client.events.StubWebElement", - "The searching for something using By.AndroidUIAutomator: Android UI Automator has " - + "beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement", - "Attempt to find something using By.AndroidUIAutomator: Android UI Automator2. " - + "The root element is io.appium.java_client.events.StubWebElement", - "The searching for something using By.AndroidUIAutomator: Android UI Automator2 " - + "has beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement")); - } -} diff --git a/src/test/java/io/appium/java_client/events/FewInstancesTest.java b/src/test/java/io/appium/java_client/events/FewInstancesTest.java deleted file mode 100644 index b195cc0ba..000000000 --- a/src/test/java/io/appium/java_client/events/FewInstancesTest.java +++ /dev/null @@ -1,176 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertThat; - -import org.apache.commons.lang3.StringUtils; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openqa.selenium.WebDriver; - -import io.appium.java_client.events.listeners.AlertListener; -import io.appium.java_client.events.listeners.ContextListener; -import io.appium.java_client.events.listeners.ElementListener; -import io.appium.java_client.events.listeners.ExceptionListener; -import io.appium.java_client.events.listeners.JavaScriptListener; -import io.appium.java_client.events.listeners.NavigationListener; -import io.appium.java_client.events.listeners.RotationListener; -import io.appium.java_client.events.listeners.SearchingListener; -import io.appium.java_client.events.listeners.SingleListeners; -import io.appium.java_client.events.listeners.WindowListener; - -public class FewInstancesTest extends BaseListenerTest { - - private static EmptyWebDriver emptyWebDriver1; - private static SearchingListener searchingListener1; - private static NavigationListener navigationListener1; - private static ElementListener elementListener1; - private static JavaScriptListener javaScriptListener1; - private static ExceptionListener exceptionListener1; - private static AlertListener alertListener1; - private static ContextListener contextListener1; - private static RotationListener rotationListener1; - private static WindowListener windowListener1; - - private static SearchingListener searchingListener2; - private static NavigationListener navigationListener2; - private static ElementListener elementListener2; - private static JavaScriptListener javaScriptListener2; - private static ExceptionListener exceptionListener2; - private static AlertListener alertListener2; - private static ContextListener contextListener2; - private static RotationListener rotationListener2; - private static WindowListener windowListener2; - - @BeforeClass public static void beforeClass() { - emptyWebDriver1 = new EmptyWebDriver(); - emptyWebDriver1 = EventFiringWebDriverFactory.getEventFiringWebDriver(emptyWebDriver1); - - searchingListener1 = (SearchingListener) SingleListeners - .listeners.get(SearchingListener.class); - navigationListener1 = (NavigationListener) SingleListeners - .listeners.get(NavigationListener.class); - elementListener1 = (ElementListener) SingleListeners - .listeners.get(ElementListener.class); - javaScriptListener1 = (JavaScriptListener) SingleListeners - .listeners.get(JavaScriptListener.class); - exceptionListener1 = (ExceptionListener) SingleListeners - .listeners.get(ExceptionListener.class); - alertListener1 = (AlertListener) SingleListeners - .listeners.get(AlertListener.class); - contextListener1 = (ContextListener) SingleListeners - .listeners.get(ContextListener.class); - rotationListener1 = (RotationListener) SingleListeners - .listeners.get(RotationListener.class); - windowListener1 = - (WindowListener) SingleListeners.listeners.get(WindowListener.class); - - WebDriver stubWebDriver2 = new EmptyWebDriver(); - EventFiringWebDriverFactory.getEventFiringWebDriver(stubWebDriver2); - - searchingListener2 = (SearchingListener) SingleListeners - .listeners.get(SearchingListener.class); - navigationListener2 = (NavigationListener) SingleListeners - .listeners.get(NavigationListener.class); - elementListener2 = (ElementListener) SingleListeners - .listeners.get(ElementListener.class); - javaScriptListener2 = (JavaScriptListener) SingleListeners - .listeners.get(JavaScriptListener.class); - exceptionListener2 = (ExceptionListener) SingleListeners - .listeners.get(ExceptionListener.class); - alertListener2 = (AlertListener) SingleListeners - .listeners.get(AlertListener.class); - contextListener2 = (ContextListener) SingleListeners - .listeners.get(ContextListener.class); - rotationListener2 = (RotationListener) SingleListeners - .listeners.get(RotationListener.class); - windowListener2 = - (WindowListener) SingleListeners.listeners.get(WindowListener.class); - } - - @Test - public void listenersAreDifferent() { - assertNotEquals(searchingListener1, searchingListener2); - assertNotEquals(elementListener1, elementListener2); - assertNotEquals(navigationListener1, navigationListener2); - assertNotEquals(javaScriptListener1, javaScriptListener2); - assertNotEquals(exceptionListener1, exceptionListener2); - assertNotEquals(alertListener1, alertListener2); - assertNotEquals(contextListener1, contextListener2); - assertNotEquals(rotationListener1, rotationListener2); - assertNotEquals(windowListener1, windowListener2); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother() { - assertThat(super.assertThatSearchListenerWorks(emptyWebDriver1, - searchingListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second searching listener should have no messages", - searchingListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother3() throws Exception { - assertThat(super.assertThatNavigationListenerWorks(emptyWebDriver1, - navigationListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second navigation listener should have no messages", - navigationListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother4() { - assertThat(super.assertThatJavaScriptListenerWorks(emptyWebDriver1, - javaScriptListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second java script listener should have no messages", - javaScriptListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother5() { - assertThat(super.assertThatExceptionListenerWorks(emptyWebDriver1, - exceptionListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second exception listener should have no messages", - exceptionListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother6() { - assertThat(super.assertThatAlertListenerWorks(emptyWebDriver1, - alertListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second alert listener should have no messages", - alertListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother7() { - assertThat(super.assertThatConrextListenerWorks(emptyWebDriver1, - contextListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second context listener should have no messages", - contextListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother8() { - assertThat(super.assertThatRotationListenerWorks(emptyWebDriver1, - rotationListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second rotation listener should have no messages", - rotationListener2.messages.size(), is(0)); - } - - @Test - public void assertThatOneDriverDoNotListensToAnother9() { - assertThat(super.assertThatWindowListenerWorks(emptyWebDriver1, - windowListener1, StringUtils.EMPTY), - is(true)); - assertThat("The second window listener should have no messages", - windowListener2.messages.size(), is(0)); - } -} diff --git a/src/test/java/io/appium/java_client/events/ListenableObjectTest.java b/src/test/java/io/appium/java_client/events/ListenableObjectTest.java deleted file mode 100644 index 4d7002390..000000000 --- a/src/test/java/io/appium/java_client/events/ListenableObjectTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package io.appium.java_client.events; - -import static com.google.common.collect.ImmutableSortedSet.of; -import static io.appium.java_client.events.EventFiringObjectFactory.getEventFiringObject; -import static io.appium.java_client.events.EventFiringWebDriverFactory.getEventFiringWebDriver; -import static io.appium.java_client.events.listeners.SingleListeners.listeners; -import static org.apache.commons.lang3.StringUtils.EMPTY; -import static org.hamcrest.Matchers.contains; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import io.appium.java_client.events.listeners.AlertListener; -import io.appium.java_client.events.listeners.AlertListener2; -import io.appium.java_client.events.listeners.ContextListener; -import io.appium.java_client.events.listeners.ContextListener2; -import io.appium.java_client.events.listeners.SearchingListener; -import io.appium.java_client.events.listeners.SearchingListener2; -import org.junit.Test; -import org.openqa.selenium.Alert; -import org.openqa.selenium.By; -import org.openqa.selenium.ContextAware; -import org.openqa.selenium.WebDriver; - -import java.util.Set; -import java.util.function.Predicate; - -public class ListenableObjectTest { - private static final String PREFIX = "Externally defined listener: "; - - private final EmptyWebDriver emptyWebDriver = new EmptyWebDriver(); - private final ContextListener2 contextListener = new ContextListener2(); - private final AlertListener2 alertListener = new AlertListener2(); - private final SearchingListener2 searchingListener = new SearchingListener2(); - - private final ContextAware contextAware = new ContextAware() { - @Override - public WebDriver context(String name) { - return emptyWebDriver; - } - - @Override - public Set getContextHandles() { - return of(EMPTY); - } - - @Override - public String getContext() { - return EMPTY; - } - }; - - private final Predicate contextAwarePredicate = (contextAware) -> { - contextAware.context("WEB_VIEW"); - - assertThat(contextListener.messages, - contains(PREFIX + "Attempt to change current context to NATIVE_APP", - PREFIX + "The previous context has been changed to NATIVE_APP", - PREFIX + "Attempt to change current context to WEB_VIEW", - PREFIX + "The previous context has been changed to WEB_VIEW")); - - ContextListener singleContextListener = (ContextListener) - listeners.get(ContextListener.class); - assertThat(singleContextListener.messages, - contains("Attempt to change current context to NATIVE_APP", - "The previous context has been changed to NATIVE_APP", - "Attempt to change current context to WEB_VIEW", - "The previous context has been changed to WEB_VIEW")); - return true; - }; - - private final Predicate alertPredicate = alert -> { - alert.accept(); - alert.dismiss(); - alert.sendKeys("Keys"); - - assertThat(alertListener.messages, - contains(PREFIX + "Attempt to accept alert", - PREFIX + "The alert was accepted", - PREFIX + "Attempt to dismiss alert", - PREFIX + "The alert was dismissed", - PREFIX + "Attempt to send keys to alert", - PREFIX + "Keys were sent to alert")); - - AlertListener singleAlertListener = (AlertListener) - listeners.get(AlertListener.class); - - assertThat(singleAlertListener.messages, - contains("Attempt to accept alert", - "The alert was accepted", - "Attempt to dismiss alert", - "The alert was dismissed", - "Attempt to send keys to alert", - "Keys were sent to alert")); - return true; - }; - - private final Predicate webDriverPredicate = driver -> { - driver.findElement(By.id("someId")); - assertThat(searchingListener.messages, - contains(PREFIX + "Attempt to find something using By.id: someId. The root element is null", - PREFIX + "The searching for something using By.id: someId has beed finished. " - + "The root element was null")); - - SearchingListener singleSearchingListener = (SearchingListener) - listeners.get(SearchingListener.class); - - assertThat(singleSearchingListener.messages, - contains("Attempt to find something using By.id: someId. The root element is null", - "The searching for something using By.id: someId has beed finished. " - + "The root element was null")); - return true; - }; - - - @Test public void listenableObjectSample() { - try { - ContextAware listenableContextAware = - getEventFiringObject(contextAware, emptyWebDriver, contextListener, alertListener); - WebDriver webDriver = listenableContextAware.context("NATIVE_APP"); - assertTrue(contextAwarePredicate.test(listenableContextAware)); - - Alert alert = webDriver.switchTo().alert(); - assertTrue(alertPredicate.test(alert)); - - assertTrue(webDriverPredicate.test(getEventFiringWebDriver(webDriver, searchingListener))); - } finally { - listeners.get(ContextListener.class).messages.clear(); - listeners.get(AlertListener.class).messages.clear(); - listeners.get(SearchingListener.class).messages.clear(); - } - } -} diff --git a/src/test/java/io/appium/java_client/events/StubAlert.java b/src/test/java/io/appium/java_client/events/StubAlert.java deleted file mode 100644 index aad32c596..000000000 --- a/src/test/java/io/appium/java_client/events/StubAlert.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.appium.java_client.events; - -import org.apache.commons.lang3.StringUtils; -import org.openqa.selenium.Alert; - -public class StubAlert implements Alert { - @Override public void dismiss() { - //STUB it does nothing - } - - @Override public void accept() { - //STUB it does nothing - } - - @Override public String getText() { - return StringUtils.EMPTY; - } - - @Override public void sendKeys(String keysToSend) { - //STUB it does nothing - } -} diff --git a/src/test/java/io/appium/java_client/events/StubWebElement.java b/src/test/java/io/appium/java_client/events/StubWebElement.java deleted file mode 100644 index 0e9c2a5d6..000000000 --- a/src/test/java/io/appium/java_client/events/StubWebElement.java +++ /dev/null @@ -1,93 +0,0 @@ -package io.appium.java_client.events; - -import com.google.common.collect.ImmutableList; - -import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.OutputType; -import org.openqa.selenium.Point; -import org.openqa.selenium.Rectangle; -import org.openqa.selenium.WebDriverException; -import org.openqa.selenium.WebElement; - -import java.util.ArrayList; -import java.util.List; - -public class StubWebElement implements WebElement { - - private static List createStubSubElementList() { - return new ArrayList<>(ImmutableList.of(new StubWebElement(), new StubWebElement())); - } - - @Override public void click() { - //There is no clicking. It is STUB. - } - - @Override public void submit() { - //No submitting - } - - @Override public void sendKeys(CharSequence... keysToSend) { - //There is no the sending keys. - } - - @Override public void clear() { - //It doesn't clearing anything. - } - - @Override public String getTagName() { - return null; - } - - @Override public String getAttribute(String name) { - return null; - } - - @Override public boolean isSelected() { - return false; - } - - @Override public boolean isEnabled() { - return false; - } - - @Override public String getText() { - return null; - } - - @Override public List findElements(By by) { - return createStubSubElementList(); - } - - @Override public WebElement findElement(By by) { - return new StubWebElement(); - } - - @Override public boolean isDisplayed() { - return false; - } - - @Override public Point getLocation() { - return null; - } - - @Override public Dimension getSize() { - return null; - } - - @Override public Rectangle getRect() { - throw new WebDriverException(); - } - - @Override public String getCssValue(String propertyName) { - return null; - } - - @Override public X getScreenshotAs(OutputType target) throws WebDriverException { - return target.convertFromPngBytes(new byte[]{1,2}); - } - - @Override public String toString() { - return this.getClass().getCanonicalName(); - } -} diff --git a/src/test/java/io/appium/java_client/events/StubWindow.java b/src/test/java/io/appium/java_client/events/StubWindow.java deleted file mode 100644 index 21d6580f4..000000000 --- a/src/test/java/io/appium/java_client/events/StubWindow.java +++ /dev/null @@ -1,36 +0,0 @@ -package io.appium.java_client.events; - -import org.openqa.selenium.Dimension; -import org.openqa.selenium.Point; -import org.openqa.selenium.WebDriver; - -public class StubWindow implements WebDriver.Window { - @Override public void setSize(Dimension targetSize) { - //STUB it does nothing - } - - @Override public void setPosition(Point targetPosition) { - //STUB it does nothing - } - - @Override public Dimension getSize() { - return null; - } - - @Override public Point getPosition() { - return null; - } - - @Override public void maximize() { - //STUB it does nothing - } - - @Override - public void minimize() { - //STUB it does nothing - } - - @Override public void fullscreen() { - //STUB it does nothing - } -} diff --git a/src/test/java/io/appium/java_client/events/WebDriverEventListenerCompatibilityTest.java b/src/test/java/io/appium/java_client/events/WebDriverEventListenerCompatibilityTest.java deleted file mode 100644 index aa6fd3656..000000000 --- a/src/test/java/io/appium/java_client/events/WebDriverEventListenerCompatibilityTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package io.appium.java_client.events; - -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.IsIterableContaining.hasItems; -import static org.junit.Assert.assertThat; -import static org.openqa.selenium.By.id; -import static org.openqa.selenium.By.xpath; -import static org.openqa.selenium.OutputType.BASE64; - -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; -import org.openqa.selenium.Alert; - -import io.appium.java_client.events.listeners.AppiumListener; -import io.appium.java_client.events.listeners.SingleListeners; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class WebDriverEventListenerCompatibilityTest extends BaseListenerTest { - - private static EmptyWebDriver driver; - private static AppiumListener listener; - private static final String WEBDRIVER_EVENT_LISTENER = "WebDriverEventListener: "; - - @BeforeClass public static void beforeClass() { - EmptyWebDriver emptyWebDriver = new EmptyWebDriver(); - driver = EventFiringWebDriverFactory.getEventFiringWebDriver(emptyWebDriver); - listener = (AppiumListener) SingleListeners.listeners.get(AppiumListener.class); - } - - @Test - public void searchContextEventTest() { - assertThat(super.assertThatSearchListenerWorks(driver, listener, WEBDRIVER_EVENT_LISTENER), - is(true)); - } - - - @Test - public void navigationEventTest() throws Exception { - assertThat(super.assertThatNavigationListenerWorks(driver, - listener, WEBDRIVER_EVENT_LISTENER), - is(true)); - } - - @Test - public void elementEventTest() { - assertThat(super.assertThatElementListenerWorks(driver, listener, WEBDRIVER_EVENT_LISTENER), - is(true)); - } - - @Test - public void javaScriptEventTest() { - assertThat(super.assertThatJavaScriptListenerWorks(driver, - listener, WEBDRIVER_EVENT_LISTENER), - is(true)); - } - - @Test - public void alertEventTest() { - try { - Alert alert = driver.switchTo().alert(); - alert.accept(); - alert.dismiss(); - alert.sendKeys("Keys"); - - assertThat(listener.messages, - hasItems(WEBDRIVER_EVENT_LISTENER + "Attempt to accept alert", - WEBDRIVER_EVENT_LISTENER + "The alert was accepted", - WEBDRIVER_EVENT_LISTENER + "Attempt to dismiss alert", - WEBDRIVER_EVENT_LISTENER + "The alert was dismissed")); - } finally { - listener.messages.clear(); - } - } - - @Test - public void takeScreenShotEventTest() { - try { - driver.getScreenshotAs(BASE64); - driver.findElement(xpath(".//some//path")).findElement(id("someId")).getScreenshotAs(BASE64); - - assertThat(listener.messages, - contains("WebDriverEventListener: Attempt to take screen shot. Target type is OutputType.BASE64", - "WebDriverEventListener: Screen shot was taken successfully. Target type is " - + "OutputType.BASE64, result is AQI=", - "WebDriverEventListener: Attempt to find something using By.xpath: .//some//path. " - + "The root element is null", - "WebDriverEventListener: The searching for something using " - + "By.xpath: .//some//path has beed finished. " - + "The root element was null", - "WebDriverEventListener: Attempt to find something using By.id: someId. " - + "The root element is io.appium.java_client.events.StubWebElement", - "WebDriverEventListener: The searching for something using " - + "By.id: someId has beed finished. " - + "The root element was io.appium.java_client.events.StubWebElement", - "WebDriverEventListener: Attempt to take screen shot. Target type is OutputType.BASE64", - "WebDriverEventListener: Screen shot was taken successfully. " - + "Target type is OutputType.BASE64, result is AQI=")); - } finally { - listener.messages.clear(); - } - } - - @Test - public void exceptionEventTest() { - assertThat(super.assertThatExceptionListenerWorks(driver, listener, WEBDRIVER_EVENT_LISTENER), - is(true)); - } - - @Test - public void windowListenerTest() { - try { - driver.switchTo().window("Test window"); - assertThat(listener.messages, - hasItems(WEBDRIVER_EVENT_LISTENER + "Attempt to switch to window Test window", - WEBDRIVER_EVENT_LISTENER + "driver is switched to window Test window")); - } finally { - listener.messages.clear(); - } - - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/AlertListener.java b/src/test/java/io/appium/java_client/events/listeners/AlertListener.java deleted file mode 100644 index 949431247..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/AlertListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.AlertEventListener; -import org.openqa.selenium.Alert; -import org.openqa.selenium.WebDriver; - -public class AlertListener extends TestListener implements AlertEventListener { - @Override public void beforeAlertAccept(WebDriver driver, Alert alert) { - messages.add("Attempt to accept alert"); - } - - @Override public void afterAlertAccept(WebDriver driver, Alert alert) { - messages.add("The alert was accepted"); - } - - @Override public void afterAlertDismiss(WebDriver driver, Alert alert) { - messages.add("The alert was dismissed"); - } - - @Override public void beforeAlertDismiss(WebDriver driver, Alert alert) { - messages.add("Attempt to dismiss alert"); - } - - @Override public void beforeAlertSendKeys(WebDriver driver, Alert alert, String keys) { - messages.add("Attempt to send keys to alert"); - } - - @Override public void afterAlertSendKeys(WebDriver driver, Alert alert, String keys) { - messages.add("Keys were sent to alert"); - } - - @Override protected void add() { - SingleListeners.listeners.put(AlertListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/AlertListener2.java b/src/test/java/io/appium/java_client/events/listeners/AlertListener2.java deleted file mode 100644 index 5d75ed58b..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/AlertListener2.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.AlertEventListener; -import org.openqa.selenium.Alert; -import org.openqa.selenium.WebDriver; - -public class AlertListener2 extends TestListener implements AlertEventListener { - @Override public void beforeAlertAccept(WebDriver driver, Alert alert) { - messages.add("Externally defined listener: Attempt to accept alert"); - } - - @Override public void afterAlertAccept(WebDriver driver, Alert alert) { - messages.add("Externally defined listener: The alert was accepted"); - } - - @Override public void afterAlertDismiss(WebDriver driver, Alert alert) { - messages.add("Externally defined listener: The alert was dismissed"); - } - - @Override public void beforeAlertDismiss(WebDriver driver, Alert alert) { - messages.add("Externally defined listener: Attempt to dismiss alert"); - } - - @Override public void beforeAlertSendKeys(WebDriver driver, Alert alert, String keys) { - messages.add("Externally defined listener: Attempt to send keys to alert"); - } - - @Override public void afterAlertSendKeys(WebDriver driver, Alert alert, String keys) { - messages.add("Externally defined listener: Keys were sent to alert"); - } - - @Override protected void add() { - SingleListeners.listeners.put(AlertListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/AppiumListener.java b/src/test/java/io/appium/java_client/events/listeners/AppiumListener.java deleted file mode 100644 index b74cad265..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/AppiumListener.java +++ /dev/null @@ -1,147 +0,0 @@ -package io.appium.java_client.events.listeners; - -import static java.lang.String.format; - -import io.appium.java_client.events.api.general.AppiumWebDriverEventListener; -import org.openqa.selenium.By; -import org.openqa.selenium.OutputType; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - -public class AppiumListener extends TestListener implements AppiumWebDriverEventListener { - @Override protected void add() { - SingleListeners.listeners.put(AppiumListener.class, this); - } - - @Override - public void beforeAlertAccept(WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to accept alert"); - } - - @Override - public void afterAlertAccept(WebDriver driver) { - messages.add("WebDriverEventListener: The alert was accepted"); - } - - @Override - public void afterAlertDismiss(WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to dismiss alert"); - } - - @Override - public void beforeAlertDismiss(WebDriver driver) { - messages.add("WebDriverEventListener: The alert was dismissed"); - } - - @Override public void beforeNavigateTo(String url, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to navigate to " + url); - } - - @Override public void afterNavigateTo(String url, WebDriver driver) { - messages.add("WebDriverEventListener: Navigation to " + url + " was successful"); - } - - @Override public void beforeNavigateBack(WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to navigate back"); - } - - @Override public void afterNavigateBack(WebDriver driver) { - messages.add("WebDriverEventListener: Navigation back was successful"); - } - - @Override public void beforeNavigateForward(WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to navigate forward"); - } - - @Override public void afterNavigateForward(WebDriver driver) { - messages.add("WebDriverEventListener: Navigation forward was successful"); - } - - @Override public void beforeNavigateRefresh(WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to refresh"); - } - - @Override public void afterNavigateRefresh(WebDriver driver) { - messages.add("WebDriverEventListener: The refreshing was successful"); - } - - @Override public void beforeFindBy(By by, WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to find something using " + by.toString() - + ". The root element is " - + String.valueOf(element)); - } - - @Override public void afterFindBy(By by, WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: The searching for something using " - + by.toString() + " has beed finished. " - + "The root element was " - + String.valueOf(element)); - } - - @Override public void beforeClickOn(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to click on the element"); - } - - @Override public void afterClickOn(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Thee element was clicked"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("WebDriverEventListener: Attempt to click on the element"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to change value of the element"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: The value of the element was changed"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("WebDriverEventListener: Thee element was clicked"); - } - - @Override public void beforeScript(String script, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to perform java script: " + script); - } - - @Override public void afterScript(String script, WebDriver driver) { - messages.add("WebDriverEventListener: Java script " + script + " was performed"); - } - - @Override public void onException(Throwable throwable, WebDriver driver) { - messages.add("WebDriverEventListener: The exception was thrown: " + throwable.getClass()); - } - - @Override - public void beforeGetScreenshotAs(OutputType target) { - messages.add(format("WebDriverEventListener: Attempt to take screen shot. Target type is %s", target)); - } - - @Override - public void afterGetScreenshotAs(OutputType target, X screenshot) { - messages.add(format("WebDriverEventListener: Screen shot was taken successfully. " - + "Target type is %s, result is %s", target, screenshot)); - } - - @Override public void beforeGetText(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to get text of the element"); - } - - @Override public void afterGetText(WebElement element, WebDriver driver, String text) { - messages.add("WebDriverEventListener: Got the text of an element"); - } - - @Override - public void beforeSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("WebDriverEventListener: Attempt to switch to window %s", windowName)); - } - - @Override - public void afterSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("WebDriverEventListener: driver is switched to window %s", windowName)); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ContextListener.java b/src/test/java/io/appium/java_client/events/listeners/ContextListener.java deleted file mode 100644 index 5b97d1dd4..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ContextListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.mobile.ContextEventListener; -import org.openqa.selenium.WebDriver; - -public class ContextListener extends TestListener implements ContextEventListener { - @Override public void beforeSwitchingToContext(WebDriver driver, String context) { - messages.add("Attempt to change current context to " + context); - } - - @Override public void afterSwitchingToContext(WebDriver driver, String context) { - messages.add("The previous context has been changed to " + context); - } - - @Override protected void add() { - SingleListeners.listeners.put(ContextListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ContextListener2.java b/src/test/java/io/appium/java_client/events/listeners/ContextListener2.java deleted file mode 100644 index 979c19a1a..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ContextListener2.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.mobile.ContextEventListener; -import org.openqa.selenium.WebDriver; - -public class ContextListener2 extends TestListener implements ContextEventListener { - @Override public void beforeSwitchingToContext(WebDriver driver, String context) { - messages.add("Externally defined listener: Attempt to change current context to " + context); - } - - @Override public void afterSwitchingToContext(WebDriver driver, String context) { - messages.add("Externally defined listener: The previous context has been changed to " + context); - } - - @Override protected void add() { - SingleListeners.listeners.put(ContextListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ElementListener.java b/src/test/java/io/appium/java_client/events/listeners/ElementListener.java deleted file mode 100644 index f1733aa53..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ElementListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.ElementEventListener; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - -public class ElementListener extends TestListener implements ElementEventListener { - - @Override public void beforeClickOn(WebElement element, WebDriver driver) { - messages.add("Attempt to click on the element"); - } - - @Override public void afterClickOn(WebElement element, WebDriver driver) { - messages.add("Thee element was clicked"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver) { - messages.add("Attempt to change value of the element"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("Attempt to change value of the element"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver) { - messages.add("The value of the element was changed"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("The value of the element was changed"); - } - - @Override public void beforeGetText(WebElement element, WebDriver driver) { - messages.add("Attempt to get text of the element"); - } - - @Override public void afterGetText(WebElement element, WebDriver driver, String text) { - messages.add("Got the text of an element"); - } - - @Override protected void add() { - SingleListeners.listeners.put(ElementListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ElementListener2.java b/src/test/java/io/appium/java_client/events/listeners/ElementListener2.java deleted file mode 100644 index 134db81e0..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ElementListener2.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.ElementEventListener; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - -public class ElementListener2 extends TestListener implements ElementEventListener { - - @Override public void beforeClickOn(WebElement element, WebDriver driver) { - messages.add("Externally defined listener: Attempt to click on the element"); - } - - @Override public void afterClickOn(WebElement element, WebDriver driver) { - messages.add("Externally defined listener: Thee element was clicked"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver) { - messages.add("Externally defined listener: Attempt to change value of the element"); - } - - @Override public void beforeChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("Externally defined listener: Attempt to change value of the element"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver) { - messages.add("Externally defined listener: The value of the element was changed"); - } - - @Override public void afterChangeValueOf(WebElement element, WebDriver driver, - CharSequence[] keysToSend) { - messages.add("Externally defined listener: The value of the element was changed"); - } - - @Override public void beforeGetText(WebElement element, WebDriver driver) { - messages.add("WebDriverEventListener: Attempt to get text of the element"); - } - - @Override public void afterGetText(WebElement element, WebDriver driver, String text) { - messages.add("WebDriverEventListener: Got the text of an element"); - } - - @Override protected void add() { - SingleListeners.listeners.put(ElementListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ExceptionListener.java b/src/test/java/io/appium/java_client/events/listeners/ExceptionListener.java deleted file mode 100644 index 837bcce1f..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ExceptionListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.ListensToException; -import org.openqa.selenium.WebDriver; - -public class ExceptionListener extends TestListener implements ListensToException { - @Override public void onException(Throwable throwable, WebDriver driver) { - messages.add("The exception was thrown: " + throwable.getClass()); - } - - @Override protected void add() { - SingleListeners.listeners.put(ExceptionListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/ExceptionListener2.java b/src/test/java/io/appium/java_client/events/listeners/ExceptionListener2.java deleted file mode 100644 index 194cad08c..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/ExceptionListener2.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.ListensToException; -import org.openqa.selenium.WebDriver; - -public class ExceptionListener2 extends TestListener implements ListensToException { - @Override public void onException(Throwable throwable, WebDriver driver) { - messages.add("Externally defined listener: The exception was thrown: " + throwable.getClass()); - } - - @Override protected void add() { - SingleListeners.listeners.put(ExceptionListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener.java b/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener.java deleted file mode 100644 index 09b7bad6e..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.JavaScriptEventListener; -import org.openqa.selenium.WebDriver; - -public class JavaScriptListener extends TestListener implements JavaScriptEventListener { - @Override public void beforeScript(String script, WebDriver driver) { - messages.add("Attempt to perform java script: " + script); - } - - @Override public void afterScript(String script, WebDriver driver) { - messages.add("Java script " + script + " was performed"); - } - - @Override protected void add() { - SingleListeners.listeners.put(JavaScriptListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener2.java b/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener2.java deleted file mode 100644 index 2ec869751..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/JavaScriptListener2.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.JavaScriptEventListener; -import org.openqa.selenium.WebDriver; - -public class JavaScriptListener2 extends TestListener implements JavaScriptEventListener { - @Override public void beforeScript(String script, WebDriver driver) { - messages.add("Externally defined listener: Attempt to perform java script: " + script); - } - - @Override public void afterScript(String script, WebDriver driver) { - messages.add("Externally defined listener: Java script " + script + " was performed"); - } - - @Override protected void add() { - SingleListeners.listeners.put(JavaScriptListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/NavigationListener.java b/src/test/java/io/appium/java_client/events/listeners/NavigationListener.java deleted file mode 100644 index ac9cd94f0..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/NavigationListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.NavigationEventListener; -import org.openqa.selenium.WebDriver; - -public class NavigationListener extends TestListener implements NavigationEventListener { - - @Override public void beforeNavigateTo(String url, WebDriver driver) { - messages.add("Attempt to navigate to " + url); - } - - @Override public void afterNavigateTo(String url, WebDriver driver) { - messages.add("Navigation to " + url + " was successful"); - } - - @Override public void beforeNavigateBack(WebDriver driver) { - messages.add("Attempt to navigate back"); - } - - @Override public void afterNavigateBack(WebDriver driver) { - messages.add("Navigation back was successful"); - } - - @Override public void beforeNavigateForward(WebDriver driver) { - messages.add("Attempt to navigate forward"); - } - - @Override public void afterNavigateForward(WebDriver driver) { - messages.add("Navigation forward was successful"); - } - - @Override public void beforeNavigateRefresh(WebDriver driver) { - messages.add("Attempt to refresh"); - } - - @Override public void afterNavigateRefresh(WebDriver driver) { - messages.add("The refreshing was successful"); - } - - @Override protected void add() { - SingleListeners.listeners.put(NavigationListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/NavigationListener2.java b/src/test/java/io/appium/java_client/events/listeners/NavigationListener2.java deleted file mode 100644 index 327f05bca..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/NavigationListener2.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.NavigationEventListener; -import org.openqa.selenium.WebDriver; - -public class NavigationListener2 extends TestListener implements NavigationEventListener { - - @Override public void beforeNavigateTo(String url, WebDriver driver) { - messages.add("Externally defined listener: Attempt to navigate to " + url); - } - - @Override public void afterNavigateTo(String url, WebDriver driver) { - messages.add("Externally defined listener: Navigation to " + url + " was successful"); - } - - @Override public void beforeNavigateBack(WebDriver driver) { - messages.add("Externally defined listener: Attempt to navigate back"); - } - - @Override public void afterNavigateBack(WebDriver driver) { - messages.add("Externally defined listener: Navigation back was successful"); - } - - @Override public void beforeNavigateForward(WebDriver driver) { - messages.add("Externally defined listener: Attempt to navigate forward"); - } - - @Override public void afterNavigateForward(WebDriver driver) { - messages.add("Externally defined listener: Navigation forward was successful"); - } - - @Override public void beforeNavigateRefresh(WebDriver driver) { - messages.add("Externally defined listener: Attempt to refresh"); - } - - @Override public void afterNavigateRefresh(WebDriver driver) { - messages.add("Externally defined listener: The refreshing was successful"); - } - - @Override protected void add() { - SingleListeners.listeners.put(NavigationListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/RotationListener.java b/src/test/java/io/appium/java_client/events/listeners/RotationListener.java deleted file mode 100644 index e98d274cc..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/RotationListener.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.mobile.RotationEventListener; -import org.openqa.selenium.ScreenOrientation; -import org.openqa.selenium.WebDriver; - -public class RotationListener extends TestListener implements RotationEventListener { - - @Override public void beforeRotation(WebDriver driver, ScreenOrientation orientation) { - messages.add("Attempt to change screen orientation. The new screen orientation is " - + orientation.toString()); - } - - @Override public void afterRotation(WebDriver driver, ScreenOrientation orientation) { - messages.add("The screen orientation has been changed to " - + orientation.toString()); - } - - @Override protected void add() { - SingleListeners.listeners.put(RotationListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/RotationListener2.java b/src/test/java/io/appium/java_client/events/listeners/RotationListener2.java deleted file mode 100644 index 9e7cd27ec..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/RotationListener2.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.mobile.RotationEventListener; -import org.openqa.selenium.ScreenOrientation; -import org.openqa.selenium.WebDriver; - -public class RotationListener2 extends TestListener implements RotationEventListener { - - @Override public void beforeRotation(WebDriver driver, ScreenOrientation orientation) { - messages.add("Externally defined listener: Attempt to change screen orientation. " - + "The new screen orientation is " - + orientation.toString()); - } - - @Override public void afterRotation(WebDriver driver, ScreenOrientation orientation) { - messages.add("Externally defined listener: The screen orientation has been changed to " - + orientation.toString()); - } - - @Override protected void add() { - SingleListeners.listeners.put(RotationListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/SearchingListener.java b/src/test/java/io/appium/java_client/events/listeners/SearchingListener.java deleted file mode 100644 index 22e46257a..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/SearchingListener.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.SearchingEventListener; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - -public class SearchingListener extends TestListener implements SearchingEventListener { - - @Override public void beforeFindBy(By by, WebElement element, WebDriver driver) { - messages.add("Attempt to find something using " + by.toString() + ". The root element is " - + String.valueOf(element)); - } - - @Override public void afterFindBy(By by, WebElement element, WebDriver driver) { - messages.add("The searching for something using " + by.toString() + " has beed finished. " - + "The root element was " - + String.valueOf(element)); - } - - @Override protected void add() { - SingleListeners.listeners.put(SearchingListener.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/SearchingListener2.java b/src/test/java/io/appium/java_client/events/listeners/SearchingListener2.java deleted file mode 100644 index bc3459a4d..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/SearchingListener2.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.general.SearchingEventListener; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; - -public class SearchingListener2 extends TestListener implements SearchingEventListener { - - @Override public void beforeFindBy(By by, WebElement element, WebDriver driver) { - messages.add("Externally defined listener: Attempt to find something using " - + by.toString() + ". The root element is " - + String.valueOf(element)); - } - - @Override public void afterFindBy(By by, WebElement element, WebDriver driver) { - messages.add("Externally defined listener: The searching for something using " - + by.toString() + " has beed finished. " - + "The root element was " - + String.valueOf(element)); - } - - @Override protected void add() { - SingleListeners.listeners.put(SearchingListener2.class, this); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/SingleListeners.java b/src/test/java/io/appium/java_client/events/listeners/SingleListeners.java deleted file mode 100644 index a61f12e56..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/SingleListeners.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.Listener; - -import java.util.HashMap; -import java.util.Map; - -public class SingleListeners { - - public static final Map, TestListener> listeners = new HashMap<>(); - -} diff --git a/src/test/java/io/appium/java_client/events/listeners/TestListener.java b/src/test/java/io/appium/java_client/events/listeners/TestListener.java deleted file mode 100644 index 21c8e9419..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/TestListener.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.appium.java_client.events.listeners; - -import io.appium.java_client.events.api.Listener; - -import java.util.ArrayList; -import java.util.List; - -public abstract class TestListener implements Listener { - - public final List messages = new ArrayList<>(); - - public TestListener() { - add(); - } - - protected abstract void add(); -} diff --git a/src/test/java/io/appium/java_client/events/listeners/WindowListener.java b/src/test/java/io/appium/java_client/events/listeners/WindowListener.java deleted file mode 100644 index cf8c786c0..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/WindowListener.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.appium.java_client.events.listeners; - -import static java.lang.String.format; - -import io.appium.java_client.events.api.general.WindowEventListener; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.Point; -import org.openqa.selenium.WebDriver; - -public class WindowListener extends TestListener implements WindowEventListener { - - @Override protected void add() { - SingleListeners.listeners.put(WindowListener.class, this); - } - - @Override public void beforeWindowChangeSize(WebDriver driver, WebDriver.Window window, - Dimension targetSize) { - messages.add("Attempt to change size of the window. The height is " + targetSize.getHeight() - + " the width is " + targetSize.getWidth()); - } - - @Override public void afterWindowChangeSize(WebDriver driver, WebDriver.Window window, - Dimension targetSize) { - messages.add("Size of the window has been changed. The height is " + targetSize.getHeight() - + " the width is " + targetSize.getWidth()); - } - - @Override - public void beforeWindowIsMoved(WebDriver driver, WebDriver.Window window, Point targetPoint) { - messages.add("Attempt to change position of the window. The X is " + targetPoint.getX() - + " the Y is " + targetPoint.getY()); - } - - @Override - public void afterWindowIsMoved(WebDriver driver, WebDriver.Window window, Point targetPoint) { - messages.add("The position the window has been changed. The X is " + targetPoint.getX() - + " the Y is " + targetPoint.getY()); - } - - @Override public void beforeWindowIsMaximized(WebDriver driver, WebDriver.Window window) { - messages.add("Attempt to maximize the window."); - } - - @Override public void afterWindowIsMaximized(WebDriver driver, WebDriver.Window window) { - messages.add("The window has been maximized"); - } - - @Override - public void beforeSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("Attempt to switch to window %s", windowName)); - } - - @Override - public void afterSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("driver is switched to window %s", windowName)); - } -} diff --git a/src/test/java/io/appium/java_client/events/listeners/WindowListener2.java b/src/test/java/io/appium/java_client/events/listeners/WindowListener2.java deleted file mode 100644 index 60a912364..000000000 --- a/src/test/java/io/appium/java_client/events/listeners/WindowListener2.java +++ /dev/null @@ -1,61 +0,0 @@ -package io.appium.java_client.events.listeners; - -import static java.lang.String.format; - -import io.appium.java_client.events.api.general.WindowEventListener; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.Point; -import org.openqa.selenium.WebDriver; - -public class WindowListener2 extends TestListener implements WindowEventListener { - - @Override protected void add() { - SingleListeners.listeners.put(WindowListener2.class, this); - } - - @Override public void beforeWindowChangeSize(WebDriver driver, WebDriver.Window window, - Dimension targetSize) { - messages.add("Externally defined listener: Attempt to change size of the window. " - + "The height is " + targetSize.getHeight() - + " the width is " + targetSize.getWidth()); - } - - @Override public void afterWindowChangeSize(WebDriver driver, WebDriver.Window window, - Dimension targetSize) { - messages.add("Externally defined listener: Size of the window has " - + "been changed. The height is " + targetSize.getHeight() - + " the width is " + targetSize.getWidth()); - } - - @Override - public void beforeWindowIsMoved(WebDriver driver, WebDriver.Window window, Point targetPoint) { - messages.add("Externally defined listener: Attempt to change position of the window. " - + "The X is " + targetPoint.getX() - + " the Y is " + targetPoint.getY()); - } - - @Override - public void afterWindowIsMoved(WebDriver driver, WebDriver.Window window, Point targetPoint) { - messages.add("Externally defined listener: The position the window has been changed. " - + "The X is " + targetPoint.getX() - + " the Y is " + targetPoint.getY()); - } - - @Override public void beforeWindowIsMaximized(WebDriver driver, WebDriver.Window window) { - messages.add("Externally defined listener: Attempt to maximize the window."); - } - - @Override public void afterWindowIsMaximized(WebDriver driver, WebDriver.Window window) { - messages.add("Externally defined listener: The window has been maximized"); - } - - @Override - public void beforeSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("Externally defined listener: Attempt to switch to window %s", windowName)); - } - - @Override - public void afterSwitchToWindow(String windowName, WebDriver driver) { - messages.add(format("Externally defined listener: driver is switched to window %s", windowName)); - } -} diff --git a/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java b/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java new file mode 100644 index 000000000..ae2e0df64 --- /dev/null +++ b/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java @@ -0,0 +1,262 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events.stubs; + +import com.google.common.collect.ImmutableList; +import org.openqa.selenium.Alert; +import org.openqa.selenium.By; +import org.openqa.selenium.Capabilities; +import org.openqa.selenium.ContextAware; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.DeviceRotation; +import org.openqa.selenium.HasCapabilities; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.Rotatable; +import org.openqa.selenium.ScreenOrientation; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.WindowType; +import org.openqa.selenium.logging.Logs; +import org.openqa.selenium.remote.DesiredCapabilities; + +import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class EmptyWebDriver implements WebDriver, ContextAware, Rotatable, + JavascriptExecutor, HasCapabilities, TakesScreenshot { + public EmptyWebDriver() { + } + + private static List createStubList() { + return ImmutableList.of(new StubWebElement(), new StubWebElement()); + } + + public WebDriver context(String name) { + return null; + } + + public Set getContextHandles() { + return null; + } + + public String getContext() { + return ""; + } + + public void rotate(ScreenOrientation orientation) { + } + + public void rotate(DeviceRotation rotation) { + } + + public ScreenOrientation getOrientation() { + return null; + } + + public DeviceRotation rotation() { + return null; + } + + public void get(String url) { + } + + public String getCurrentUrl() { + return null; + } + + public String getTitle() { + return null; + } + + public StubWebElement findElement(By by) { + return new StubWebElement(); + } + + public StubWebElement findElement(String by, String using) throws WebDriverException, NoSuchElementException { + return new StubWebElement(); + } + + public List findElements(By by) { + return createStubList(); + } + + public List findElements(String by, String using) throws WebDriverException { + return createStubList(); + } + + public String getPageSource() { + throw new WebDriverException(); + } + + public void close() { + } + + public void quit() { + } + + public Set getWindowHandles() { + return null; + } + + public String getWindowHandle() { + throw new WebDriverException(); + } + + public TargetLocator switchTo() { + return new EmptyWebDriver.StubTargetLocator(this); + } + + public Navigation navigate() { + return new EmptyWebDriver.StubNavigation(); + } + + public Options manage() { + return new EmptyWebDriver.StubOptions(); + } + + public Object executeScript(String script, Object... args) { + return null; + } + + public Object executeAsyncScript(String script, Object... args) { + return null; + } + + public Capabilities getCapabilities() { + Map map = new HashMap<>(); + map.put("0", ""); + map.put("1", ""); + return new DesiredCapabilities(map); + } + + public X getScreenshotAs(OutputType target) throws WebDriverException { + return target.convertFromPngBytes(new byte[]{1, 2}); + } + + private class StubNavigation implements Navigation { + private StubNavigation() { + } + + public void back() { + } + + public void forward() { + } + + public void to(String url) { + } + + public void to(URL url) { + } + + public void refresh() { + } + } + + private class StubOptions implements Options { + private StubOptions() { + } + + public void addCookie(Cookie cookie) { + } + + public void deleteCookieNamed(String name) { + } + + public void deleteCookie(Cookie cookie) { + } + + public void deleteAllCookies() { + } + + public Set getCookies() { + return null; + } + + public Cookie getCookieNamed(String name) { + return null; + } + + public Timeouts timeouts() { + return null; + } + + public ImeHandler ime() { + return null; + } + + public Window window() { + return new StubWindow(); + } + + public Logs logs() { + return null; + } + } + + private class StubTargetLocator implements TargetLocator { + private final WebDriver driver; + + StubTargetLocator(WebDriver driver) { + this.driver = driver; + } + + public WebDriver frame(int index) { + return this.driver; + } + + public WebDriver frame(String nameOrId) { + return this.driver; + } + + public WebDriver frame(WebElement frameElement) { + return this.driver; + } + + public WebDriver parentFrame() { + return this.driver; + } + + public WebDriver window(String nameOrHandle) { + return this.driver; + } + + @Override + public WebDriver newWindow(WindowType typeHint) { + return null; + } + + public WebDriver defaultContent() { + return this.driver; + } + + public WebElement activeElement() { + return new StubWebElement(); + } + + public Alert alert() { + return new StubAlert(); + } + } +} diff --git a/src/test/java/io/appium/java_client/events/stubs/StubAlert.java b/src/test/java/io/appium/java_client/events/stubs/StubAlert.java new file mode 100644 index 000000000..c89ec4bb7 --- /dev/null +++ b/src/test/java/io/appium/java_client/events/stubs/StubAlert.java @@ -0,0 +1,37 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events.stubs; + +import org.openqa.selenium.Alert; + +public class StubAlert implements Alert { + public StubAlert() { + } + + public void dismiss() { + } + + public void accept() { + } + + public String getText() { + return ""; + } + + public void sendKeys(String keysToSend) { + } +} diff --git a/src/test/java/io/appium/java_client/events/stubs/StubWebElement.java b/src/test/java/io/appium/java_client/events/stubs/StubWebElement.java new file mode 100644 index 000000000..4be313211 --- /dev/null +++ b/src/test/java/io/appium/java_client/events/stubs/StubWebElement.java @@ -0,0 +1,106 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events.stubs; + +import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.List; +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.Point; +import org.openqa.selenium.Rectangle; +import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.WebElement; + +public class StubWebElement implements WebElement { + public StubWebElement() { + } + + private static List createStubSubElementList() { + return new ArrayList<>(ImmutableList.of(new StubWebElement(), new StubWebElement())); + } + + public void click() { + } + + public void submit() { + } + + public void sendKeys(CharSequence... keysToSend) { + } + + public void clear() { + } + + public String getTagName() { + return null; + } + + public String getAttribute(String name) { + return null; + } + + public boolean isSelected() { + return false; + } + + public boolean isEnabled() { + return false; + } + + public String getText() { + return null; + } + + public List findElements(By by) { + return createStubSubElementList(); + } + + public WebElement findElement(By by) { + return new StubWebElement(); + } + + public boolean isDisplayed() { + return false; + } + + public Point getLocation() { + return null; + } + + public Dimension getSize() { + return null; + } + + public Rectangle getRect() { + throw new WebDriverException(); + } + + public String getCssValue(String propertyName) { + return null; + } + + public X getScreenshotAs(OutputType target) throws WebDriverException { + return target.convertFromPngBytes(new byte[]{1, 2}); + } + + public String toString() { + return this.getClass().getCanonicalName(); + } +} + diff --git a/src/test/java/io/appium/java_client/events/stubs/StubWindow.java b/src/test/java/io/appium/java_client/events/stubs/StubWindow.java new file mode 100644 index 000000000..d0e0fb82d --- /dev/null +++ b/src/test/java/io/appium/java_client/events/stubs/StubWindow.java @@ -0,0 +1,50 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client.events.stubs; + +import org.openqa.selenium.Dimension; +import org.openqa.selenium.Point; +import org.openqa.selenium.WebDriver.Window; + +public class StubWindow implements Window { + public StubWindow() { + } + + public void setSize(Dimension targetSize) { + } + + public void setPosition(Point targetPosition) { + } + + public Dimension getSize() { + return null; + } + + public Point getPosition() { + return null; + } + + public void maximize() { + } + + @Override + public void minimize() { + } + + public void fullscreen() { + } +}