Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.fluentlenium.core.events;
import org.fluentlenium.core.FluentControl;
import org.fluentlenium.core.components.DefaultComponentInstantiator;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WrapsDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.support.events.WebDriverEventListener;
import java.awt.event.ContainerListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.common.collect.ImmutableList;
/**
* Registry of event listeners.
*/
public class EventsRegistry implements WrapsDriver { // NOPMD TooManyFields
private final EventFiringWebDriver eventDriver;
private final EventsSupport support;
private final DefaultComponentInstantiator instantiator;
public final List beforeNavigateTo = new ArrayList<>();
public final List afterNavigateTo = new ArrayList<>();
public final List beforeNavigateBack = new ArrayList<>();
public final List afterNavigateBack = new ArrayList<>();
public final List beforeNavigateForward = new ArrayList<>();
public final List afterNavigateForward = new ArrayList<>();
public final List beforeNavigate = new ArrayList<>();
public final List afterNavigate = new ArrayList<>();
public final List beforeNavigateRefresh = new ArrayList<>();
public final List afterNavigateRefresh = new ArrayList<>();
public final List beforeFindBy = new ArrayList<>();
public final List afterFindBy = new ArrayList<>();
public final List beforeClickOn = new ArrayList<>();
public final List afterClickOn = new ArrayList<>();
public final List beforeGetText = new ArrayList<>();
public final List afterGetText = new ArrayList<>();
public final List beforeChangeValueOf = new ArrayList<>();
public final List afterChangeValueOf = new ArrayList<>();
public final List beforeScript = new ArrayList<>();
public final List afterScript = new ArrayList<>();
public final List beforeAlertAccept = new ArrayList<>();
public final List afterAlertAccept = new ArrayList<>();
public final List beforeAlertDismiss = new ArrayList<>();
public final List afterAlertDismiss = new ArrayList<>();
public final List beforeSwitchToWindow = new ArrayList<>();
public final List afterSwitchToWindow = new ArrayList<>();
public final List beforeGetScreenshotAs = new ArrayList<>();
public final List afterGetScreenshotAs = new ArrayList<>();
public final List onException = new ArrayList<>();
public final List eventLists = ImmutableList.of(
beforeNavigateTo, afterNavigateTo,
beforeNavigateBack, afterNavigateBack,
beforeNavigateForward, afterNavigateForward,
beforeNavigate, afterNavigate,
beforeNavigateRefresh, afterNavigateRefresh,
beforeFindBy, afterFindBy,
beforeClickOn, afterClickOn,
beforeChangeValueOf, afterChangeValueOf,
beforeScript, afterScript,
beforeGetText, afterGetText,
beforeGetScreenshotAs, afterGetScreenshotAs,
beforeSwitchToWindow, afterSwitchToWindow,
onException
);
/**
* Creates a new registry of event listeners.
*
* @param control control interface
*/
public EventsRegistry(FluentControl control) {
eventDriver = (EventFiringWebDriver) control.getDriver();
support = new EventsSupport(this);
instantiator = new DefaultComponentInstantiator(control);
eventDriver.register(new EventAdapter(support, instantiator));
}
/**
* Register a new event listener.
*
* @param eventListener event listener to register
* @return {@code this} to chain method calls
*/
public EventsRegistry register(WebDriverEventListener eventListener) {
eventDriver.register(eventListener);
return this;
}
/**
* Register a new event listener.
*
* @param eventListener event listener to register
* @return {@code this} to chain method calls
*/
public EventsRegistry register(EventListener eventListener) {
eventDriver.register(new EventAdapter(eventListener, instantiator));
return this;
}
/**
* Unregister an existing event listener.
*
* @param eventListener existing event listener to unregister
* @return {@code this} to chain method calls
*/
public EventsRegistry unregister(EventListener eventListener) {
eventDriver.unregister(new EventAdapter(eventListener, instantiator));
return this;
}
/**
* Unregister all event listeners.
*/
public void close() {
unregister(support);
}
@Override
public WebDriver getWrappedDriver() {
return eventDriver.getWrappedDriver();
}
/**
* Add a listener that will be invoked before navigating to an url.
*
* @param listener listener invoked before navigating to an url.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeNavigateTo(NavigateToListener listener) {
beforeNavigateTo.add(listener);
return this;
}
/**
* Add a listener that will be invoked after navigation.
*
* @param listener listener invoked after navigation.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterNavigateTo(NavigateToListener listener) {
afterNavigateTo.add(listener);
return this;
}
/**
* Add a listener that will be invoked before navigating back.
*
* @param listener listener invoked before navigating back.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeNavigateBack(NavigateListener listener) {
beforeNavigateBack.add(listener);
return this;
}
/**
* Add a listener that will be invoked after navigating back.
*
* @param listener listener invoked after navigating back.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterNavigateBack(NavigateListener listener) {
afterNavigateBack.add(listener);
return this;
}
/**
* Add a listener that will be invoked before navigating forward.
*
* @param listener listener invoked before navigating forward.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeNavigateForward(NavigateListener listener) {
beforeNavigateForward.add(listener);
return this;
}
/**
* Add a listener that will be invoked after navigating forward.
*
* @param listener listener invoked after navigating forward.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterNavigateForward(NavigateListener listener) {
afterNavigateForward.add(listener);
return this;
}
/**
* Add a listener that will be invoked before navigating.
*
* @param listener listener invoked before navigating.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeNavigate(NavigateAllListener listener) {
beforeNavigate.add(listener);
return this;
}
/**
* Add a listener that will be invoked after navigating.
*
* @param listener listener invoked after navigating.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterNavigate(NavigateAllListener listener) {
afterNavigate.add(listener);
return this;
}
/**
* Add a listener that will be invoked before refresh.
*
* @param listener listener invoked before refresh.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeNavigateRefresh(NavigateListener listener) {
beforeNavigateRefresh.add(listener);
return this;
}
/**
* Add a listener that will be invoked after refresh.
*
* @param listener listener invoked after refresh.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterNavigateRefresh(NavigateListener listener) {
afterNavigateRefresh.add(listener);
return this;
}
/**
* Add a listener that will be invoked before finding an element.
*
* @param listener listener invoked before finding an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeFindBy(FindByListener listener) {
beforeFindBy.add(listener);
return this;
}
/**
* Add a listener that will be invoked after finding an element.
*
* @param listener listener invoked after finding an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterFindBy(FindByListener listener) {
afterFindBy.add(listener);
return this;
}
/**
* Add a listener that will be invoked before clicking an element.
*
* @param listener listener invoked before clicking an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeClickOn(ElementListener listener) {
beforeClickOn.add(listener);
return this;
}
/**
* Add a listener that will be invoked after clicking an element.
*
* @param listener listener invoked after clicking an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterClickOn(ElementListener listener) {
afterClickOn.add(listener);
return this;
}
/**
* Add a listener that will be invoked before get text of an element.
*
* @param listener listener invoked before get text of an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeGetText(ElementListener listener) {
beforeGetText.add(listener);
return this;
}
/**
* Add a listener that will be invoked after get text of an element.
*
* @param listener listener invoked after get text of an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterGetText(ElementListener listener) {
afterGetText.add(listener);
return this;
}
/**
* Add a listener that will be invoked before changing value of an element.
*
* @param listener listener invoked before changing value of an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeChangeValueOf(ElementListener listener) {
beforeChangeValueOf.add(listener);
return this;
}
/**
* Add a listener that will be invoked after changing value of an element.
*
* @param listener listener invoked after changing value of an element.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterChangeValueOf(ElementListener listener) {
afterChangeValueOf.add(listener);
return this;
}
/**
* Add a listener that will be invoked before executing a script.
*
* @param listener listener invoked before executing a script.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeScript(ScriptListener listener) {
beforeScript.add(listener);
return this;
}
/**
* Add a listener that will be invoked after executing a script.
*
* @param listener listener invoked after executing a script.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterScript(ScriptListener listener) {
afterScript.add(listener);
return this;
}
/**
* Add a listener that will be invoked before an alert is accepted.
*
* @param listener listener invoked before an alert is accepted.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeAlertAccept(AlertListener listener) {
beforeAlertAccept.add(listener);
return this;
}
/**
* Add a listener that will be invoked after an alert is accepted.
*
* @param listener listener invoked after an alert is accepted.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterAlertAccept(AlertListener listener) {
afterAlertAccept.add(listener);
return this;
}
/**
* Add a listener that will be invoked before an alert is dismissed.
*
* @param listener listener invoked before an alert is dismissed.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeAlertDismiss(AlertListener listener) {
beforeAlertDismiss.add(listener);
return this;
}
/**
* Add a listener that will be invoked after an alert is dismissed.
*
* @param listener listener invoked after an alert is dismissed.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterAlertDismiss(AlertListener listener) {
afterAlertDismiss.add(listener);
return this;
}
/**
* Add a listener that will be invoked after an exception occurred.
*
* @param listener listener invoked after an exception occurred.
* @return {@code this} to chain method calls
*/
public EventsRegistry onException(ExceptionListener listener) {
onException.add(listener);
return this;
}
/**
* Add a listener that will be invoked after window switch.
*
* @param listener listener invoked after window switch.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterSwitchToWindow(SwitchToWindowListener listener) {
afterSwitchToWindow.add(listener);
return this;
}
/**
* Add a listener that will be invoked before window switch.
*
* @param listener listener invoked before window switch.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeSwitchToWindow(SwitchToWindowListener listener) {
beforeSwitchToWindow.add(listener);
return this;
}
/**
* Add a listener that will be invoked after getScreenshotAs.
*
* @param listener listener invoked after getScreenshotAs.
* @return {@code this} to chain method calls
*/
public EventsRegistry afterGetScreenshotAs(GetScreenshotAsListener listener) {
afterGetScreenshotAs.add(listener);
return this;
}
/**
* Add a listener that will be invoked before getScreenshotAs.
*
* @param listener listener invoked before getScreenshotAs.
* @return {@code this} to chain method calls
*/
public EventsRegistry beforeGetScreenshotAs(GetScreenshotAsListener listener) {
beforeGetScreenshotAs.add(listener);
return this;
}
/**
* Sort listeners based on priority.
*
* @see ListenerPriorityComparator
*/
protected void sortListeners() {
ListenerPriorityComparator comparator = new ListenerPriorityComparator();
for (List eventList : eventLists) {
eventList.sort(comparator);
}
}
/**
* Unregister all listeners attached to a given container.
*
* @param container container
*/
public void unregisterContainer(Object container) {
for (List eventList : eventLists) {
unregisterContainer(eventList, container);
}
}
private void unregisterContainer(Iterable iterable, Object container) {
Iterator iterator = iterable.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
if (next instanceof ContainerListener && next == container) { // NOPMD CompareObjectsWithEquals
iterator.remove();
}
}
}
}