diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dcc591..0eb3e95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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). diff --git a/README.md b/README.md index 9675b1c..82bb65f 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Three files. Copy them as-is and `mvn test` goes green against a real Chrome. io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 @@ -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)**. diff --git a/docs-site/docs/changelog.md b/docs-site/docs/changelog.md index ce5e7ab..ccd5f6a 100644 --- a/docs-site/docs/changelog.md +++ b/docs-site/docs/changelog.md @@ -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) @@ -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 `` in the JUnit XML. The raw error and stack trace are unchanged. (#139) --- diff --git a/docs-site/docs/cucumber.md b/docs-site/docs/cucumber.md index 555ecae..0829359 100644 --- a/docs-site/docs/cucumber.md +++ b/docs-site/docs/cucumber.md @@ -21,7 +21,7 @@ Add Cucumber to your project alongside Selenium Boot. io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 @@ -52,7 +52,7 @@ Add Cucumber to your project alongside Selenium Boot. io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 diff --git a/docs-site/docs/getting-started.md b/docs-site/docs/getting-started.md index f6fc2e2..0921592 100644 --- a/docs-site/docs/getting-started.md +++ b/docs-site/docs/getting-started.md @@ -41,7 +41,7 @@ config, a page object and passing tests, ready for `mvn test`. io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 ``` diff --git a/docs-site/docs/junit5.md b/docs-site/docs/junit5.md index 38026d8..6bd4e4a 100644 --- a/docs-site/docs/junit5.md +++ b/docs-site/docs/junit5.md @@ -17,7 +17,7 @@ Selenium Boot supports both **TestNG** (built-in) and **JUnit 5** (opt-in). The io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 diff --git a/docs-site/src/pages/index.js b/docs-site/src/pages/index.js index c15e394..6fc283a 100644 --- a/docs-site/src/pages/index.js +++ b/docs-site/src/pages/index.js @@ -241,7 +241,7 @@ export default function Home() { code={` io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 `} /> diff --git a/pom.xml b/pom.xml index 64a22a4..08ff2fd 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.seleniumboot selenium-boot - 3.8.0 + 3.9.0 jar Selenium Boot