diff --git a/java/src/org/openqa/selenium/remote/AddHasLogEvents.java b/java/src/org/openqa/selenium/remote/AddHasLogEvents.java new file mode 100644 index 0000000000000..21221761af482 --- /dev/null +++ b/java/src/org/openqa/selenium/remote/AddHasLogEvents.java @@ -0,0 +1,62 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.openqa.selenium.remote; + +import static org.openqa.selenium.remote.Browser.CHROME; +import static org.openqa.selenium.remote.Browser.EDGE; +import static org.openqa.selenium.remote.Browser.OPERA; + +import org.openqa.selenium.Capabilities; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.devtools.HasDevTools; +import org.openqa.selenium.logging.EventType; +import org.openqa.selenium.logging.HasLogEvents; + +import java.util.function.Predicate; + +public class AddHasLogEvents + implements AugmenterProvider { + + private static final Predicate IS_CHROMIUM_BROWSER = name -> + CHROME.is(name) || + EDGE.is(name) || + OPERA.is(name); + + @Override + public Predicate isApplicable() { + return caps -> IS_CHROMIUM_BROWSER.test(caps.getBrowserName()); + } + + @Override + public Class getDescribedInterface() { + return HasLogEvents.class; + } + + @Override + public HasLogEvents getImplementation(Capabilities capabilities, ExecuteMethod executeMethod) { + return new HasLogEvents() { + @Override + public void onLogEvent(EventType kind) { + if (((RemoteExecuteMethod) executeMethod).getWrappedDriver() instanceof HasDevTools) { + WebDriver driver = ((RemoteExecuteMethod) executeMethod).getWrappedDriver(); + kind.initializeListener(driver); + } + } + }; + } +} diff --git a/java/src/org/openqa/selenium/remote/Augmenter.java b/java/src/org/openqa/selenium/remote/Augmenter.java index 2148524d48490..64df9b0a54450 100644 --- a/java/src/org/openqa/selenium/remote/Augmenter.java +++ b/java/src/org/openqa/selenium/remote/Augmenter.java @@ -33,6 +33,7 @@ import org.openqa.selenium.WebDriverException; import org.openqa.selenium.WrapsDriver; import org.openqa.selenium.internal.Require; +import org.openqa.selenium.logging.HasLogEvents; import org.openqa.selenium.remote.html5.AddWebStorage; import java.lang.reflect.Field; @@ -219,6 +220,10 @@ private WebDriver addDependentAugmentations(WebDriver driver) { augmentationList.add(createAugmentation(new AddHasAuthentication())); } + if (!(driver instanceof HasLogEvents)) { + augmentationList.add(createAugmentation(new AddHasLogEvents())); + } + if (!augmentationList.isEmpty()) { Capabilities caps = ImmutableCapabilities.copyOf(((HasCapabilities) driver).getCapabilities());