From 00c87448b77674be24c50fe140e98311b82d2400 Mon Sep 17 00:00:00 2001 From: Oscar Devora Date: Mon, 27 Nov 2023 14:13:31 -0600 Subject: [PATCH 1/3] add missing events to listeners w/ javadoc and tests --- .../support/events/EventFiringDecorator.java | 6 +++ .../support/events/WebDriverListener.java | 43 +++++++++++++++ .../events/EventFiringDecoratorTest.java | 54 +++++++++++++++++++ 3 files changed, 103 insertions(+) diff --git a/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java b/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java index b3ce8a46a4b69..bfba47f3ec60a 100644 --- a/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java +++ b/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java @@ -223,6 +223,9 @@ private void fireBeforeEvents( listener.beforeAnyOptionsCall((WebDriver.Options) target.getOriginal(), method, args); } else if (target.getOriginal() instanceof WebDriver.Timeouts) { listener.beforeAnyTimeoutsCall((WebDriver.Timeouts) target.getOriginal(), method, args); + } else if (target.getOriginal() instanceof WebDriver.TargetLocator) { + listener.beforeAnyTargetLocatorCall( + (WebDriver.TargetLocator) target.getOriginal(), method, args); } else if (target.getOriginal() instanceof WebDriver.Window) { listener.beforeAnyWindowCall((WebDriver.Window) target.getOriginal(), method, args); } @@ -280,6 +283,9 @@ private void fireAfterEvents( listener.afterAnyOptionsCall((WebDriver.Options) target.getOriginal(), method, args, res); } else if (target.getOriginal() instanceof WebDriver.Timeouts) { listener.afterAnyTimeoutsCall((WebDriver.Timeouts) target.getOriginal(), method, args, res); + } else if (target.getOriginal() instanceof WebDriver.TargetLocator) { + listener.afterAnyTargetLocatorCall( + (WebDriver.TargetLocator) target.getOriginal(), method, args, res); } else if (target.getOriginal() instanceof WebDriver.Window) { listener.afterAnyWindowCall((WebDriver.Window) target.getOriginal(), method, args, res); } diff --git a/java/src/org/openqa/selenium/support/events/WebDriverListener.java b/java/src/org/openqa/selenium/support/events/WebDriverListener.java index 0109bc86c0d9e..d6b57bd662fd6 100644 --- a/java/src/org/openqa/selenium/support/events/WebDriverListener.java +++ b/java/src/org/openqa/selenium/support/events/WebDriverListener.java @@ -32,6 +32,7 @@ import org.openqa.selenium.Point; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import org.openqa.selenium.WindowType; import org.openqa.selenium.interactions.Sequence; /** @@ -312,4 +313,46 @@ default void afterMaximize(WebDriver.Window window) {} default void beforeFullscreen(WebDriver.Window window) {} default void afterFullscreen(WebDriver.Window window) {} + + // Target Locator + + + /** + * Called before any method in {@link WebDriver.TargetLocator} class. + * + * @param targetLocator the target locator being used for the action + * @param method the method being invoked + * @param args the arguments to the method + */ + default void beforeAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args) {} + + /** + * Called after any method in {@link WebDriver.TargetLocator} class. + * + * @param targetLocator the target locator being used for the action + * @param method the method being invoked + * @param args the arguments to the method + * @param result the result of the method call + */ + default void afterAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args, Object result) {} + + /** + * This action will be performed each time before {@link + * org.openqa.selenium.WebDriver.TargetLocator#window(String)} + * + * @param targetLocator the target locator being used for the action + * @param nameOrHandle The name of the window or the handle as returned by {@link + * org.openqa.selenium.WebDriver#getWindowHandle()} or null if switching to a new + * window created by {@link org.openqa.selenium.WebDriver.TargetLocator#newWindow(WindowType)} + */ + default void beforeWindow(WebDriver.TargetLocator targetLocator, String nameOrHandle) {} + + /** + * @param targetLocator the target locator being used for the action + * @param nameOrHandle The name of the window or the handle as returned by {@link + * org.openqa.selenium.WebDriver#getWindowHandle()} or null if switching to a new + * window created by {@link org.openqa.selenium.WebDriver.TargetLocator#newWindow(WindowType)} + * @param driver WebDriver + */ + default void afterWindow(WebDriver.TargetLocator targetLocator, String nameOrHandle, WebDriver driver) {} } diff --git a/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java b/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java index 6c59df5e33d2e..e8230b0050ebc 100644 --- a/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java +++ b/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java @@ -309,6 +309,60 @@ public void afterExecuteScript( "afterAnyCall executeScript")); } + + @Test + void shouldFireTargetLocatorEvents() { + WebDriver driver = mock(WebDriver.class); + WebDriver.TargetLocator targetLocator = mock(WebDriver.TargetLocator.class); + when(driver.switchTo()).thenReturn(targetLocator); + + CollectorListener listener = + new CollectorListener() { + @Override + public void beforeAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args) { + acc.append("beforeAnyTargetLocatorCall ").append(method.getName()).append("\n"); + } + + @Override + public void afterAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args, + Object result) { + acc.append("afterAnyTargetLocatorCall ").append(method.getName()).append("\n"); + } + + @Override + public void beforeWindow(WebDriver.TargetLocator targetLocator, String windowName) { + acc.append("beforeWindow").append(windowName).append("\n"); + } + + @Override + public void afterWindow(WebDriver.TargetLocator targetLocator, String windowName) { + acc.append("afterWindow").append(windowName).append("\n"); + } + } + + WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver); + + decorated.switchTo().window("windowName"); + + assertThat(listener.acc.toString().trim()) + .isEqualTo( + String.join( + "\n", + "beforeAnyCall switchTo", + "beforeAnyWebDriverCall switchTo", + "beforeAnyTargetLocatorCall switchTo", + "afterAnyTargetLocatorCall switchTo", + "afterAnyWebDriverCall switchTo", + "afterAnyCall switchTo", + "beforeAnyCall window", + "beforeAnyTargetLocatorCall window", + "beforeWindow windowName", + "afterWindow windowName", + "afterAnyTargetLocatorCall window", + "afterAnyCall window")); + } + + @Test void shouldSuppressExceptionInBeforeAnyCall() { WebDriver driver = mock(WebDriver.class); From 3da885aa5ac454b3a2c2c099e06a7acb0f1d09a8 Mon Sep 17 00:00:00 2001 From: Oscar Devora Date: Mon, 27 Nov 2023 20:20:59 -0600 Subject: [PATCH 2/3] run format script --- .../selenium/support/events/WebDriverListener.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/java/src/org/openqa/selenium/support/events/WebDriverListener.java b/java/src/org/openqa/selenium/support/events/WebDriverListener.java index d6b57bd662fd6..a237cc4ed75a8 100644 --- a/java/src/org/openqa/selenium/support/events/WebDriverListener.java +++ b/java/src/org/openqa/selenium/support/events/WebDriverListener.java @@ -316,7 +316,6 @@ default void afterFullscreen(WebDriver.Window window) {} // Target Locator - /** * Called before any method in {@link WebDriver.TargetLocator} class. * @@ -324,7 +323,8 @@ default void afterFullscreen(WebDriver.Window window) {} * @param method the method being invoked * @param args the arguments to the method */ - default void beforeAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args) {} + default void beforeAnyTargetLocatorCall( + WebDriver.TargetLocator targetLocator, Method method, Object[] args) {} /** * Called after any method in {@link WebDriver.TargetLocator} class. @@ -334,7 +334,8 @@ default void beforeAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, M * @param args the arguments to the method * @param result the result of the method call */ - default void afterAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args, Object result) {} + default void afterAnyTargetLocatorCall( + WebDriver.TargetLocator targetLocator, Method method, Object[] args, Object result) {} /** * This action will be performed each time before {@link @@ -350,9 +351,10 @@ default void beforeWindow(WebDriver.TargetLocator targetLocator, String nameOrHa /** * @param targetLocator the target locator being used for the action * @param nameOrHandle The name of the window or the handle as returned by {@link - * org.openqa.selenium.WebDriver#getWindowHandle()} or null if switching to a new - * window created by {@link org.openqa.selenium.WebDriver.TargetLocator#newWindow(WindowType)} + * org.openqa.selenium.WebDriver#getWindowHandle()} or null if switching to a new + * window created by {@link org.openqa.selenium.WebDriver.TargetLocator#newWindow(WindowType)} * @param driver WebDriver */ - default void afterWindow(WebDriver.TargetLocator targetLocator, String nameOrHandle, WebDriver driver) {} + default void afterWindow( + WebDriver.TargetLocator targetLocator, String nameOrHandle, WebDriver driver) {} } From b4ea59ab257bf90210128c75ec89555b25d61e62 Mon Sep 17 00:00:00 2001 From: Oscar Devora Date: Mon, 27 Nov 2023 20:39:41 -0600 Subject: [PATCH 3/3] run format script --- .../events/EventFiringDecoratorTest.java | 76 +++++++++---------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java b/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java index e8230b0050ebc..2fddb4d0cf103 100644 --- a/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java +++ b/java/test/org/openqa/selenium/support/events/EventFiringDecoratorTest.java @@ -309,7 +309,6 @@ public void afterExecuteScript( "afterAnyCall executeScript")); } - @Test void shouldFireTargetLocatorEvents() { WebDriver driver = mock(WebDriver.class); @@ -317,52 +316,51 @@ void shouldFireTargetLocatorEvents() { when(driver.switchTo()).thenReturn(targetLocator); CollectorListener listener = - new CollectorListener() { - @Override - public void beforeAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args) { - acc.append("beforeAnyTargetLocatorCall ").append(method.getName()).append("\n"); - } - - @Override - public void afterAnyTargetLocatorCall(WebDriver.TargetLocator targetLocator, Method method, Object[] args, - Object result) { - acc.append("afterAnyTargetLocatorCall ").append(method.getName()).append("\n"); - } - - @Override - public void beforeWindow(WebDriver.TargetLocator targetLocator, String windowName) { - acc.append("beforeWindow").append(windowName).append("\n"); - } - - @Override - public void afterWindow(WebDriver.TargetLocator targetLocator, String windowName) { - acc.append("afterWindow").append(windowName).append("\n"); - } - } + new CollectorListener() { + @Override + public void beforeAnyTargetLocatorCall( + WebDriver.TargetLocator targetLocator, Method method, Object[] args) { + acc.append("beforeAnyTargetLocatorCall ").append(method.getName()).append("\n"); + } + + @Override + public void afterAnyTargetLocatorCall( + WebDriver.TargetLocator targetLocator, Method method, Object[] args, Object result) { + acc.append("afterAnyTargetLocatorCall ").append(method.getName()).append("\n"); + } + + @Override + public void beforeWindow(WebDriver.TargetLocator targetLocator, String windowName) { + acc.append("beforeWindow ").append(windowName).append("\n"); + } + + @Override + public void afterWindow( + WebDriver.TargetLocator targetLocator, String windowName, WebDriver driver) { + acc.append("afterWindow ").append(windowName).append("\n"); + } + }; WebDriver decorated = new EventFiringDecorator<>(listener).decorate(driver); decorated.switchTo().window("windowName"); assertThat(listener.acc.toString().trim()) - .isEqualTo( - String.join( - "\n", - "beforeAnyCall switchTo", - "beforeAnyWebDriverCall switchTo", - "beforeAnyTargetLocatorCall switchTo", - "afterAnyTargetLocatorCall switchTo", - "afterAnyWebDriverCall switchTo", - "afterAnyCall switchTo", - "beforeAnyCall window", - "beforeAnyTargetLocatorCall window", - "beforeWindow windowName", - "afterWindow windowName", - "afterAnyTargetLocatorCall window", - "afterAnyCall window")); + .isEqualTo( + String.join( + "\n", + "beforeAnyCall switchTo", + "beforeAnyWebDriverCall switchTo", + "afterAnyWebDriverCall switchTo", + "afterAnyCall switchTo", + "beforeAnyCall window", + "beforeAnyTargetLocatorCall window", + "beforeWindow windowName", + "afterWindow windowName", + "afterAnyTargetLocatorCall window", + "afterAnyCall window")); } - @Test void shouldSuppressExceptionInBeforeAnyCall() { WebDriver driver = mock(WebDriver.class);