Skip to content

Commit d09372a

Browse files
authored
Merge pull request #79 from seleniumboot/release/3.5.0
Release 3.5.0
2 parents 72a6539 + 31429c0 commit d09372a

8 files changed

Lines changed: 20 additions & 11 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
---
99

10-
### v3.5.0 — unreleased
10+
### v3.5.0 — 2026-09-24
1111

1212
- **Zero-config first run: `selenium-boot.yml` is now optional** — with no default `selenium-boot.yml` in the working directory or on the classpath, the framework runs on built-in defaults (`browser.name: chrome`, `execution.mode: local`, `timeouts.explicit: 10`, `timeouts.pageLoad: 30`) and prints one `[Selenium Boot] No selenium-boot.yml found — running with built-in defaults ...` notice line. Fields a file omits (and an empty file) fall back to the same defaults; `browser.name` is only defaulted when `browser.matrix` is not set, and `SeleniumBootDefaults` overrides still take precedence over the built-ins. Nothing that was an error before stops being one: a requested profile (`-Dselenium.boot.profile`) or explicit path (`-Dselenium.boot.config`) whose file is missing still throws, so a typo never silently runs on defaults, and present-but-invalid values (an unknown `execution.mode`, a negative timeout) still fail validation. Adds `ConfigurationLoader.load(File, ClassLoader)` (working directory and classpath supplied, for tests). (#66)
1313
- **Terminal `Locator` actions wait for the element and re-resolve it on every poll** — `click()`, `type()`, `append()`, `getText()`, `getAttribute()`, `hover()`, `scrollIntoView()`, `jsClick()` and `element()` used to look the element up once and act on that cached reference, so a page that re-rendered it in between surfaced as a `StaleElementReferenceException`, and a locator that matched nothing yet threw immediately. They now resolve the locator from scratch on each poll, retrying on a stale or not-yet-present element until `timeouts.explicit` elapses. **Behavior change:** a locator that matches nothing is now retried for up to `timeouts.explicit` instead of failing at once. If it never matches, the call still ends in a `LocatorException` (cause: `TimeoutException`), so existing catches keep working; an element that exists but never becomes visible/clickable still times out with a `TimeoutException`, as before. `isVisible()`, `isHidden()`, `isEnabled()` and `count()` still never wait, and `rows()` inherits the wait for its table through `element()`. (#67, #68)

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Three files. Copy them as-is and `mvn test` goes green against a real Chrome.
2828
<dependency>
2929
<groupId>io.github.seleniumboot</groupId>
3030
<artifactId>selenium-boot</artifactId>
31-
<version>3.4.0</version>
31+
<version>3.5.0</version>
3232
</dependency>
3333
</dependencies>
3434

@@ -205,7 +205,7 @@ Add to your `pom.xml`:
205205
<dependency>
206206
<groupId>io.github.seleniumboot</groupId>
207207
<artifactId>selenium-boot</artifactId>
208-
<version>3.4.0</version>
208+
<version>3.5.0</version>
209209
</dependency>
210210
```
211211

@@ -787,7 +787,7 @@ ci:
787787

788788
## Project Status
789789

790-
**Current release: v3.4.0** — new header-keyed table extraction (`Locator.rows()`), bootstrap failures now log their full root-cause chain, and Selenium Java is bumped to 4.49.0.
790+
**Current release: v3.5.0** — zero-config first run (`selenium-boot.yml` is now optional), terminal `Locator` actions that wait and re-resolve stale elements, and JUnit 6 support.
791791

792792
See the full version history in **[CHANGELOG.md](CHANGELOG.md)**.
793793

‎docs-site/docs/changelog.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ All notable changes to Selenium Boot are documented here.
1111

1212
---
1313

14+
## [3.5.0] — 2026-09-24
15+
16+
- **Zero-config first run: `selenium-boot.yml` is now optional** — with no default `selenium-boot.yml` in the working directory or on the classpath, the framework runs on built-in defaults (`browser.name: chrome`, `execution.mode: local`, `timeouts.explicit: 10`, `timeouts.pageLoad: 30`) and prints one `[Selenium Boot] No selenium-boot.yml found — running with built-in defaults ...` notice line. Fields a file omits (and an empty file) fall back to the same defaults; `browser.name` is only defaulted when `browser.matrix` is not set, and `SeleniumBootDefaults` overrides still take precedence over the built-ins. Nothing that was an error before stops being one: a requested profile (`-Dselenium.boot.profile`) or explicit path (`-Dselenium.boot.config`) whose file is missing still throws, so a typo never silently runs on defaults, and present-but-invalid values (an unknown `execution.mode`, a negative timeout) still fail validation. Adds `ConfigurationLoader.load(File, ClassLoader)` (working directory and classpath supplied, for tests). (#66)
17+
- **Terminal `Locator` actions wait for the element and re-resolve it on every poll** — `click()`, `type()`, `append()`, `getText()`, `getAttribute()`, `hover()`, `scrollIntoView()`, `jsClick()` and `element()` used to look the element up once and act on that cached reference, so a page that re-rendered it in between surfaced as a `StaleElementReferenceException`, and a locator that matched nothing yet threw immediately. They now resolve the locator from scratch on each poll, retrying on a stale or not-yet-present element until `timeouts.explicit` elapses. **Behavior change:** a locator that matches nothing is now retried for up to `timeouts.explicit` instead of failing at once. If it never matches, the call still ends in a `LocatorException` (cause: `TimeoutException`), so existing catches keep working; an element that exists but never becomes visible/clickable still times out with a `TimeoutException`, as before. `isVisible()`, `isHidden()`, `isEnabled()` and `count()` still never wait, and `rows()` inherits the wait for its table through `element()`. (#67, #68)
18+
- **JUnit Jupiter API bumped 5.10.2 → 6.1.3** (`junit-jupiter-api`, optional dependency of the JUnit 5 bridge). `junit-platform-launcher` is now bumped to match (6.1.3, was 1.10.2), closing the pairing gap left by #64. Verified both directions against the consumer integration suite (11/11 real-browser JUnit 5 tests): a consumer still on JUnit 5.10.2 + launcher 1.10.2 keeps working unchanged, and a consumer on JUnit 6 (jupiter 6.1.3 + launcher 6.1.3) now works too. (#64)
19+
- **Clearer error when `execution.baseUrl` is unset** — `open()` and `open(String)` now throw `execution.baseUrl is not set — add it to selenium-boot.yml, or navigate with getDriver().get(url)` instead of `baseURL is null or empty`. Message only; still an `IllegalStateException`. The getting-started guide now says Step 3 needs the Step 2 file, since zero-config has no default `baseUrl`. (#77)
20+
21+
---
22+
1423
## [3.4.0] — 2026-09-19
1524

1625
### Added

‎docs-site/docs/getting-started.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ No WebDriver binaries required — Selenium Manager handles browser driver downl
3535
<dependency>
3636
<groupId>io.github.seleniumboot</groupId>
3737
<artifactId>selenium-boot</artifactId>
38-
<version>3.4.0</version>
38+
<version>3.5.0</version>
3939
</dependency>
4040
```
4141

@@ -44,7 +44,7 @@ No WebDriver binaries required — Selenium Manager handles browser driver downl
4444

4545
```groovy title="build.gradle"
4646
dependencies {
47-
testImplementation 'io.github.seleniumboot:selenium-boot:3.4.0'
47+
testImplementation 'io.github.seleniumboot:selenium-boot:3.5.0'
4848
}
4949
5050
test {
@@ -58,7 +58,7 @@ test {
5858

5959
```kotlin title="build.gradle.kts"
6060
dependencies {
61-
testImplementation("io.github.seleniumboot:selenium-boot:3.4.0")
61+
testImplementation("io.github.seleniumboot:selenium-boot:3.5.0")
6262
}
6363

6464
tasks.test {

‎docs-site/docs/junit5.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Selenium Boot supports both **TestNG** (built-in) and **JUnit 5** (opt-in). The
1717
<dependency>
1818
<groupId>io.github.seleniumboot</groupId>
1919
<artifactId>selenium-boot</artifactId>
20-
<version>3.4.0</version>
20+
<version>3.5.0</version>
2121
</dependency>
2222

2323
<dependency>

‎docs-site/docs/migration/from-selenium-testng.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Remove your Selenium, WebDriverManager, and reporting dependencies and add one:
2626
<dependency>
2727
<groupId>io.github.seleniumboot</groupId>
2828
<artifactId>selenium-boot</artifactId>
29-
<version>3.4.0</version>
29+
<version>3.5.0</version>
3030
</dependency>
3131
```
3232

‎docs-site/src/pages/index.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ export default function Home() {
241241
code={`<dependency>
242242
<groupId>io.github.seleniumboot</groupId>
243243
<artifactId>selenium-boot</artifactId>
244-
<version>3.4.0</version>
244+
<version>3.5.0</version>
245245
</dependency>`}
246246
/>
247247
</div>

‎pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>io.github.seleniumboot</groupId>
88
<artifactId>selenium-boot</artifactId>
9-
<version>3.4.0</version>
9+
<version>3.5.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>Selenium Boot</name>

0 commit comments

Comments
 (0)