From f554327e08ffff6308b22a85551225697251a067 Mon Sep 17 00:00:00 2001 From: Mohammad Saddam Hossain Date: Tue, 10 Nov 2026 15:16:38 +0530 Subject: [PATCH] chore: migrate to Selenium Boot 3.11.0 Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- .../com/seleniumboot/migrator/Migrator.java | 2 +- .../com/seleniumboot/migrator/CliTest.java | 4 +- .../seleniumboot/migrator/MigratorTest.java | 44 +++++++++---------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 415f73b..bc60127 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ java -jar target/selenium-boot-migrator.jar migrate ./my-selenium-project --out The output directory must not already exist and cannot be the source directory or one of its children. Migration output lists applied changes, compatibility notes, and any findings still requiring manual review. The build descriptor rewrite (`pom.xml`, `build.gradle`, `build.gradle.kts`) -uses the published Selenium Boot `3.10.0` release. +uses the published Selenium Boot `3.11.0` release. `analyze` reports counts per rule, what maps cleanly vs. needs review, and an *estimated* confidence. The estimate is a guide, not a guarantee. The report also lists dependencies found in Maven diff --git a/src/main/java/com/seleniumboot/migrator/Migrator.java b/src/main/java/com/seleniumboot/migrator/Migrator.java index 223b762..79af88a 100644 --- a/src/main/java/com/seleniumboot/migrator/Migrator.java +++ b/src/main/java/com/seleniumboot/migrator/Migrator.java @@ -40,7 +40,7 @@ /** Copies a project and applies only transformations that can be performed mechanically. */ public final class Migrator { - private static final String SELENIUM_BOOT_VERSION = "3.10.0"; + private static final String SELENIUM_BOOT_VERSION = "3.11.0"; private static final Set EXCLUDED_DIRECTORIES = Set.of(".git", "target", "build", ".gradle", "node_modules"); private static final Pattern GRADLE_STRING_DEPENDENCY = Pattern.compile( "(?m)^(?!(?:\\s*//|\\s*/\\*|\\s*\\*))(.*?)(?:(\"\"\"|['\"]))\\s*org\\.seleniumhq\\.selenium:selenium-java(?::[^'\"\\r\\n]+)?\\s*\\2"); diff --git a/src/test/java/com/seleniumboot/migrator/CliTest.java b/src/test/java/com/seleniumboot/migrator/CliTest.java index 9f0694c..d7d32d9 100644 --- a/src/test/java/com/seleniumboot/migrator/CliTest.java +++ b/src/test/java/com/seleniumboot/migrator/CliTest.java @@ -216,8 +216,8 @@ void migratesGradleProjectViaCli(@TempDir Path temp) throws Exception { RunResult result = runCli("migrate", fixture("gradle-groovy").toString(), "--out", output.toString()); assertEquals(0, result.exitCode()); assertTrue(result.out().contains("Migrated copy:")); - assertTrue(result.out().contains("[applied] build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); - assertTrue(Files.readString(output.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(result.out().contains("[applied] build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); + assertTrue(Files.readString(output.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.11.0")); } @Test diff --git a/src/test/java/com/seleniumboot/migrator/MigratorTest.java b/src/test/java/com/seleniumboot/migrator/MigratorTest.java index ed9bf8c..d016e2c 100644 --- a/src/test/java/com/seleniumboot/migrator/MigratorTest.java +++ b/src/test/java/com/seleniumboot/migrator/MigratorTest.java @@ -103,7 +103,7 @@ class Utility { int value; } String pom = Files.readString(output.resolve("pom.xml")); assertTrue(pom.contains("io.github.seleniumboot")); assertTrue(pom.contains("selenium-boot")); - assertTrue(pom.contains("3.10.0")); + assertTrue(pom.contains("3.11.0")); assertTrue(result.remaining().findings().stream().anyMatch(f -> f.ruleId().equals("MIG-014"))); assertTrue(result.remaining().findings().stream().anyMatch(f -> f.ruleId().equals("MIG-014") && f.file().endsWith("DriverFactory.java"))); @@ -157,7 +157,7 @@ class Caller { .filter(finding -> finding.ruleId().equals("MIG-017") && finding.file().endsWith("Caller.java")) .count()); - assertTrue(Files.readString(output.resolve("pom.xml")).contains("3.10.0")); + assertTrue(Files.readString(output.resolve("pom.xml")).contains("3.11.0")); assertTrue(Files.isRegularFile(output.resolve("MIGRATION_REPORT.md"))); String migrationReport = Files.readString(output.resolve("MIGRATION_REPORT.md")); @@ -217,13 +217,13 @@ public class DriverFactory { assertFalse(Files.exists(output.resolve("src/main/java/fixture/DriverFactory.java"))); String gradle = Files.readString(output.resolve("build.gradle")); - assertTrue(gradle.contains("implementation 'io.github.seleniumboot:selenium-boot:3.10.0'")); + assertTrue(gradle.contains("implementation 'io.github.seleniumboot:selenium-boot:3.11.0'")); assertTrue(gradle.contains("testImplementation 'org.testng:testng:7.10.2'")); assertFalse(gradle.contains("org.seleniumhq.selenium:selenium-java")); - assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.seleniumhq.selenium:selenium-java:4.21.0")); - assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.10.0")); + assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.11.0")); assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.testng:testng:7.10.2")); assertTrue(result.remaining().detectedTechnologies().contains("Build system: Gradle (Groovy DSL)")); } @@ -250,13 +250,13 @@ void migratesGradleKotlinProjectWithoutChangingOriginal() throws Exception { original.forEach((path, bytes) -> assertArrayEquals(bytes, read(project.resolve(path)))); String gradleKts = Files.readString(output.resolve("build.gradle.kts")); - assertTrue(gradleKts.contains("implementation(\"io.github.seleniumboot:selenium-boot:3.10.0\")")); + assertTrue(gradleKts.contains("implementation(\"io.github.seleniumboot:selenium-boot:3.11.0\")")); assertTrue(gradleKts.contains("testImplementation(\"org.junit.jupiter:junit-jupiter:5.10.2\")")); assertFalse(gradleKts.contains("org.seleniumhq.selenium:selenium-java")); - assertTrue(result.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(result.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.seleniumhq.selenium:selenium-java:4.21.0")); - assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.10.0")); + assertFalse(result.remaining().detectedTechnologies().contains("Dependency: io.github.seleniumboot:selenium-boot:3.11.0")); assertTrue(result.remaining().detectedTechnologies().contains("Dependency: org.junit.jupiter:junit-jupiter:5.10.2")); assertTrue(result.remaining().detectedTechnologies().contains("Build system: Gradle (Kotlin DSL)")); } @@ -266,14 +266,14 @@ void migratesFromGradleFixtures() throws Exception { Path groovyFixture = Path.of(MigratorTest.class.getResource("/gradle-groovy").toURI()); Path groovyOutput = temp.resolve("fixture-groovy-migrated"); Migrator.Result groovyResult = new Migrator().migrate(groovyFixture, groovyOutput); - assertTrue(groovyResult.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); - assertTrue(Files.readString(groovyOutput.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(groovyResult.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); + assertTrue(Files.readString(groovyOutput.resolve("build.gradle")).contains("io.github.seleniumboot:selenium-boot:3.11.0")); Path kotlinFixture = Path.of(MigratorTest.class.getResource("/gradle-kotlin").toURI()); Path kotlinOutput = temp.resolve("fixture-kotlin-migrated"); Migrator.Result kotlinResult = new Migrator().migrate(kotlinFixture, kotlinOutput); - assertTrue(kotlinResult.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); - assertTrue(Files.readString(kotlinOutput.resolve("build.gradle.kts")).contains("io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(kotlinResult.applied().contains("build.gradle.kts: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); + assertTrue(Files.readString(kotlinOutput.resolve("build.gradle.kts")).contains("io.github.seleniumboot:selenium-boot:3.11.0")); } @Test @@ -300,7 +300,7 @@ void migratesSeleniumJavaInGradleVersionCatalog() throws Exception { Migrator.Result result = new Migrator().migrate(project, output); String toml = Files.readString(output.resolve("gradle/libs.versions.toml")); - assertTrue(toml.contains("selenium-java = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" } # main")); + assertTrue(toml.contains("selenium-java = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" } # main")); assertTrue(toml.contains("# selenium-java = \"org.seleniumhq.selenium:selenium-java:1.0\""), "comment untouched"); assertTrue(toml.contains("selenium-chrome-driver = { module = \"org.seleniumhq.selenium:selenium-chrome-driver\""), "other entries untouched"); assertTrue(toml.contains("junit = \"org.junit.jupiter:junit-jupiter:5.10.2\"")); @@ -323,8 +323,8 @@ void migratesCatalogStringAndGroupNameForms() throws Exception { """); new Migrator().migrate(project, output); String toml = Files.readString(output.resolve("gradle/libs.versions.toml")); - assertTrue(toml.contains("sel = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" }")); - assertTrue(toml.contains("sel2 = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.10.0\" }")); + assertTrue(toml.contains("sel = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" }")); + assertTrue(toml.contains("sel2 = { module = \"io.github.seleniumboot:selenium-boot\", version = \"3.11.0\" }")); assertFalse(toml.contains("org.seleniumhq.selenium:selenium-java")); } @@ -414,19 +414,19 @@ void supportsVariousGradleSyntaxStyles() throws Exception { } """); Migrator.Result result = new Migrator().migrate(project, output); - assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.10.0")); + assertTrue(result.applied().contains("build.gradle: replaced selenium-java with io.github.seleniumboot:selenium-boot:3.11.0")); String migrated = Files.readString(output.resolve("build.gradle")); assertTrue(migrated.contains("// implementation 'org.seleniumhq.selenium:selenium-java:4.21.0'")); assertTrue(migrated.contains("/* testImplementation 'org.seleniumhq.selenium:selenium-java:4.21.0' */")); assertTrue(migrated.contains("* implementation 'org.seleniumhq.selenium:selenium-java:4.21.0'")); - assertTrue(migrated.contains("implementation \"io.github.seleniumboot:selenium-boot:3.10.0\"")); - assertTrue(migrated.contains("api \"io.github.seleniumboot:selenium-boot:3.10.0\"")); - assertTrue(migrated.contains("testImplementation group: 'io.github.seleniumboot', name: 'selenium-boot', version: '3.10.0'")); - assertTrue(migrated.contains("compileOnly name: 'selenium-boot', group: 'io.github.seleniumboot', version: '3.10.0'")); - assertTrue(migrated.contains("runtimeOnly 'io.github.seleniumboot', 'selenium-boot', '3.10.0'")); - assertTrue(migrated.contains("implementation('io.github.seleniumboot:selenium-boot:3.10.0') {")); + assertTrue(migrated.contains("implementation \"io.github.seleniumboot:selenium-boot:3.11.0\"")); + assertTrue(migrated.contains("api \"io.github.seleniumboot:selenium-boot:3.11.0\"")); + assertTrue(migrated.contains("testImplementation group: 'io.github.seleniumboot', name: 'selenium-boot', version: '3.11.0'")); + assertTrue(migrated.contains("compileOnly name: 'selenium-boot', group: 'io.github.seleniumboot', version: '3.11.0'")); + assertTrue(migrated.contains("runtimeOnly 'io.github.seleniumboot', 'selenium-boot', '3.11.0'")); + assertTrue(migrated.contains("implementation('io.github.seleniumboot:selenium-boot:3.11.0') {")); assertTrue(migrated.contains("exclude group: 'org.hamcrest'")); }