diff --git a/src/main/java/ru/kovbasa/driver/ChromeDriverFactory.java b/src/main/java/ru/kovbasa/driver/ChromeDriverFactory.java index 148a932..4adf01d 100644 --- a/src/main/java/ru/kovbasa/driver/ChromeDriverFactory.java +++ b/src/main/java/ru/kovbasa/driver/ChromeDriverFactory.java @@ -11,6 +11,10 @@ public class ChromeDriverFactory implements DriverFactory { final ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized"); options.addArguments("--disable-notifications"); + final String binaryPath = System.getProperty("chrome.binary", ""); + if (!binaryPath.isBlank()) { + options.setBinary(binaryPath); + } final boolean headless = Boolean.parseBoolean(System.getProperty("selenide.headless", "false")); if (headless) { diff --git a/src/main/java/ru/kovbasa/driver/WebDriverProvider.java b/src/main/java/ru/kovbasa/driver/WebDriverProvider.java index 5718fb3..1ceef19 100644 --- a/src/main/java/ru/kovbasa/driver/WebDriverProvider.java +++ b/src/main/java/ru/kovbasa/driver/WebDriverProvider.java @@ -8,6 +8,12 @@ import io.github.bonigarcia.wdm.WebDriverManager; import ru.kovbasa.config.TestConfig; import ru.kovbasa.listeners.HighlightElementListener; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public final class WebDriverProvider { private WebDriver driver; @@ -27,7 +33,12 @@ public final class WebDriverProvider { private WebDriver createDecoratedDriver() { if (!TestConfig.isSelenoidMode()) { - WebDriverManager.chromedriver().setup(); + final String chromeVersion = detectChromeMajorVersion().orElse(null); + if (chromeVersion != null) { + WebDriverManager.chromedriver().browserVersion(chromeVersion).setup(); + } else { + WebDriverManager.chromedriver().setup(); + } } final WebDriver raw = driverFactory.createDriver(); return new EventFiringDecorator(new HighlightElementListener()) @@ -40,4 +51,45 @@ public final class WebDriverProvider { driver = null; } } + + private Optional detectChromeMajorVersion() { + final String os = System.getProperty("os.name", "").toLowerCase(); + if (!os.contains("linux")) { + return Optional.empty(); + } + + final String[] commands = new String[] { + "chromium --version", + "chromium-browser --version", + "google-chrome --version" + }; + for (String cmd : commands) { + final Optional version = runVersionCommand(cmd); + if (version.isPresent()) { + return version; + } + } + return Optional.empty(); + } + + private Optional runVersionCommand(String command) { + try { + final Process process = new ProcessBuilder("sh", "-c", command) + .redirectErrorStream(true) + .start(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + final String output = reader.readLine(); + if (output == null) { + return Optional.empty(); + } + final Matcher matcher = Pattern.compile("(\\d+)\\.").matcher(output); + if (matcher.find()) { + return Optional.of(matcher.group(1)); + } + } + } catch (Exception ignored) { + // Best-effort detection only. + } + return Optional.empty(); + } }