I'm trying to validate certain browser network activity with Selenium 4 and Java.
Using the latest Selenium version.
It works just perfect on local machine but fails when trying to do that on Jenkins where Remote driver is running in the docker node.
I already saw this and this posts, as well as some more similar solutions.
I already added
chromeOptions.addArguments("--remote-allow-origins=*");
to chromedriver ChromeOptions,
I'm using Augmenter to start DevTools for Remote driver:
driver = new Augmenter().augment(driver);
devTools = ((HasDevTools) driver).getDevTools();
But this is giving me the following exception when running in the docker:
org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://172.18.0.3:4444/session/ac93fe504c2c380bff9a479230bdf2b6/se/cdp
Build info: version: '4.9.0', revision: 'd7057100a6'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-1038-gcp', java.version: '18.0.2.1'
Driver info: driver.version: SeleniumDriver
at org.openqa.selenium.remote.http.netty.NettyWebSocket.<init>(NettyWebSocket.java:102)
at org.openqa.selenium.remote.http.netty.NettyWebSocket.lambda$create$3(NettyWebSocket.java:128)
at org.openqa.selenium.remote.http.netty.NettyClient.openSocket(NettyClient.java:107)
at org.openqa.selenium.devtools.Connection.<init>(Connection.java:82)
at org.openqa.selenium.devtools.SeleniumCdpConnection.<init>(SeleniumCdpConnection.java:34)
at org.openqa.selenium.devtools.SeleniumCdpConnection.lambda$create$0(SeleniumCdpConnection.java:56)
at java.base/java.util.Optional.map(Optional.java:260)
at org.openqa.selenium.devtools.SeleniumCdpConnection.create(SeleniumCdpConnection.java:54)
at org.openqa.selenium.devtools.SeleniumCdpConnection.create(SeleniumCdpConnection.java:47)
at org.openqa.selenium.devtools.DevToolsProvider.getImplementation(DevToolsProvider.java:50)
at org.openqa.selenium.devtools.DevToolsProvider.getImplementation(DevToolsProvider.java:31)
at org.openqa.selenium.remote.Augmenter.augment(Augmenter.java:188)
at org.openqa.selenium.remote.Augmenter.augment(Augmenter.java:164)
at ***.core.SeleniumDriver.startNetworkLoggingSession(SeleniumDriver.java:142)
at ***.automation.pages.grid.gridPages.dashboarsAndReports.reports.rightclick.ReportsRightClickActions.download(ReportsRightClickActions.java:24)
at ***.automation.testcases.dashboard.DashboardTests.CreateAndDownloadReport(DashboardTests.java:2656)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:40)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:489)
at org.testng.internal.thread.ThreadUtil$1.call(ThreadUtil.java:52)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
and the exception occurs on this line
***.core.SeleniumDriver.startNetworkLoggingSession(SeleniumDriver.java:142)
In my code it is here
public static DevTools startNetworkLoggingSession(WebDriver driver) {
ConsoleLogger.info("Going to initiate Network Logging session with dev tools");
DevTools devTools;
if (DriverPropertiesInitializer.isLocal()) {
devTools = ((ChromeDriver) driver).getDevTools();
} else {
driver = new Augmenter().augment(driver);
devTools = ((HasDevTools) driver).getDevTools();
}
devTools.createSession();
ConsoleLogger.info("dev tools session created");
devTools.send(new Command<>("Network.enable", ImmutableMap.of()));
return devTools;
}
The exception is thrown on line
driver = new Augmenter().augment(driver);
Without Augmenter I saw another error, saying Remote driver failed to establish the logging session....