Skip to content

Commit f99a84e

Browse files
beatngu13glibas
authored andcommitted
Unwrap wrapped drivers (#57)
* Ignore Maven target folder * Use `WrapsDriver` instead of `EventFiringWebDriver` `EventFiringWebDriver` also implements `WrapsDriver`, which is more general and should be implemented by all wrappers. * Unwrap via reflection for backwards-compatability Suggestion via #57 (comment).
1 parent 17cb408 commit f99a84e

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ bin
77
*.iml
88
.idea
99
screenshots
10-
*main.java
10+
*main.java
11+
target

src/main/java/com/assertthat/selenium_shutterbug/utils/web/Browser.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.openqa.selenium.remote.RemoteWebDriver;
2323
import org.openqa.selenium.remote.Response;
2424
import org.openqa.selenium.remote.http.HttpMethod;
25-
import org.openqa.selenium.support.events.EventFiringWebDriver;
2625

2726
import javax.imageio.ImageIO;
2827
import java.awt.*;
@@ -109,9 +108,7 @@ public BufferedImage takeScreenshot() {
109108
* @return BufferedImage resulting image
110109
*/
111110
public BufferedImage takeScreenshotEntirePage() {
112-
if (driver instanceof EventFiringWebDriver) {
113-
driver = ((EventFiringWebDriver) this.driver).getWrappedDriver();
114-
}
111+
driver = unwrapDriver();
115112

116113
if (driver instanceof ChromeDriver) {
117114
return takeScreenshotEntirePageUsingChromeCommand();
@@ -127,7 +124,22 @@ public BufferedImage takeScreenshotEntirePage() {
127124
return takeScreenshotEntirePageDefault();
128125
}
129126

130-
public BufferedImage takeScreenshotEntirePageDefault() {
127+
private WebDriver unwrapDriver() {
128+
String[] wrapperClassNames = {"org.openqa.selenium.WrapsDriver", "org.openqa.selenium.internal.WrapsDriver"};
129+
for (String wrapperClassName : wrapperClassNames) {
130+
try {
131+
Class<?> clazz = Class.forName(wrapperClassName);
132+
if (clazz.isInstance(driver)) {
133+
return (WebDriver) clazz.getMethod("getWrappedDriver").invoke(driver);
134+
}
135+
} catch (ReflectiveOperationException e) {
136+
// NOP
137+
}
138+
}
139+
return driver;
140+
}
141+
142+
public BufferedImage takeScreenshotEntirePageDefault() {
131143
final int _docWidth = this.getDocWidth();
132144
final int _docHeight = this.getDocHeight();
133145
BufferedImage combinedImage = new BufferedImage(_docWidth, _docHeight, BufferedImage.TYPE_INT_ARGB);

0 commit comments

Comments
 (0)