Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/).

---

### Unreleased
### v3.9.0 — 2026-10-21

- **`Locator` keyboard and pointer actions: `press(Keys...)`, `focus()`, `doubleClick()`, `rightClick()`** — send keys without clearing the value, focus without clicking, or perform native double/context clicks directly on a locator. Each action re-resolves on every poll and retries stale or not-yet-present elements until `timeouts.explicit` elapses. (#134, #188)

- **HTML report: flaky-test trend line** — the dashboard gains a third "Flaky Test Trend" line chart (flaky tests per run) next to the pass-rate and duration charts. (#185)

- **Fix: Cucumber quarantine check no longer silently skipped** — `checkCucumberQuarantine` threw when the framework context was not yet initialised and the error was swallowed, so quarantined scenarios ran instead of being skipped. It now guards on initialisation. (#186)

- **Fix: Gemini default model** — `ai.provider: gemini` now defaults to the `gemini-flash-latest` alias; the previously pinned `gemini-2.5-flash` returned 404 for new API keys. (#171)

- **Dependency updates** — selenium-java 4.51.0, cucumber-testng 8.0.4, cucumber-junit-platform-engine, jackson-databind, mockito-core 5.24.0, jakarta.mail 2.0.2.

- **HTML report: tab and failure fixes** — the report always opens on the Dashboard (it no longer restores the last-open tab), failure details start collapsed, and the Failures tab no longer goes empty after you expand or collapse a class in Test Cases (both tabs shared one group id).

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Three files. Copy them as-is and `mvn test` goes green against a real Chrome.
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>
</dependencies>

Expand Down Expand Up @@ -286,7 +286,7 @@ Grab the jar from the [latest release](https://github.com/seleniumboot/selenium-

## Project Status

**Current release: v3.8.0** — `Locator.first()` / `Locator.last()` and a results-first HTML report (suite wall-clock time in `hh:mm:ss`).
**Current release: v3.9.0** — failure intelligence (triage and suggested actions, AI provider choice, run summary), trend charts, Cucumber on the JUnit Platform, and more `Locator` actions.

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

Expand Down
17 changes: 11 additions & 6 deletions docs-site/docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,18 @@ sidebar_position: 99

All notable changes to Selenium Boot are documented here.

## [Unreleased]
## [3.9.0] — 2026-10-21

- **`Locator` keyboard and pointer actions: `press(Keys...)`, `focus()`, `doubleClick()`, `rightClick()`** — send keys without clearing the value, focus without clicking, or perform native double/context clicks directly on a locator. Each action re-resolves on every poll and retries stale or not-yet-present elements until `timeouts.explicit` elapses. (#134, #188)

- **HTML report: flaky-test trend line** — the dashboard gains a third "Flaky Test Trend" line chart (flaky tests per run) next to the pass-rate and duration charts. (#185)

- **Fix: Cucumber quarantine check no longer silently skipped** — `checkCucumberQuarantine` threw when the framework context was not yet initialised and the error was swallowed, so quarantined scenarios ran instead of being skipped. It now guards on initialisation. (#186)

- **Fix: Gemini default model** — `ai.provider: gemini` now defaults to the `gemini-flash-latest` alias; the previously pinned `gemini-2.5-flash` returned 404 for new API keys. (#171)

- **Dependency updates** — selenium-java 4.51.0, cucumber-testng 8.0.4, cucumber-junit-platform-engine, jackson-databind, mockito-core 5.24.0, jakarta.mail 2.0.2.

- **`Locator` keyboard and pointer actions: `press(Keys...)`, `focus()`, `doubleClick()`, `rightClick()`** — send keys without clearing the value, focus without clicking, or perform native double/context clicks directly on a locator. Each action re-resolves on every poll and retries stale or not-yet-present elements until `timeouts.explicit` elapses. (#134)

- **Failure Intelligence: high-level triage and suggested actions** — each failure is classified as `Product bug`, `Test bug`, `Environment`, `Flaky` or `Unknown` (flaky keeps its cause, e.g. `Flaky (Locator not found)`), with a rule-based suggested action. Shown in the HTML report, as `failureType` / `suggestedAction` in the metrics JSON, and in the JUnit XML; opt-in AI analysis uses it as a baseline. No API key needed. (#138)

Expand Down Expand Up @@ -43,10 +52,6 @@ All notable changes to Selenium Boot are documented here.

- **`Locator` form actions: `clear()`, `check()`, `uncheck()`, `isChecked()`, `selectOption(text)`, `selectOptionByValue(value)`, `inputValue()`** — form controls can now be manipulated and inspected directly on `Locator` without falling back to `BasePage` helpers or raw `WebElement`s. `check()` and `uncheck()` are idempotent (no click if already in the target state), `isChecked()` queries checked state without waiting, and terminal actions (`clear`, `check`, `uncheck`, `selectOption`, `selectOptionByValue`, `inputValue`) auto-wait, re-resolving from scratch on every poll to survive stale or late-appearing elements. (#133)

---

## [Unreleased]

- **Failure classification** — every failed test is tagged with a category (`LOCATOR_NOT_FOUND`, `ELEMENT_NOT_INTERACTABLE`, `STALE_ELEMENT`, `TIMEOUT`, `ASSERTION_MISMATCH`, `NAVIGATION_ERROR`, `BROWSER_CRASH`, or `UNKNOWN`) and the evidence for it, from the exception class chain and message alone. No AI, no API key, no network. Shown as a badge in the HTML report's failure panel, as `failureCategory` / `failureEvidence` in the metrics JSON, and as the `type` of `<failure>` in the JUnit XML. The raw error and stack trace are unchanged. (#139)

---
Expand Down
4 changes: 2 additions & 2 deletions docs-site/docs/cucumber.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Add Cucumber to your project alongside Selenium Boot.
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -52,7 +52,7 @@ Add Cucumber to your project alongside Selenium Boot.
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>

<dependency>
Expand Down
2 changes: 1 addition & 1 deletion docs-site/docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ config, a page object and passing tests, ready for `mvn test`.
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion docs-site/docs/junit5.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Selenium Boot supports both **TestNG** (built-in) and **JUnit 5** (opt-in). The
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>

<dependency>
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/pages/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ export default function Home() {
code={`<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
</dependency>`}
/>
</div>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.8.0</version>
<version>3.9.0</version>
<packaging>jar</packaging>

<name>Selenium Boot</name>
Expand Down
Loading