Skip to content

Commit c49361a

Browse files
baflQAdiemol
andauthored
Extract original driver from decorated driver when Augmenting a driver (#12248)
* Extract original driver from decorated driver * Add test * Use import * Unnecessary qualification removed * Preserve order * Formatting files --------- Co-authored-by: Diego Molina <diemol@users.noreply.github.com> Co-authored-by: Diego Molina <diemol@gmail.com>
1 parent 1976dbe commit c49361a

File tree

5 files changed

+44
-0
lines changed

5 files changed

+44
-0
lines changed

java/src/org/openqa/selenium/remote/Augmenter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.openqa.selenium.internal.Require;
5151
import org.openqa.selenium.logging.HasLogEvents;
5252
import org.openqa.selenium.remote.html5.AddWebStorage;
53+
import org.openqa.selenium.support.decorators.Decorated;
5354

5455
/**
5556
* Enhance the interfaces implemented by an instance of the {@link org.openqa.selenium.WebDriver}
@@ -251,6 +252,10 @@ private RemoteWebDriver extractRemoteWebDriver(WebDriver driver) {
251252
return (RemoteWebDriver) driver;
252253
}
253254

255+
if (driver instanceof Decorated) {
256+
return extractRemoteWebDriver((WebDriver) ((Decorated<?>) driver).getOriginal());
257+
}
258+
254259
if (driver instanceof WrapsDriver) {
255260
return extractRemoteWebDriver(((WrapsDriver) driver).getWrappedDriver());
256261
}

java/src/org/openqa/selenium/remote/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ java_library(
6060
"//java/src/org/openqa/selenium/remote/http/netty",
6161
"//java/src/org/openqa/selenium/remote/tracing",
6262
"//java/src/org/openqa/selenium/remote/tracing/opentelemetry",
63+
"//java/src/org/openqa/selenium/support/decorators",
6364
artifact("com.google.guava:guava"),
6465
artifact("net.bytebuddy:byte-buddy"),
6566
],

java/src/org/openqa/selenium/support/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ java_export(
1616
visibility = ["//visibility:public"],
1717
exports = [
1818
":page-factory",
19+
"//java/src/org/openqa/selenium/support/decorators",
1920
"//java/src/org/openqa/selenium/support/events",
2021
"//java/src/org/openqa/selenium/support/locators",
2122
"//java/src/org/openqa/selenium/support/ui:clock",

java/src/org/openqa/selenium/support/decorators/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ java_library(
55
name = "decorators",
66
srcs = glob(["*.java"]),
77
visibility = [
8+
"//java/src/org/openqa/selenium/remote:__subpackages__",
89
"//java/src/org/openqa/selenium/support:__subpackages__",
910
"//java/test/org/openqa/selenium/support/decorators:__pkg__",
1011
],

java/test/org/openqa/selenium/remote/AugmenterTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import org.openqa.selenium.internal.Require;
4545
import org.openqa.selenium.support.decorators.Decorated;
4646
import org.openqa.selenium.support.decorators.WebDriverDecorator;
47+
import org.openqa.selenium.support.events.EventFiringDecorator;
48+
import org.openqa.selenium.support.events.WebDriverListener;
4749

4850
@Tag("UnitTests")
4951
class AugmenterTest {
@@ -240,6 +242,40 @@ void shouldDecorateAugmentedWebDriver() {
240242
assertThat(number).isEqualTo(42);
241243
}
242244

245+
@Test
246+
void shouldAugmentDecoratedWebDriver() {
247+
final Capabilities caps =
248+
new ImmutableCapabilities(
249+
"magic.numbers", true,
250+
"numbers", true);
251+
WebDriver driver = new RemoteWebDriver(new StubExecutor(caps), caps);
252+
WebDriver eventFiringDecorate =
253+
new EventFiringDecorator<>(
254+
new WebDriverListener() {
255+
@Override
256+
public void beforeAnyCall(Object target, Method method, Object[] args) {
257+
System.out.println("Bazinga!");
258+
}
259+
})
260+
.decorate(driver);
261+
262+
WebDriver modifyTitleDecorate =
263+
new ModifyTitleWebDriverDecorator().decorate(eventFiringDecorate);
264+
265+
WebDriver augmented =
266+
getAugmenter()
267+
.addDriverAugmentation("magic.numbers", HasMagicNumbers.class, (c, exe) -> () -> 42)
268+
.augment(modifyTitleDecorate);
269+
270+
assertThat(modifyTitleDecorate).isNotSameAs(driver);
271+
272+
assertThat(((HasMagicNumbers) augmented).getMagicNumber()).isEqualTo(42);
273+
assertThat(augmented.getTitle()).isEqualTo("title");
274+
275+
assertThat(augmented).isNotSameAs(modifyTitleDecorate);
276+
assertThat(augmented).isInstanceOf(Decorated.class);
277+
}
278+
243279
private static class ByMagic extends By {
244280

245281
private final String magicWord;

0 commit comments

Comments
 (0)