Skip to content

Commit 7568f7a

Browse files
morrishoreshshs96c
authored andcommitted
add before/afterGetScreenshotAs to WebDriverEventListener
1 parent 12802a7 commit 7568f7a

File tree

4 files changed

+62
-4
lines changed

4 files changed

+62
-4
lines changed

java/client/src/org/openqa/selenium/support/events/AbstractWebDriverEventListener.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.openqa.selenium.support.events;
1919

2020
import org.openqa.selenium.By;
21+
import org.openqa.selenium.OutputType;
2122
import org.openqa.selenium.WebDriver;
2223
import org.openqa.selenium.WebElement;
2324

@@ -118,4 +119,13 @@ public void beforeSwitchToWindow(String windowName, WebDriver driver) {
118119
public void onException(Throwable throwable, WebDriver driver) {
119120
// Do nothing
120121
}
122+
123+
public <X> void beforeGetScreenshotAs(OutputType<X> target) {
124+
// Do nothing
125+
}
126+
127+
public <X> void afterGetScreenshotAs(OutputType<X> target, X screenshot) {
128+
// Do nothing
129+
}
130+
121131
}

java/client/src/org/openqa/selenium/support/events/EventFiringWebDriver.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,13 @@ private Object wrapResult(Object result) {
280280
return result;
281281
}
282282

283-
public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
284-
if (driver instanceof TakesScreenshot) {
285-
return ((TakesScreenshot) driver).getScreenshotAs(target);
286-
}
283+
public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
284+
if (driver instanceof TakesScreenshot) {
285+
dispatcher.beforeGetScreenshotAs(target);
286+
X screenshot = ((TakesScreenshot) driver).getScreenshotAs(target);
287+
dispatcher.afterGetScreenshotAs(target, screenshot);
288+
return screenshot;
289+
}
287290

288291
throw new UnsupportedOperationException(
289292
"Underlying driver instance does not support taking screenshots");

java/client/src/org/openqa/selenium/support/events/WebDriverEventListener.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.openqa.selenium.Alert;
2121
import org.openqa.selenium.By;
22+
import org.openqa.selenium.OutputType;
2223
import org.openqa.selenium.WebDriver;
2324
import org.openqa.selenium.WebElement;
2425

@@ -216,4 +217,25 @@ public interface WebDriverEventListener {
216217
* @param throwable the exception that will be thrown
217218
*/
218219
void onException(Throwable throwable, WebDriver driver);
220+
221+
/**
222+
* Called before {@link org.openqa.selenium.TakesScreenshot#getScreenshotAs(OutputType)}
223+
* allows the implementation to determine which type of output will be generated
224+
*
225+
* @param <X> Return type for getScreenshotAs.
226+
* @param target target type, @see OutputType
227+
*/
228+
<X> void beforeGetScreenshotAs(OutputType<X> target);
229+
230+
/**
231+
* Called after {@link org.openqa.selenium.TakesScreenshot#getScreenshotAs(OutputType)}
232+
* allows the implementation to determine which type of output was generated
233+
* and to access the output itself
234+
*
235+
* @param <X> Return type for getScreenshotAs.
236+
* @param target target type, @see OutputType
237+
* @param screenshot screenshot output of the specified type
238+
*/
239+
<X> void afterGetScreenshotAs(OutputType<X> target, X screenshot);
240+
219241
}

java/client/test/org/openqa/selenium/support/events/EventFiringWebDriverTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@
4343
import org.openqa.selenium.By;
4444
import org.openqa.selenium.JavascriptExecutor;
4545
import org.openqa.selenium.NoSuchElementException;
46+
import org.openqa.selenium.OutputType;
4647
import org.openqa.selenium.StubDriver;
48+
import org.openqa.selenium.TakesScreenshot;
4749
import org.openqa.selenium.WebDriver;
4850
import org.openqa.selenium.WebDriver.Navigation;
4951
import org.openqa.selenium.WebDriver.TargetLocator;
@@ -450,4 +452,25 @@ public void shouldReturnLocatorFromToStringMethod() {
450452
}
451453

452454
private static class ChildDriver extends StubDriver {}
455+
456+
@Test
457+
public void getScreenshotAs() {
458+
final String DATA = "data";
459+
WebDriver mockedDriver = mock(WebDriver.class, withSettings().extraInterfaces(TakesScreenshot.class));
460+
WebDriverEventListener listener = mock(WebDriverEventListener.class);
461+
EventFiringWebDriver testedDriver = new EventFiringWebDriver(mockedDriver).register(listener);
462+
463+
Mockito.doReturn(DATA).when((TakesScreenshot)mockedDriver).getScreenshotAs(OutputType.BASE64);
464+
465+
String screenshot = ((TakesScreenshot)testedDriver).getScreenshotAs(OutputType.BASE64);
466+
assertTrue(screenshot.equals(DATA));
467+
468+
InOrder order = Mockito.inOrder(mockedDriver, listener);
469+
order.verify(listener).beforeGetScreenshotAs(OutputType.BASE64);
470+
order.verify((TakesScreenshot)mockedDriver).getScreenshotAs(OutputType.BASE64);
471+
order.verify(listener).afterGetScreenshotAs(OutputType.BASE64, screenshot);
472+
verifyNoMoreInteractions(mockedDriver, listener);
473+
474+
}
475+
453476
}

0 commit comments

Comments
 (0)