This is the multi-page printable view of this section. Click here to print.
Blog Posts - 2025
- Selenium 4.35 Released!
- Selenium Community Live - Episode 8
- Selenium Community Live - Episode 7
- Selenium 4.34 Released!
- Selenium 4.33 Released!
- Selenium Community Live - Episode 6
- Selenium 4.32 Released!
- Selenium Community Live - Episode 5
- Selenium Conference and Appium Conference 2025, Valencia Spain
- LambdaTest Becomes a Selenium Development Partner
- Selenium 4.31 Released!
- Selenium 4.30 Released!
- Selenium Community Live - Episode 4
- Selenium 4.29 Released!
- Removing ChromeDevTools Support For Firefox
- Selenium Community Live - Episode 2
- Selenium 4.28 Released!
Selenium 4.35 Released!
We’re excited to announce the release of Selenium 4.35 for Javascript, Ruby, Python, .NET, Java and the Grid! 🎉
Links to all assets can be found on our downloads page.
🔦 Highlights
- Chrome DevTools support is now: v139, v138, and v137.
- BiDi Improvements Across Bindings: Expanded BiDi support including emulation, input, script execution, and user context enhancements.
- Java Cleanup and JSpecify Annotations: Deprecated APIs removed and comprehensive
@Nullable
annotations added for better type safety. - Grid Performance Enhancements: Improved logging, reduced redundancy, race condition fixes, and migration from Guava to Caffeine.
- Better Proxy and Network Handling: Support for
SameSite=default
, IPv6 improvements, and fixes for proxy authentication and WebView2. - Logging Improvements: Driver logs in .NET are more structured and can output to console or file with timestamps.
🧪 Language-specific Updates
Java
- 🔧 Added support for:
- BiDi emulation module
SameSite=default
for cookies- Shadow DOM element normalization
- 🧹 Major cleanup of deprecated classes:
LocationContext
,WebStorage
,FirefoxBinary
,SessionStorage
,AppCacheStatus
, and more
- ✅ Enhanced test coverage:
--connect-existing
WebSocket check - 📝 Added JSpecify
@Nullable
annotations across all driver services and locator classes - 🧼 Memory/resource improvements:
- Released
HttpClient
resources - Removed unused internal classes
- Released
Python
- 🧠 BiDi enhancements:
- Implemented input and emulation modules
- Added
pin
,unpin
, andexecute
for scripts - Supported
accept_insecure_certs
,proxy
, andunhandled_prompt_behavior
in user context
- 🔧 Improved handling for:
- Proxy authentication with special characters
- WebView2 + CDP/BiDi compatibility
- Vendor prefix fix for Edge
- 📦 Loosened dependency for
urllib3
, and included IPv6 support forfree_port()
- 📚 API documentation improvements, including nightly builds and license notices
.NET
- 💡 Logging Enhancements:
- Timestamps for Chromium-based browser logs
- GeckoDriver log file support
- Default log level now
WARN
- Console output support for all drivers
- 🧠 BiDi enhancements:
- Exposed internal methods and new result types
- User context supports
UnhandledPromptBehavior
,proxy
,accept_insecure_certs
- Tree and Emulation modules added
- 🧹 Cleanup:
- Removed long-deprecated members
- Reduced internal tracing noise
- 🔄 Native packaging for Selenium Manager
- 🌐 IPv6 support for port allocation
JavaScript
- 🧪 BiDi:
- Stability fix for flaky cookie network test
- Skip FedCM tests until Chrome 140
- ⚠️ Added
SameSite=default
cookie support - 🔄 Dependency updates (
typescript
,@emotion/styled
)
Ruby
- 🔒 Guarded support for Firefox Beta
- 🚫 Removed deprecated local/session storage APIs
- 🆗 Allowed use of
rubyzip
v3 - ✂️ Excluded Rakefile from line-length linter
- ⚠️ Added support for
SameSite=default
Rust (Selenium Manager)
- 🧪 Updated base URL for Edge WebDriver
- ⬆️ Dependency upgrades (
zip
,rstest
,which
, Bazel lock files) - 🔧 Improved architecture normalization for Plausible analytics
Grid
- 🔁 Performance and logging improvements:
- Reduced duplicate logs
- Improved node health checks
- Better session map handling and retry queue management
- 🧰 Switched from Guava’s CacheBuilder to Caffeine
- 🧪 New UI sorting option by URI
🐳 Docker Selenium
- K8s: Add config for over-provision ratio in autoscaling deployment of Nodes (#2930)
- Docker: Distributor uses Greedy as the slot selector strategy default in Hub-Node and Standalone mode (#2915)
- Docker: Update Google Noto font family to support better language character displays (#2914)
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Andrei Solntsev
Alex Popov
James Hilliard
Ben Beasley
Navin Chandra
Noritaka Kobayashi
Pallavi
Sandeep Suryaprasad
Selenium Docs & Website
ian zhang
Pallavi
Docker Selenium
AvivGuiser
Amar Deep Singh
Anwar
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium Community Live - Episode 8
Episode 8 of Selenium Community Live with Dorothy Graham took place on July 30th, 2025. During this remarkable session, Graham a legend with 50+ years in software testing, shared incredible insights from her journey through the evolution of test automation. Her perspective reveals timeless truths that modern teams often overlook.
Meet the Speakers:
Let’s dive into session notes.
From Mainframes to Smartphones: The Incredible Journey
Graham’s automation story began in 1970 at Bell Labs, working on a UNIVAC 1108 mainframe that cost $1.6 million (equivalent to $15 million today). The specifications, 1.3 megahertz, half a megabyte of RAM, and 100 megabytes of storage. Her iPhone today has 12,000 times more storage and costs 20,000 times less. Back then, you would write code on paper, punch it onto cards, and get maybe one turnaround per day. A single typo meant starting over tomorrow. This dramatic shift in just 50 years raises the question: what will the next 50 years bring?
The Evolution of Testing Tools: From Commercial to Open Source
Graham witnessed the dramatic transformation of testing tools over decades. The first commercial tool, AutoTester, appeared in 1985, followed by an explosion of tools in the 80s and 90s. The CAST (Computer Aided Software Testing) report eventually documented 103 different tools, yet when she recently checked, only three were still alive. What happened to all those tools? They disappeared, reminding us that tools come and go, but principles endure. Enter Selenium in 2004, a game-changer as an open-source tool that broke the expensive commercial tool monopoly. Graham congratulated the community: “Selenium has been around for over 20 years. That’s really good.” Its longevity stems from community support, continuous evolution, and freedom from licensing costs. However, Graham warns: “The fact that you don’t have to pay purchase or licensing costs doesn’t mean it doesn’t need investment.” Free tools still require proper architecture, training, and skilled implementation. She stresses, this as a reminder to people in management making decisions.
What Test Automation Shouldn’t Look Like
Graham’s most compelling insight involves what not to do in automation. She shares Steven Norman’s brilliant analogy: Imagine recording your drive to work, then pressing play the next day. You would reverse into traffic that wasn’t there yesterday, stop at green lights because they were red yesterday, and run red lights because they turned green yesterday. She mentions, Testing isn’t passive observation, it’s active investigation. Graham also emphasizes: “Testing is something you do. It’s not passive. It’s active.” This is why capture-replay approaches fundamentally misunderstand what good testing requires.
EuroSTAR Survey Insights: The Reality of Test Automation in 2023
In preparation for her keynote at the EuroSTAR conference in Vienna, Graham conducted a comprehensive survey of 200 automation practitioners that revealed surprising insights:
Encouraging findings:
• 80% use open-source tools.
• 90% test at system level, 72% at API level
• 70% had formal testing training
Concerning discoveries:
• 25% had zero training in their daily tools
• 38% would need to rewrite 95%+ of tests when changing tools
• Most automated tests mirror manual test structure (which is wrong)
• Top problem isn’t technical, it’s unrealistic management expectations
if you are interested to learn more about the survey, visit link
The Forgotten Secrets of Good Automation
Drawing from her decades as a practitioner, coach, and consultant, Graham shares what she believes are the most overlooked principles in modern test automation.
- Effectiveness Before Efficiency Graham’s first hard-learned lesson: the biggest mistake is automating poor-quality tests just to make them faster.
• Wrong approach: Poor manual tests → automation → fast, poor automated tests
• Right approach: Improve test effectiveness first → then automate selectively
She emphasizes: “You will get much better results if you think first about how can we improve our testing. You are better off having better testing than automating testing.”
- Proper Architecture Matters Through years of consulting, Graham identified that good automation requires two critical abstraction levels: Technical level: Modular, reusable scripts where one manual test becomes multiple automated scripts, and one script serves hundreds of tests. As she notes: “If you have a thousand manual tests, they might be implemented by only 50 scripts together with data files.” Business level: Domain-specific keywords like “create_new_policy” instead of raw code, enabling skilled testers to write tests without programming. This makes automation accessible to “people who are non-technical who often are the best testers.”
A Special Thank You to Our Community
This incredible session featured engaging questions from community members whose thoughtful inquiries sparked valuable discussions about management expectations, career paths, AI’s impact, and the future of testing skills. Their participation exemplified the collaborative spirit that makes the Selenium community so vibrant.
We extend our heartfelt gratitude to Dorothy Graham for sharing her wealth of knowledge and to all community members who joined Episode 8.
This session marks the end of Season 1 of Selenium Community Live, a season that began by celebrating two decades of Selenium and concluded with timeless wisdom from one of testing’s most respected pioneers.
As we prepare for Season 2, we invite you to stay connected with the Selenium community.
Watch the Recording
Couldn’t join us live? Watch the entire episode here - 📹 Recording Link: Watch the Event Recording on YouTube
Stay tuned as we bring the next!
Selenium Community Live - Episode 7
The Selenium Community Live seventh episode happened on June 19th, 2025 with Christian Bromann, creator of WebDriver.IO. He shared his vision on how AI agents and agentic workflows are reshaping the testing industry. As a project council member at the OpenJS Foundation, Christian brought valuable insights into the current state and future potential of AI in automation testing.
You can watch the episode on YouTube here- Episode 7 on YouTube
Meet the Speakers:
Understanding AI Agents and Agentic Workflows
The past two years have been transformative for AI, starting with ChatGPT’s experimental launch and evolving into sophisticated agentic systems. But what exactly makes something “agentic”?
According to Christian, agentic systems typically contain both non-deterministic and deterministic tasks:
- Non-deterministic paths: Interactions with Large Language Models (LLMs) that produce varied outputs
- Deterministic tasks: Code execution that behaves predictably
This distinction is crucial when applying AI to real-world applications.
Two Types of AI Workflows in Testing
1. LLM-Augmented Workflows
- Use LLMs to analyze datasets with human oversight
- More deterministic and predictable outputs
- Limited autonomy but higher reliability for narrow tasks
- Example: Text processing and data analysis
2. Complete Agent Workflows
- Agents with reasoning capabilities operating autonomously
- Less deterministic but capable of handling complex tasks
- Can work in unpredictable environments
- Example: V0.dev for coding React applications
Current Industry Landscape
Christian explored several innovative companies leveraging AI for QA automation:
QA Wolf: Combines both workflow types, allowing users to record playback sessions while providing fine-grained control through natural language commands during the recording process.
Momentic.ai: A Y Combinator company building agents that generate entire automation workflows from single prompts, making test authoring remarkably simple.
Browser Use: An open-source browser automation tool that evolved into its own company, enabling API-driven cloud browser automation.
Directus AI: Recently announced as a ChatGPT-like interface with browser capabilities for data extraction and test generation.
Alumnium: Alex’s project integrating AI directly into Selenium, allowing commands like “do” or “check” within existing automation tests.
The Reality Check: Are We There Yet?
Despite the exciting developments, Christian offers a measured perspective: “We are not quite there yet.”
Many AI testing platforms currently produce subpar results, including tests without assertions or unreliable automation scripts. Rather than replacing testers, AI is positioned to enhance existing workflows and capabilities.
Impact on the Testing Pyramid
Christian predicts AI will reshape the traditional testing pyramid:
- Unit Testing: May decrease in importance as developers write more AI-generated code
- Integration and End-to-End Testing: Will become more crucial for validating AI-generated code functionality
- New Testing Categories: AI-driven exploratory testing and intelligent monkey testing will emerge
As Christian notes: “There’s no value in writing unit tests for code generated by AI, and no value in AI generating unit tests for AI-generated code.”
Practical Implementation: A Real-World Example
Christian demonstrated a practical WebDriver.IO implementation that showcases AI-enhanced testing. Instead of writing multiple assertions, testers can use a single AI-powered command to validate application state:
// Traditional approach with multiple assertions vs.
// AI-enhanced single validation
await browser.aiValidate("validate that I have three todo items shown on the page that are all grocery items");
This approach works by:
- Capturing the application’s accessibility tree and element properties
- Passing this state to an LLM with a validation prompt
- Receiving a true/false result with explanatory hints
The key insight: Whatever you provide as state to the LLM determines what the AI can reason about.
Building Your Own Browser Agent
For those interested in creating custom browser agents, Christian outlined a architecture involving:
- Tool-calling agents with access to browser actions (find, click, getText)
- State observers monitoring browser changes
- Agent history maintaining context of previous actions
- Verification commands for state validation
However, he cautions about the trade-off between convenience and accuracy: “The most annoying thing in the world is having flaky tests, so it’s hard to justify using AI when it compromises accuracy.”
Performance Considerations
One significant challenge with current AI automation tools is speed. Christian’s testing revealed:
- AI-driven workflows taking 13-14 seconds for simple login processes
- Traditional frameworks completing the same tasks in 1-2 seconds
This performance gap makes real-time AI automation impractical for most testing scenarios, though pre-generated test scripts remain viable.
The Exciting Future: Model Context Protocol (MCP)
Christian’s most compelling vision involves the Model Context Protocol and web components. Instead of LLMs parsing entire DOM structures, imagine if web components could expose their functionality directly to AI agents:
- A login component exposing a
login()
method - Shopping cart components revealing
addItem()
andcheckout()
capabilities - Navigation components offering routing functions
This semantic approach would make browser automation more reliable by providing AI with meaningful, component-level context rather than raw HTML structures.
Key Recommendations for the Testing Community
For Automation Engineers:
- Focus on AI-enhanced tooling (like Cursor) rather than full AI automation services
- Use AI to generate framework code, then refine manually
- Avoid over-reliance on current AI automation platforms
For Exploratory Testers:
- Leverage AI tools that can generate reusable test scripts from manual exploration
- Develop strong prompt engineering skills (BDD experience is valuable here)
- Stay informed about evolving AI capabilities
Universal Advice:
- Don’t fear AI—embrace it as an enhancement tool
- Experiment with AI integration in current workflows
- Maintain healthy skepticism about AI automation promises
- Continue developing traditional testing skills alongside AI capabilities
Community and Open Source
Christian emphasized the WebDriver.IO community’s commitment to supporting contributors financially, noting that the recent VS Code extension was developed by a community member who was compensated for their work. This model demonstrates how open-source projects can sustainably grow while supporting their contributors.
Conclusion
The integration of AI into testing workflows represents an evolution, not a revolution. While current AI automation tools show promise, they’re not yet ready to replace human testers or traditional automation approaches. Instead, the real value lies in AI’s ability to enhance productivity, generate test code more efficiently, and handle exploratory testing scenarios.
As Christian concluded: “Stay close to all developments in the space, try things out, find out how AI can help you be more efficient, and don’t be afraid of it.”
The future of testing will likely involve a thoughtful blend of AI enhancement and human expertise, with new paradigms like the Model Context Protocol potentially revolutionizing how we approach browser automation.
Watch the Recording
Couldn’t join us live? Watch the entire episode here - 📹 Recording Link: Watch the Event Recording on YouTube
Stay tuned as we bring the next! Subscribe here to the Selenium HQ Official YouTube Channel.
Selenium 4.34 Released!
We’re excited to announce the release of Selenium 4.34 for Javascript, Ruby, Python, .NET, Java and the Grid! 🎉
Links to all assets can be found on our downloads page.
🔦 Highlights
- macOS Improvements: Added macOS-specific key support for both Ruby and Python.
- Web Extension Support: BiDi implementations now support Chromium web extensions (Java, Python).
- Deprecations: FTP proxy support deprecated across Java, Python, Ruby, and .NET.
- Selenium Manager: Now supports Electron (Rust backend). Still needs implementation in the bindings.
- BiDi Enhancements: Continued progress with
historyUpdated
,permissions
, andstorage
modules (Java, .NET, Python). - Quality Improvements: Significant type annotation cleanup, test stability enhancements, and doc generation in Python.
Java
- ✅ Implemented BiDi commands:
browsingContext.historyUpdated
webExtensions
and extendedBrowsingContextInfo
- 🛠 Refactored
CommandPayload
, removed deprecated classes:ContextAware
CommandLine
OsProcess
- ⚠️ Deprecated
FtpProxy
- ➕ Environment variable support for driver paths with Selenium Manager
- 🔐 Improvements in
VirtualAuthenticator
Python
- 🔑 Added macOS-specific keys to
Keys
enum (OPTION
,FN
) - 🧠 Extensive BiDi updates:
- WebExtensions
- Permissions
- Storage
- History updates (with timestamps)
- 🧼 Code quality:
- mypy/type hint cleanups
- API docs improvements (auto-generated)
- tox/ruff upgrades
- 💡
enable_webextensions()
now documented with CDP note - ❌ Deprecated: FTP proxy support
- 🌐 Better error reporting on HTTP failures, improved error handling in
expected_conditions
.NET
- 🚫 Deprecated FTP proxy support
- 📚 BiDi enhancements:
OnHistoryUpdated
event- AcceptInsecureCerts & Proxy in user context
- Implicit screenshot-to-bytes conversion
- Protected DTOs from inheritance
- 🧹 Cleanup:
- Namespace simplifications
- Removed StyleCop config
JavaScript
- 📢 Warning added when FTP proxy is used
- 💡 Declared minimum required Node.js version:
>= 20.0.0
Grid
- 🧪 Grid UI updated to Node 20 for type compatibility
- 🧰 New built-in slot selector:
GreedySlotSelector
- 🧹 UI cleanup: session deletion, log level validation
Ruby
- 🧑💻 Added macOS key mappings (Option/Fn)
- ⚠️ Deprecated FTP proxy support
- 🛠 Fixed child process termination handling
Rust (Selenium Manager)
- 🖥️ Added Electron browser support
- 🔧 Fixed Edge version test logic
- Electron support.
Docker Selenium
- K8s: Distributor uses Greedy as slot selector strategy in autoscaling (#2875)
- K8s: Fix video uploader secrets pass to Node single container (#2886)
- Docker: Update dependencies version for CVEs fix
- Docker: Enable
SE_NODE_ENABLE_MANAGED_DOWNLOADS
in Node config by default (#2869) - Docker: Session created in Node container can be deleted on UI by default (#2871)
- Docker: Environment variable flag to upgrade latest version of Chrome and ChromeDriver in container (#2872)
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Alex "Blex" B
Bradley Latreille
Swastik Baranwal
Luis Serna
Shaurya Bisht
Adolfo Armas
Andrei Solntsev
Alex Popov
Manuel Blanco
Pallavi
Sandeep Suryaprasad
Selenium Docs & Website
Saana
ian zhang
Navin Chandra
Noritaka Kobayashi
Pallavi
Docker Selenium
AvivGuiser
Corey Goldberg
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium 4.33 Released!
We’re excited to announce the release of Selenium 4.33 for Javascript, Ruby, Python, .NET, Java and the Grid! 🎉
This release contains improvements, cleanups, and new features across all language bindings and the Grid. This release continues our effort to modernize the codebase, improve developer experience, and refine the project’s tooling and documentation.
Links to all assets can be found on our downloads page.
🚀 Highlights
- 9f3c923670 - Grid UI now includes live previews for each Node.
- 43e6bb970e - Python BiDi support expands with the new webExtension module.
- ef05c15798 - Java: Reverted deprecation notice for
getAttribute
after community feedback. - 638621f4bc - Java: Clean-up of deprecated timeout configuration methods.
🔍 Changes by Component
Grid
- 9f3c923670 - UI Overview is able to see live preview per Node
- 7401a3db93 - UI Sessions capability fields to display as additional columns
Python
- 92db47fa2a - Add missing modules to python API docs
- 4fc2582bf9 - Better error for downloads on local webdrivers
- 43e6bb970e - Add bidi webExtension module (#15749)
Rust
- 7497552255 - Replace WMIC commands (deprecated) by WinAPI in Windows
Java
- ef05c15798 - Reverting deprecation notice for
getAttribute
. - 638621f4bc - Removing deprecated
setScriptTimeout
andpageLoadTimeout
. - fcf4c9d09e - Removing deprecated SlowLoadableComponent constructor.
- 1e65b7b49f - Removing deprecated NATIVE_EVENTS field.
- f3f0cadedb - Deprecating methods that use FirefoxBinary as well.
Ruby
- 212fc8be35 - Upgrade to Ruby 3.2.
- 1e2945de78 - Let firefox choose the bidi port by default.
.NET
- 212fc8be35 - Upgrade to Ruby 3.2.
- 1e2945de78 - Let firefox choose the bidi port by default.
JavaScript
- 3ef1c25fe8 - Chrome capabilities test passes now in RBE.
Docker Selenium
- K8s: Fix Helm chart template for deployment of video recording manager (#2828, #2831).
- K8s: Node enable readiness probe checks status registered to Hub (#2833).
- K8s: Video recorder run as sidecar container is disabled by default (#2843).
- K8s: Fix chart template issue that might occur when using Helm version v3.18.0 (365c106).
- K8s: Update chart dependencies (KEDA core 2.17,1, and so on).
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Swastik Baranwal
Marcel Wilson
Navin Chandra
Benjamin
Tom Hughes
Selenium Docs & Website
Peter Song
ian zhang
Pallavi
Docker Selenium
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium Community Live - Episode 6
The sixth episode of Selenium Community Live happened on May 21st, 2025, with Luke Hill who is a Lead QA Engineer at Dexters with extensive automation expertise across FinTech, E-Commerce, and Education sectors. A passionate open-source contributor, Luke owns site_prism (a Page Object Gem extending Capybara), serves on the Cucumber technical committee, and is a maintainer of Selenium. Known for his meticulous testing approach and ability to identify challenging edge cases, Luke consistently helps teams deliver more reliable code. His technical expertise in both frontend and backend testing makes him a valuable voice in the QA community.
You can watch the episode on YouTube here- Episode 6 on YouTube
Meet the Speakers:
The Maintainer’s Perspective: Insights from Selenium Community Live Episode 6
The Language Debate: Development vs Testing Stacks
One of the most compelling points Luke raised challenges a common assumption in the testing community. The conventional wisdom that testing and development stacks must share the same programming language doesn’t hold as much weight in today’s containerized world.
“With tools like Docker and Kubernetes, and CI/CD systems like Jenkins and GitHub Actions being standard in most companies, having the testing stack in the same language as development provides minimal benefits,” Luke explained. “The real question should be: what language makes you most productive and comfortable as a tester?”
This perspective is particularly relevant for teams considering Ruby for test automation. Ruby’s expressiveness and ease of learning make it an excellent choice for testing, regardless of the application’s underlying technology stack.
The Ruby Testing Ecosystem
Luke walked us through the evolution of Ruby’s testing ecosystem, highlighting how tools like Selenium, Capybara, Cucumber, and SitePrism work together synergistically:
- Selenium provides the browser automation foundation
- Capybara adds a testing-focused abstraction layer
- Cucumber enables behavior-driven development
- SitePrism implements the page object model pattern
This stack’s success stems from these tools being designed to work together, creating a developer-friendly testing environment that’s both powerful and maintainable.
The Maintainer’s Challenge
Luke provided candid insights into the challenges of maintaining open-source projects:
Community Expectations: Balancing feature requests, bug fixes, and community support while maintaining the project’s vision and stability.
Backwards Compatibility: Making strategic decisions about when to introduce breaking changes, especially for widely-adopted libraries used across various industries and company sizes.
Volunteer Nature: Most open-source work is voluntary, requiring careful balance between personal career growth and community contributions.
Multiple Project Coordination: Many tools have symbiotic relationships, requiring coordination across different projects and maintainer teams.
Technical Deep Dive: SitePrism Architecture
Luke provided a fascinating look under the hood of SitePrism, demonstrating how the framework uses Ruby’s metaprogramming capabilities to create a domain-specific language (DSL) for page objects.
Key architectural features include:
- Declarative syntax for defining page elements
- Automatic method generation for element interactions
- Section support for reusable page components
- Scope management for nested elements
- Helper method creation for common testing patterns
This architecture allows developers to write clean, maintainable page objects with minimal boilerplate code, while the framework handles the complex WebDriver interactions behind the scenes.
Looking to the Future
Luke shared his perspective on emerging trends in test automation:
Componentization
The rise of tools like Figma and Storybook is changing how applications are built, creating new testing challenges and opportunities around component libraries.
Accessibility Testing
While still evolving, accessibility testing represents a growing area of focus. Luke advocates for a manual-first approach to learning accessibility concepts before attempting automation.
Bidirectional Communication
Selenium’s bidirectional capabilities promise to enable more sophisticated browser automation, including network interception, request mocking, and dynamic content manipulation.
AI Integration
Rather than replacing testers, AI will likely handle the laborious aspects of test creation while humans continue to manage architecture, review, and strategic decisions.
Contributing to Open Source
For developers interested in contributing to projects like Selenium, Luke outlined a clear path:
- Learn Git fundamentals - Understanding version control is essential
- Choose a focus area - Start with one language implementation rather than trying to contribute across all projects
- Understand the contribution process - Each project has specific workflows for accepting contributions
- Start small - Documentation improvements and bug fixes are great entry points
The Value of Community
Throughout the session, Luke emphasized the symbiotic relationship between personal career growth and open-source contributions. Contributing to projects like Selenium, Cucumber, and SitePrism not only improves the tools that benefit the entire community but also develops skills that advance individual careers.
“View open source as a learn and improve task,” Luke advised. “If you improve those libraries, it improves the community, but it will also improve you as an individual.”
Watch the Recording
Couldn’t join us live? Watch the entire episode here - 📹 Recording Link: Watch the Event Recording on YouTube
To know more about Site Prism, please follow the link Site Prism
Stay tuned as we bring the next! Subscribe here to the Selenium HQ Official YouTube Channel.
Selenium 4.32 Released!
We’re excited to announce the release of Selenium 4.32 for Javascript, Ruby, Python, .NET, Java
and the Grid! 🎉
This release continues the focus on strengthening BiDi support across multiple bindings, improving
stability in tests, and refining documentation and developer experience.
Links to all assets can be found on our downloads page.
🚀 Major Highlights
- Enhanced BiDi (Bi-Directional) protocol support for Python, Java, Ruby, and .NET bindings
- Dozens of bug fixes and stability improvements in tests and documentation
- Selenium Grid now better handles capabilities for mobile testing with Relay Nodes
- New utility class in Python to manage a local Grid server
- Additional updates to support AOT compatibility and memory optimizations in .NET
🔹 Language-Specific Changes
Java
- BiDi improvements:
onNavigationCommitted
,getClientWindows
, and Edge support #15560, #15661 - BiDi tests enabled for Edge network module #15654
- Set BiDi as active protocol for Remote Firefox #15224
- Dependency versioning improvements via BOM #15689
Python
- Fixes to test args for
--headless
and--bidi
#15567 - Improvements in test coverage and cleanup #15579, #15580
- FedCM state leak fix #15583
- BiDi Network: intercepts and authentication implemented #14592
- Implemented BiDi
browser
,browsing_context
, andlog
modules #15616, #15631, #15668 - Added
Server
utility class to manage Grid #15666 - Modernized linting setup and doc publishing #15614
JavaScript
Ruby
- Added
PrintOptions
support #15158 - WebSocket port handling for Firefox #15458
- BiDi
setViewport
,activate
, and log support enhanced #15290, #15365
.NET
- Extensive BiDi refactoring for better spec alignment and AOT compatibility #15575, #15591
- Introduced strong typing for LocalValue conversions #15532
- Refined network interception and error handling #15603, #15521
- Websocket memory and platform detection improvements #15640, #15649
Grid
- Fixed Safari-specific capability prefix handling #15574
- Improved handling of
browserName
for Relay Nodes in mobile #15537
Docker Selenium
- Docker: Init python venv with non-root user (#2769)
- Docker: Remove Hub GraphQL dependency from video recorder (#2813)
- Docker: Fluxbox not rendering Chinese characters via VNC view (#2817)
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Swastik Baranwal
Federico Franco
Navin Chandra
Vinaysimha Varma Yadavali
Selenium Docs & Website
Handy
Alex Bledea
ian zhang
Manoj Kumar
Pallavi
Docker Selenium
Trig
Romain THERRAT
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium Community Live - Episode 5
The fifth episode of Selenium Community Live happened on April 25th 2025.
The event featured speakers Ashley Hunsberger , Director at NBCUniversal with close to 25 years of industry experience and a long-time friend of the Selenium, alongside Puja Jagani, Open Source Engineer & Developer Advocate at BrowserStack and member of the Selenium leadership(TLC and PLC). The event was hosted by Pallavi Sharma, Founder 5 Elements Learning and a long-time Selenium Committer.
The theme of the community event was “Beyond Code: Understanding Developer Satisfaction in Open Source Contributions”.
While many discussions around open source have happened that focus on code contributions and technical aspects, there is a vital human element involved, something that keeps the contributions rolling for decades, i.e. developer satisfaction. This community event was dedicated to discussing the human factor in open source contributions. The speakers shared their insights and experience on developer satisfaction in open source.
What motivates Open Source contributors?
Ashley’s LinkedIn states that “My driving principle is simple: people first” and building on that, Ashley and Puja both highlight that open source is “by the community, for the community,” where collaboration and human connections are foundational motivating factors for them.
Ashley shares her journey with Selenium, highlighting how the warm, caring community has helped her build genuine friendships and good memories.
“In the end, do people really remember what we build? They’re going to remember how we made them feel.” - Ashley Hunsberger
She states that for her, a main motivational factor is community, and what she thinks drives people is the altruistic purpose of giving back to the community beyond their organisation and serving a great purpose. According to her, motivation drives behaviour, and if you have clear motivation, that will drive your place in the community in the long run.
Beyond altruism, Puja thinks there is a diversity of motivators, emphasising that contributions extend far beyond code. Contributions might include:
- Helping with documentation
- Managing continuous integration (CI) pipelines
- Handling legal, and financial aspects, and other administrative aspects
- Organising conferences, community events, and meetups.
These roles are often in the spotlight but critical to the health and growth of open source projects. A huge spectrum of motivators drives people’s behaviour and keeps the open source project breathing and growing.
No single factor that contributes to developer satisfaction
Ashley brings a unique perspective to the idea that developer satisfaction can be understood through the lens of the Job Characteristics Model. This model outlines key aspects of work that lead to positive outcomes such as retention, motivation, and job satisfaction.
Key factors include:
- Skill Variety: Open source contributors engage in a wide range of skills, from coding to release engineering, documentation, and advocacy.
- Task Identity: Contributors often see their work through from start to finish, building and shipping features that users directly benefit from.
- Task Significance: Understanding the impact and value of their contributions motivates developers to continue their work.
- Autonomy: Contributors enjoy flexibility in how, when, and where they contribute, within the project’s guidelines.
- Feedback: Constructive feedback loops help contributors improve and feel connected to the community.
These elements combine to foster long-term satisfaction.
The Evolution of Motivation in Open Source
Puja shared her own journey with Selenium, from initially feeling nervous about contributing to becoming a part of the technical leadership. Initially, simple contributions like fixing a bug brought immense satisfaction. Over time, the motivation evolved to include community appreciation and the visible impact of her work on the end users of Selenium. She recounts a meaningful interaction at a recent conference where an attendee thanked her for contributing to Selenium, highlighting how such moments validate and inspire ongoing commitment.
Handling Conflict in Open Source
Ashley and Puja acknowledged that interactions on platforms like GitHub or chat channels can include harsh or unexpected comments or the project itself can have some differences of opinion. And this could be largely due to the diverse background of people, any open source project experiences. This difference of opinion and thought diversity is what makes the group awesome, but certain situations need to be resolved with care.
Ashley shares her first experience receiving a non-constructive code review and emphasises the importance of kindness and clarity in feedback: “Be kind, but clear. Clear is kind. You don’t have to be nice, but be clear about what happened, why, and how to improve.” - Ashley Hunsberger
Effective conflict resolution involves open questions, understanding the intent, and focusing on shared goals. It’s important to remember that conflicts are natural in any group, but they can be handled constructively with the key focus being on what is important for the situation. It is also essential to make sure an open source project has a code of conduct that is implemented in such situations and that the community is aware they have a safe space to report their issue and that they will be heard.
Inclusivity
Ashley distinguishes between mentorship and sponsorship as two pillars of inclusion:
- Mentorship: Providing advice, guidance, and support to help someone grow and navigate the community.
- Sponsorship: Actively advocating for someone, opening doors, and recommending them for opportunities
Ashley further discussed that inclusivity needs to be beyond code. Such as ensuring inclusive language and removing any barriers of entry for new contributors. The key focus should be on building an inclusive environment and creating a welcoming space for new contributors and the community.
Overcoming Impostor Syndrome
Impostor syndrome is a common challenge for developers, especially when engaging in large, visible open-source projects. Ashley shares candidly about her struggles and offers practical advice when Pallavi asked her to share her insights on how to enable people to overcome impostor syndrome. Ashley shares the following
- Be kind to yourself and reframe negative thoughts. Add “yet” to statements like “I don’t know how to do this… yet.”
- Recognise that many others share the same fears and questions.
- Build a support network of trusted friends, mentors, and peers who understand your journey.
- Use tools like worksheets to identify negative thinking patterns and consciously reframe them.
- Focus on facts about your skills and contributions rather than self-doubt.
These strategies can help contributors maintain confidence in their open-source journey.
Next they discussed how open source projects can help people, and here the importance of visibility and recognition in sustaining open source motivation was emphasised. Seeing the direct impact of one’s work, whether through download statistics, user feedback, or conference stories, reinforces the value of contributions. Whether you are a seasoned contributor or a newcomer, reflecting on the above areas can hopefully help you foster a more satisfying developer experience.
Selenium is now entering its 21st year of existence, has had contributors spanning across various time zones, geographies and areas of expertise. With nearly 800 contributors over two decades, we take this moment to express gratitude to each of them. Through continuous feedback and meaningful interaction with the community, Selenium remains dedicated to work towards a healthier developer satisfaction.
Watch the Recording
Couldn’t join us live? Watch the entire episode!
You can watch the episode on YouTube here- Episode 5 on YouTube or you can watch the episode on LinkedIn here- Episode 5 on LinkedIn.
Stay tuned as we bring the next! Subscribe here to the Selenium HQ Official YouTube Channel.
Selenium Conference and Appium Conference 2025, Valencia Spain
Selenium and Appium projects joined hands together for the 2025 annual conference of both, which was held from March 26th - March 28th in Valencia, Spain. The official web page of the conference can be found here
The event took place at the beautiful venue of Veles e Vents.
On March 26th, there were Workshops, which were enthusiastically attended by participants from across the globe. On the 26th March evening, the conference organised Speaker’s Dinner, which provided a fun space to sit, talk and know other better.
We are thankful to our esteemed speaker group, who joined us from all over the world and helped make the event a success. Details about the speakers for the event is available here - Speakers of the Conference
The main event started from 27th of March and ran through 28th March evening. The event was attended by close to 400 global participants. We are thankful to each of them, for their presence which made the event worthwhile.
Conference also provided scholarship to 4 people who were chosen after a tough selection process to attend the conference. We thank all our Sponsors who collaborated and helped make the event possible.
The video recording, presentations and photographs from the main event can be found here - Videos, Photos and More..
Conference, also ran Pre Conference webinars which helped showcase high rated talks which couldn’t make it to the end program to the audience. The details of the same are available here - Pre Conference Webinars
The conference program chair was Diego Molina. Diego helmed all the activities of the conference with great leadership and meticulous supervision.
The conference was supported by a wide group of professionals who participated in volunteer capacity as reviewers and organizers of the event. More details about them can be found here - Organizers & Program Review Committee .
The entire event was professionally managed by the event organiser company OneStic. They ensured smooth flow of the event. Special mention to Jesus Sanchez for going out of the way to ensure everyone was well taken care of.
Subscribe to Official Selenium Conference YouTube Channel
To explore more about our previous conferences and the next ones don’t forget to subscribe to our official You Tube Channel Selenium Conference Official YouTube Channel.
LambdaTest Becomes a Selenium Development Partner
We are excited to share that LambdaTest has joined as a development partner for Selenium. This partnership highlights our shared commitment to innovation, community engagement, and collaborative progress in the test automation space. LambdaTest’s dedicated Open Source Program Office (OSPO) is contributing valuable expertise and resources that will further enrich the Selenium ecosystem.
A Partnership Rooted in Open Source Values
At the heart of Selenium lies a vibrant community dedicated to open standards and continuous improvement. Our collaboration with LambdaTest is designed to strengthen the community by channeling focused contributions from their OSPO—improving tools, integrations, and documentation for Selenium users around the world.
About LambdaTest
LambdaTest is a platform that empowers businesses to accelerate time to market through intelligent, cloud-based test authoring, orchestration, and execution. With over 15,000 customers and 2.3 million+ users across 130+ countries, LambdaTest is the trusted choice for modern software testing.
Key Points of the Partnership
- Open Source Integrity: Selenium continues to flourish as a community-led project, embodying the true spirit of open source.
- Dedicated OSPO Contributions: The team at LambdaTest is actively enhancing Selenium by improving documentation, bolstering community support, and enabling better integrations. Their efforts are aimed at empowering the global Selenium user base.
- Community-Focused Innovation: By pooling our collective expertise, we are well-positioned to drive new solutions and elevate test automation practices to new heights.
What This Partnership Means for the Community
The contributions from LambdaTest’s OSPO are set to bring notable benefits to the broader testing landscape:
- Faster Development: The infusion of dedicated engineering resources will accelerate the development of new features and improvements.
- Improved Stability: Increased efforts in testing and quality assurance will help quickly identify and resolve issues.
- Better Documentation: Enhanced documentation will make it easier for users to dive into Selenium and harness its advanced capabilities.
- Enhanced Community Support: LambdaTest will play an active role in organizing and sponsoring community events, fostering rich collaboration and knowledge sharing.
Looking Ahead
This partnership is more than a technical alliance—it reaffirms our belief in the power of community-led development. The proactive contributions from LambdaTest’s OSPO will help create a more connected and empowered test automation community. We invite you to join our upcoming workshops, webinars, and discussion forums to see firsthand how these collaborative projects will shape the future of open source test automation.
Formalizing LambdaTest as a Selenium development partner is a milestone that celebrates our commitment to innovation and community spirit. With the dedicated efforts from LambdaTest’s OSPO, we continue our mission to enhance the Selenium ecosystem for every developer and tester worldwide.
Join us on this journey toward a future that is more resilient, supportive, and inventive in the realm of test automation.
Selenium 4.31 Released!
We’re excited to announce the release of Selenium 4.31 for Javascript, Ruby, Python, .NET, Java
and the Grid! 🎉
This release focuses on improvements across the board, including better BiDi protocol support, test
reliability, nullability enhancements, and cleanup of legacy code across languages.
Links to all assets can be found on our downloads page.
🚀 Major Highlights
- Continued work towards full BiDi support in all bindings
- Cleanup of unused legacy components (like
wgxpath
) - Expanded test coverage and fixes for various environments (CI, RBE, MacOS)
- Improvements in documentation and development tooling
🔹 Language-Specific Changes
Java
- Handle
getNamedCookie
anddeleteNamedCookie
for empty strings - Add nullness for AppCacheStatus, Credential, and Either
- Add nullness for interactions
- Enable Safari for CookieImplementationTest
- Add test to add a cookie in a user context (BiDi)
Python
- Fix docstring issues that sphinx complains about
- Only shutdown service if process not already terminated
- Remove unused mocker arg in chrome options test
- Fix driver class name in test fixtures
JavaScript
- Fixed BiDi tests for Chrome and Firefox on CI.
- Implemented BiDi
permissions
module commands.
Ruby
.NET
- Decouple nested BiDi types across multiple modules
- Fix null warnings in
RelativeBy
by sealing the type - Simplify conversion to
LocalValue
- Unify protected and internal Execute methods
- Make
ContinueWithAuthCommand
closer to spec (breaking change) - Avoid intermediate JsonDocument allocation to improve performance
Grid
Docker Selenium
- Helm config: Add template for file browser video records service (#2763)
- Helm config: Strictly handle
basicAuth.enabled
in template (#2760) - Selenium Grid Autoscaling in Kubernetes is expected working well with KEDA core v2.17.0.
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Swastik Baranwal
Sandro
Navin Chandra
Selenium Docs & Website
ian zhang
Pallavi
Docker Selenium
AvivGuiser
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium 4.30 Released!
We’re very happy to announce the release of Selenium 4.30 for Javascript, Ruby, Python, .NET, Java and the Grid! This version brings key updates across the project, with improvements to the BiDi protocol, extensive nullability work in .NET, better error handling, and various bug fixes. It’s a great step forward as we continue strengthening Selenium’s stability, consistency, and support across all supported languages.
Links to all assets can be found on our downloads page.
🚀 Major Highlights
- Continued enhancements to BiDi (Bi-Directional Protocol) support across Java, Ruby, .NET, JavaScript, and Python.
- Extensive nullability annotations added throughout the .NET bindings.
- Selenium Manager (Rust) now supports nightly Grid builds.
- Improvements to testing infrastructure and developer experience, including better packaging, linting, and platform support.
- Numerous bug fixes and refactors across the Grid, bindings, and devtools.
🔹 Language-Specific Changes
Java
- Implemented BiDi commands:
getBidiSessionStatus
andPermissions
. - Refined logger initialization.
- Removed deprecated, non-W3C compliant
NetworkConnection
interface. - Added support for setting viewport and handling CDP warnings gracefully.
Python
- Improved devtools test handling and documentation.
- Fixed packaging issues and test discovery for
pytest
. - Added docstring updates for clarity and modernization.
- Replaced strings with
By
class attributes. - Improved socket resource management and error handling.
- Updated
expected_conditions
type annotations.
JavaScript
- Fixed BiDi tests for Chrome and Firefox on CI.
- Implemented BiDi
permissions
module commands.
Ruby
- Fixed a compatibility issue with Ruby 3.1 (“no anonymous block parameter”).
- Added BiDi support for:
- Setting viewport
- Activating browser context
- Providing responses
- Added a
target_type
parameter to devtools.
.NET
- Enabled nullable reference types across many components.
- Trimmed away CDP for AOT applications.
- Enhanced BiDi support including:
SetFiles
command- Support for
UnhandledPromptBehavior
- Event support like
OnNavigationCommitted
- Encapsulation of the transport layer
- Improved
WebDriver
,WebElement
, and capabilities types with nullability. - Introduced
SystemClock
singleton. - Revisited and fixed test execution on Windows/macOS.
- Removed obsoleted members for 4.30.
Grid & Selenium Manager
- Added trace logging for session stop events in Grid.
- Improved configuration options for server timeouts and session handling.
- Added support in Selenium Manager (Rust) for nightly Grid builds.
- Enhanced ability to trace and view live sessions.
Docker Selenium
- Helm config: Node Relay to extend autoscaling Grid with test cloud resources (#2703).
- Docker: Disable HeapDumpOnOutOfMemoryError by default (#2708)
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Swastik Baranwal
Adam Halbrock
Robin
Jolyon Pawlyn
Navin Chandra
Romain Tartière
Pallavi
Adam Halbrock
Selenium Docs & Website
Swastik Baranwal
Wasiq Bhamla
ian zhang
Ujjwal Kumar Singh
Pallavi
Docker Selenium
Viet Nguyen Duc
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Selenium Community Live - Episode 4
The fourth episode of Selenium Community Live happened on March 19th, 2025, with Michael Mintz, who is the creator of SeleniumBase. SeleniumBase is an all in one Browser Automation Framework, built over Selenium WebDriver Python bindings. The framework is well known and used in the WebDriver Ecosystem community for testing, web scraping, web crawling and stealth purposes.
You can watch the episode on YouTube here- Episode 4 on YouTube
Meet the Speakers:
Insights from the Session
In the fourth episode of Selenium Community Live, Michael Mintz, the creator of SeleniumBase, provides an in-depth look at his powerful web automation framework.
What is SeleniumBase?
SeleniumBase is an open-source framework built on top of Selenium Python bindings, currently boasting over 9,000 GitHub stars. It’s not just a testing framework, rather a complete ecosystem that provides powerful features for various scenarios for browser automation.
Key highlights include:
- Test recorder to record and playback tests
- Advanced dashboards and reporting capabilities
- Integration with pytest for powerful unit testing
- 500+ API methods for comprehensive web automation
- Multi-language support with translations in 10 languages
Core Features Demonstrated
Enhanced Pytest Integration
SeleniumBase seamlessly integrates with pytest, providing extensive command-line options. Michael demonstrated how you can:
- Run tests with
--slow
mode to visualize test execution - Use
--headless
for faster execution without browser UI - Enable
--demo
mode to highlight actions and show real-time test progress - Implement
--rs
(reuse session) to run multiple tests in the same browser window
Advanced Browser Management
The framework provides sophisticated browser control options:
# Multiple browser support with easy switching
pytest my_test.py --edge
pytest my_test.py --firefox
pytest my_test.py --chrome-for-testing
# Mobile device emulation
pytest my_test.py --mobile
# Multi-threading capabilities
pytest my_test.py -n4 # Runs tests in 4 parallel browsers
Stealth Mode and Captcha Bypass
One of SeleniumBase’s standout features is its ability to bypass Cloudflare captchas and other anti-bot measures through UC Mode (Ultra-Chrome Mode) and CDP Mode (Chrome DevTools Protocol Mode). This makes it particularly valuable for web scraping applications.
Comprehensive Reporting and Debugging
SeleniumBase automatically generates detailed reports for failed tests, including:
- Screenshots of the last page visited
- Complete stack traces
- Browser and driver version information
- Detailed logs with timestamps
- Interactive HTML dashboards
The framework also offers powerful debugging capabilities:
--pdb
stops at failure points for interactive debugging--trace
enables line-by-line debugging from the start- Automatic screenshot capture on test failures
Multiple Syntax Formats
Michael showcased SeleniumBase’s flexibility by demonstrating different syntax formats, including:
- Traditional pytest format with BaseCase inheritance
- SB pytest fixture for fixture-based testing
- Page Object Model integration
- Python context manager for pure Python usage (no pytest required)
- BDD/Gherkin syntax with behave runner
- Multi-language support in Chinese, Dutch, French, Italian, Japanese, Korean, Portuguese, Russian, and Spanish
Example Test Structure
from seleniumbase import BaseCase
class TestExample(BaseCase):
def test_swag_labs(self):
self.open("https://www.saucedemo.com")
self.type("#user-name", "standard_user")
self.type("#password", "secret_sauce")
self.click('input[type="submit"]')
self.assert_element("div.inventory_list")
self.assert_exact_text("Products", "span.title")
Advanced Capabilities
JavaScript Integration and Tours
SeleniumBase includes a JavaScript injector that allows you to modify any website and create interactive tours. This feature enables:
- Custom website tours using IntroJS
- Dynamic content modification
- Advanced interactions beyond standard Selenium capabilities
CI/CD Integration
The framework works seamlessly with GitHub Actions, providing XVFB support for headless Linux environments. Michael demonstrated running tests in the cloud with automatic secrets management for secure credential handling.
Multiple Use Cases
SeleniumBase serves various automation needs:
- Test Automation: Comprehensive testing with enhanced reporting
- Web Scraping: Captcha bypass and stealth capabilities
- Website Tours: Interactive user onboarding
- Data Collection: Automated information gathering
- UI Validation: Advanced element interaction and verification
Getting Started
SeleniumBase can be installed via pip and offers immediate value with its extensive command-line options and automatic waiting mechanisms. The framework eliminates many common Selenium pain points like flaky tests through built-in intelligent waits and retry mechanisms.
For those interested in exploring SeleniumBase further, Michael provides several channels for community support:
- GitHub repository with comprehensive documentation
- Selenium Slack workspace (#seleniumbase channel)
- Dedicated Discord server with 700+ members
- YouTube channel with detailed tutorials and examples
Community Impact
With its extensive feature set and active development, SeleniumBase represents a significant evolution in Python-based web automation. The framework’s ability to handle everything from simple test automation to complex web scraping with captcha bypass makes it a versatile tool for developers and QA professionals alike.
Watch the Recording
Couldn’t join us live? Watch the entire episode here - 📹 Recording Link: Watch the Event Recording on YouTube
You can find out more about Selenium Base here - Selenium Base
In case you were wondering what happened to episode 3, it was cancelled but will be scheduled in coming weeks. Thank you! Stay tuned as we bring the next! Subscribe here to the Selenium HQ Official YouTube Channel.
Selenium 4.29 Released!
We’re very happy to announce the release of Selenium 4.29 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.
🚀 Major Highlights
- Final removal of Firefox CDP support across all language bindings.
- New WebDriver BiDi capabilities: Implementation of
setCacheBehavior
andgetClientWindows
commands. - Grid UI Fixes: Live session view now works as expected.
- PrintOptions enhancements: Support for predefined and custom paper sizes.
- Nullability annotations continue to improve type safety in .NET.
- BiDi improvements: Network response handlers and optimizations.
- Enhancements to logging options in Java.
🔹 Language-Specific Changes
Java
- Implemented
setCacheBehavior
for WebDriver BiDi. (#15130) - Enhanced
PageSize
class to support predefined and custom paper sizes. (#15052) - Ensured purging dead nodes service interval is configurable. (#15175)
- Improved handling of Selenium logging options. (#15197)
- Added support for
getClientWindows
in WebDriver BiDi. (#14869)
Python
- Fixed installation issues for source distributions. (#15128)
- Updated
PrintOptions
to support different page sizes. (#15064) - Documented
cygwin
path usage insend_keys()
. (#15275) - Fixed return type and docstrings for
get_downloadable_files()
. (#15292)
JavaScript
- Implemented
setCacheBehavior
for WebDriver BiDi. (#15136) - Fixed dependencies for
novnc
v1.5.0. (#15005) - Added support for
getClientWindows
in WebDriver BiDi. (#15248)
Ruby
- Removed Java date dependency. (#15122)
- Added WebDriver BiDi network response handler. (#14900)
- Implemented WebDriver BiDi
setCacheBehavior
command. (#15114)
.NET
- Improved BiDi exception handling when it is not enabled. (#15163)
- Added nullability annotations across multiple modules, including
Command
,DriverService
,FirefoxProfile
,Manage()
,SafariOptions
, andNavigate()
. - Updated WebAuth credential handling. (#15201)
- Simplified creation of network types. (#15267)
- Improved logging stability. (#15257)
Docker Selenium
- Publish Node/Standalone images with the latest Grid core version and browser backward versions
- Update container environment to JDK21 (#2642)
- Node base with share system certificate support (#2653)
- Node container is able to restart and retry to register when
register-period
exceeded (#2662) - Selenium Grid scaler in KEDA feature preview
- Helm config: Set K8s node IP to all components via env var KUBERNETES_NODE_HOST_IP in template (#2668)
- See all changes
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Swastik Baranwal
Alex Popov
Navin Chandra
Romain Tartière
Vinaysimha Varma Yadavali
Selenium Docs & Website
Andrey Vorobev
Swastik Baranwal
ian zhang
Benjamin Rosemann
Pallavi
Docker Selenium
Peter Upfold
Sten Arthur Laane
Amar Deep Singh
Oskar Budziosz
Ritesh Khadgaray
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Corey Goldberg
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Benzer
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!
Removing ChromeDevTools Support For Firefox
Selenium has deprecated support for Chrome DevTools Protocol (CDP) for Firefox in the last two versions (4.27 and 4.28). Our typical removal policy is to deprecate support for two versions, allowing users sufficient time to update their codebase, and then remove it from the third version onwards.
Starting with Selenium 4.29.0, CDP support for Firefox has been fully removed—and for good reason. Selenium’s CDP implementation for Firefox was always partial, meaning it never had complete feature parity with Chrome. Meanwhile, Firefox is shifting towards WebDriver BiDi, the future of cross-browser automation. Aligning with this, Firefox has announced that starting with Firefox 129, CDP will no longer be enabled by default. Read more here: [https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/].
To support this transition, Selenium is removing CDP support for Firefox, as a major portion of WebDriver BiDi functionality is now available across all Selenium language bindings. Selenium is committed to staying in sync with browser vendors and the latest developments in the WebDriver BiDi protocol. This step brings us closer to standardized, browser-agnostic automation.
If you were using CDP in Selenium for Firefox, now is the time to switch to WebDriver BiDi. Start your journey with Selenium’s WebDriver BiDi examples here.
Selenium Community Live - Episode 2
The second episode of Selenium Community Live happened on Jan 21st, 2025, with David Burns, Selenium Project Leadership Member, Chair W3C Browser Testing and Tools Workgroup, and Head Open source and Developer Advocacy at BrowserStack. The topic of the event was Browsers, Browser Engines and why they are not the same.
You can watch the episode here- Selenium Community Live - Episode 2
Meet the Speakers:
Browser Engines vs Real Browsers: Why They’re Not Equal
The Selenium community recently hosted an enlightening session with David Burns, who, shared crucial insights about browser testing that every automation engineer should understand.
The Foundation: Web Standards Matter
David began by emphasizing the importance of web specifications, particularly the work done by the W3C Browser Testing and Tools Working Group. This group maintains three critical specifications:
- WebDriver Classic/HTTP: The standard WebDriver protocol we use daily
- WebDriver BiDi: A bidirectional protocol enabling event-driven APIs for network interception and DOM mutations
- AT Driver: Built on WebDriver BiDi for driving accessibility tools like screen readers
The key takeaway being, that Standards create a level playing field, but the devil is in the details. The difference between “MUST” and “SHOULD” in specifications can create significant bugs across different browser implementations.
Real User Testing: Beyond Surface-Level Automation
One of David’s most compelling points centered on the concept of “real user testing.” When Selenium executes a click, it goes through the browser’s backend, creating trusted events that the browser recognizes as legitimate user interactions. This is crucial for:
- Banking iframes
- Third-party authentication (like Okta)
- Any security-sensitive operations
Tools that execute events through the document (frontend) create synthetic events marked as isTrusted: false
, which security-conscious applications will reject.
The Headless vs Headful Reality Check
David revealed a startling discovery made by Mathias Bynens (Engineering Manager at Google): for years, Chrome’s headless mode wasn’t actually using the same rendering engine (Blink) as regular Chrome. It was essentially a different browser altogether.
This revelation led to the creation of Chrome for Testing, providing a stable, consistent testing environment that actually matches what users experience.
“Headless and headful is not necessarily the same… it is literally apples to oranges.”
Browser Engines vs Real Browsers: The Critical Difference
Using Chromium instead of actual browsers like Chrome, Edge, Brave, or Opera might seem equivalent, but David highlighted crucial differences:
Third-Party Cookie Handling
Different browsers handle cookies differently. Brave’s privacy-focused approach differs significantly from Chrome’s implementation, affecting:
- Session management
- Login/logout flows
- Cross-site functionality
Real-World Example: Safari’s IndexedDB Bug
A particularly illustrative case was Safari’s IndexedDB bug that affected desktop Safari but not:
- WebKit (the engine)
- iOS Safari
- Safari Tech Preview
Testing with WebKit alone would have missed this critical bug that could break login functionality for real users.
Mobile vs Desktop: More Than Just Screen Size
Simply resizing a desktop browser to mobile dimensions doesn’t replicate mobile browsing:
Operating System Differences
- Mobile and desktop use different operating systems
- Display rendering works differently
- Resource constraints affect performance
Device Pixel Ratio Issues
Mobile devices have different pixel density requirements that can’t be accurately simulated by browser resizing, leading to rendering inconsistencies in graphics-intensive applications.
Risk Management: Making Informed Decisions
David’s presentation wasn’t about mandating specific tools but about understanding trade-offs:
Low Risk Scenarios
- Simple web forms
- Basic functionality testing
- Limited third-party integrations
High Risk Scenarios
- Canvas/graphics-heavy applications
- Complex authentication flows
- Mobile-specific interactions
- Security-sensitive operations
Practical Recommendations
- Understand Your User Base: Test where your users actually are
- Know Your Risk Profile: Complex applications require more realistic testing environments
- Choose Tools Wisely: Understand what your testing framework actually provides
- Stay Informed: Browser differences evolve constantly
Looking Forward: Selenium 5
David shared insights about Selenium’s future direction:
- Continued focus on WebDriver BiDi implementation
- More “batteries included” features like Selenium Manager
- Enhanced APIs for network interception and advanced automation
The Selenium team remains committed to conservative changes, prioritizing stability while adding powerful new capabilities.
Conclusion
David’s presentation reminds us that effective testing requires understanding the nuances of web browsers and making informed decisions about our testing strategies. While convenience tools have their place, knowing when and how to test with real browsers can be the difference between catching critical bugs and shipping broken experiences to users.
The key message is clear: there’s no one-size-fits-all solution, but with proper knowledge of the risks and differences between testing approaches, teams can make intelligent choices that balance practicality with coverage.
Watch the Recording
Couldn’t join us live? Watch the entire episode here - 📹 Recording Link: Watch the Event Recording on YouTube
David also runs a blog, and if you are interested in knowing internals of Selenium explore the link - Blog By David
Stay tuned as we bring the next! Subscribe here to the Selenium HQ Official YouTube Channel.
Selenium 4.28 Released!
We’re very happy to announce the release of Selenium 4.28 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.
Highlights
- Chrome DevTools support is now: v132, v131, and v130 (Firefox still uses v85 for all versions)
- Expanded nullability annotations for better type safety in .NET and Java.
- Refinements to Selenium Grid, including more efficient session handling and node management.
- Packaging and installation enhancements across Python and Ruby for smoother integration.
- Documentation improvements across Python and .NET libraries, ensuring clearer developer guidance.
- Updated language-specific implementations for modern development standards.
Changes by Language
Java
- Encapsulation Improvements: Encapsulated
additionalCommands
with a getter method (#14816). - Nullability Enhancements: Added nullness annotations for enums, exceptions, interactions, logging, and Proxy (#15105, #15094).
- SpotBugs Updates: Excluded specific warnings to maintain clean code (#14766).
- Improved Logging: Enhanced error handling and message clarity in exceptions (#15116).
- Relative Locators: Updates for
RelativeBy
locators, simplifying usage (#14482).
Python
- Packaging Fixes: Addressed issues for smoother installation (#14806, #14823).
- Documentation Upgrades: Added comprehensive docstrings to multiple classes, including
WebDriverWait
,ExpectedConditions
, andWebElement
(#15077, #15096). - Refactoring: Moved project metadata and improved code organization (#14837).
- Enhanced CDP Command Handling: Added
execute_cdp_cmd
toRemote
(#14809).
JavaScript
- Federated Credential Management Support: Introduced support for Federated Credential Management, enhancing authentication capabilities. (#15008)
- Node.js Version Specification: The minimum required Node.js version has been specified as 18.20.5.
- Improved Logging: Added detailed error messages for invalid cookie name validation in
getCookie
anddeleteCookie
methods, aiding in debugging. - Diagnostic Logging for Safari: Enabled diagnostic logging for Safari, facilitating better issue tracking and resolution.
.NET
- Nullability Improvements: Added annotations to
SessionId
,Alert
,CookieJar
,Logs API
, and more (#14840, #14874). - Refactored DevTools: Modernized code style and enhanced JSON parsing (#14990).
- Future-Proofing: Added notes and deprecated setters for better immutability (#15107).
- Testing Updates: Migrated NUnit assertions to modern syntax (#14870).
Ruby
- BiDi Network Enhancements: Added request handlers for authentication and interception (#14751).
- Cookie Management Updates: Added tests and improved handling for cookies (#14843).
Grid
- Improved Session Management: Enhanced slot matching and session queue handling (#14914).
- Dynamic Grid Enhancements: Added video recording capabilities on browser node (#15047).
- Reliability Boost: Improved HTTP request retries and node health checks (#14924).
Docker Selenium
Update procedure to install Firefox in Node/Standalone Firefox (#2550)
Enable video recorder in Node/Standalone containers (#2539)
Env var
SE_ENABLE_TRACING=false
is not required when starting the container anymore (#2549)Env var
SE_NODE_PLATFORM_NAME
&SE_NODE_BROWSER_VERSION
to adjust default Node stereotypes for autoscaling (#2520, #2525)Selenium Grid scaler in KEDA improvements (KEDA#6437, KEDA#6477)
We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
For a detailed look at all changes, check out the release notes.
Contributors
Special shout-out to everyone who helped the Selenium Team get this release out!
Selenium
Dinesh Kumar R A
MustafaAgamy
Dennis Oelkers
Alex Popov
Lauro Moura
Navin Chandra
Simon Benzer
Selenium Docs & Website
Swastik Baranwal
Jason Ren
Navin Chandra
Pallavi
Simon Benzer
Vinaysimha Varma Yadavali
Docker Selenium
AvivGuiser
Selenium Team Members
Thanks as well to all the team members who contributed to this release:
Augustin Gottlieb
David Burns
Boni García
Diego Molina
Sri Harsha
Nikolay Borisenko
Alex Rodionov
Puja Jagani
Michael Render
Simon Mavi Stewart
Titus Fortner
Viet Nguyen Duc
Stay tuned for updates by following SeleniumHQ on:
Happy automating!