diff --git a/CHANGELOG.md b/CHANGELOG.md index 222ccc204e8..ce261c8e4df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. - Fixed the case when disk's size is bigger than Integer's max value (#379, #380) - Fix erroneous version reference used during CI testing of shaded dependencies - Fix leakage of Vibur and Tomcat JDBC test dependencies in `jdbc-test` and `mysql` modules (#382) +- Add timeout and retries for creation of `RemoteWebDriver` (#381, #373, #257) ### Changed - Added support for Docker networks (#372) diff --git a/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java b/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java index 3ea70d42566..7ae9b3787d9 100644 --- a/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java +++ b/modules/selenium/src/main/java/org/testcontainers/containers/BrowserWebDriverContainer.java @@ -6,6 +6,8 @@ import org.openqa.selenium.remote.BrowserType; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; +import org.rnorth.ducttape.timeouts.Timeouts; +import org.rnorth.ducttape.unreliables.Unreliables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.containers.traits.LinkableContainer; @@ -20,6 +22,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkState; import static java.time.temporal.ChronoUnit.SECONDS; @@ -157,7 +160,11 @@ protected void containerIsStarted(InspectContainerResponse containerInfo) { recordingSidekickContainer.start(); currentVncRecordings.add(recordingSidekickContainer); } - this.driver = new RemoteWebDriver(getSeleniumAddress(), desiredCapabilities); + + driver = Unreliables.retryUntilSuccess(30, TimeUnit.SECONDS, + Timeouts.getWithTimeout(10, TimeUnit.SECONDS, + () -> + () -> new RemoteWebDriver(getSeleniumAddress(), desiredCapabilities))); } /**