This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Blog

Selenium Blog

Keep up to date with all Selenium news here!

Blog Posts - 2024

Selenium 4.26 Released!

Today we’re happy to announce that Selenium 4.26 has been released!

We’re very happy to announce the release of Selenium 4.26 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.

Selenium 4.26.0 release introduces new features, key enhancements, and numerous bug fixes across different languages and components. This version focuses on improving compatibility, updating dependencies, enhancing internal logging, and providing broader WebDriver capabilities. Here are the most important updates:

General Highlights

  • Chrome DevTools support is now: v130, v129, and v128 (Firefox still uses v85 for all versions)

  • Selenium has at least 4.8M active users in the last 30 days. 800K more than 1 month ago!

  • Selenium Manager Enhancements: Added better handling for invalid browser versions and improved logging, helping to streamline browser management.

  • Expanded BiDi (Bidirectional WebDriver Protocol) Support for .NET: Continuing the work on BiDi for .NET, this release includes improved WebSocket communication, CDP DevTools integration, and expanded logging, advancing real-time and bidirectional interactions.

  • Grid UI Enhancements: New sorting options by Platform, Status, and ID, session timeout display, and WebSocket connection management for better performance and user experience.

  • CI/CD Pipeline Improvements: Numerous updates for CI workflows, such as artifact handling and new testing configurations, to boost stability and developer productivity.


.NET

  • Updated WebSocket communication and DevTools integration in the BiDi implementation, adding extensive internal logs to improve diagnostics (#14566, #14558).

  • Added support for the GetLog command in the Remote WebDriver (#14549).

  • Enhanced configuration for PrintOptions, allowing direct control over PageDimensions and PageMargins (#14593).

  • Deprecated several old constructors for cleaner exception handling and improved compatibility with Ahead-of-Time (AOT) compilation (#14574).


Java

  • Increased property scope for improved compatibility with Appium (#14183).

  • Updated SpotBugs settings and fixed issues in ChromiumDriver and PortProber for cleaner code (#14589).

  • Added PAC proxy URL support for Selenium Manager to expand proxy configuration capabilities (#14506).


Python

  • Added more internal logging for CDP, and configured WebDriver HTTP client settings for enhanced performance (#14668, #13286).

    Explore the various configuration parameters for the WebDriver HTTP client.

  • Removed deprecated EdgeService parameters and eliminated Python 2.x code from various test files (#14563, #14502).

  • Set consistent polling for WebDriverWait methods to align behavior between Java and Python implementations (#14626).

  • Improves binding extensibility for seamless integration of Selenium into Appium’s Python client. (#14587).


JavaScript

  • Closed BiDi WebSocket connection on session end, improving session management in BiDi (#14507).

  • Fixed issues with sendKeys command, addressing errors in FileDetector handling (#14663).


Ruby

  • Added RBS type support for BiDi-related classes, aligning with updates for Ruby BiDi compatibility (#14611).

  • Updated BiDi script structures to match recent specifications for consistent implementation (#14236).


Selenium Grid

  • New Grid UI features for sorting and WebSocket management, adding clarity and control to session management (#14571, #14598, #14599).

  • Enabled async requests in httpclient to enhance request handling performance (#14409).

  • Improved node handling for better scalability and stability (#14628).


Docker Selenium

  • Updated FFmpeg v7.1 in video recorder (#2439).

  • Updated in Helm chart for Selenium Grid deployment to Kubernetes

    • Add GraphQL metrics exporter for monitoring (#2425).
    • Add templates for Relay node (#2453).
    • Allow to overwrite config videoRecorder in each node (#2445).

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Swastik Baranwal

Swastik Baranwal

Rob Brackett

Rob Brackett

Michael Render

Michael Render

Agustin Pequeno

Agustin Pequeno

David Bernhard

David Bernhard

Priyansh Garg

Priyansh Garg

Navin Chandra

Navin Chandra

Simon Benzer

Simon Benzer

Selenium Docs & Website

Abdelrahman Magdy Ellithy

Abdelrahman Magdy Ellithy

Swastik Baranwal

Swastik Baranwal

ian zhang

ian zhang

Harshit Bhardwaj

Harshit Bhardwaj

Simon Benzer

Simon Benzer

Andrew Zipperer

Andrew Zipperer

Docker Selenium

Bruno Brito

Bruno Brito

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Viet Nguyen Duc

Viet Nguyen Duc

Project Highlights

This year marks a monumental milestone—20 years of Selenium transforming browser automation! Since its inception as a modest open-source project, Selenium has grown into the world’s most trusted tool for web automation, powering testing and development for countless users globally. From revolutionizing open-source collaboration to shaping automation practices, Selenium has impacted developers, testers, and organizations worldwide.

To honor this journey, the Selenium team hosted a special webinar on October 28th, 2024, where the leadership team shared insights on Selenium’s evolution, the latest advancements in WebDriver BiDi, and exciting prospects for the future. If you’d like to learn more about Selenium’s incredible journey and future plans, head to the official blog post here.

Special thanks to the Selenium community for your continued support and contributions, to the entire Selenium team for their dedication and hard work, and to Pallavi Sharma and Maaret Pyhäjärvi for organizing and leading this event.

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy automating!

Celebrating 20 Years of Selenium: A Journey of Innovation in Browser Automation

Celebrating 20 Years of Selenium!

This year marks a monumental milestone—20 remarkable years of Selenium, the tool that revolutionized browser automation! We’re thrilled to invite you to a special event to commemorate this incredible journey: Celebrating 20 Years of Selenium

Two Decades of Selenium: Revolutionizing Open Source Browser Automation and Testing Over the past two decades, Selenium has reshaped the automation landscape, evolving from a simple tool into the backbone of browser automation across the globe. What began as a modest open-source project has grown into the most trusted tool for web automation, embraced by developers, testers, and businesses alike. As we celebrate Selenium’s 20th birthday on October 28th, we invite you to join a special webinar that honors the tool itself and the incredible community that has powered its success. Governed by the Software Freedom Conservancy, Selenium’s legacy is built on open-source collaboration and the passion of its contributors. The webinar begins at 11:30 AM GMT on October 28th, 2024, and will be packed with two hours of insightful talks from the Selenium Leadership Team. We’ll explore the project’s current advancements, the cutting-edge work in the WebDriver BiDi space, and what lies ahead for the next decade of Selenium. Here’s what you can expect:

Meet the Speakers:

  1. Diego Molina – Selenium Project Leadership & Technical Leadership Topic: “Choosing the Right Framework: Exploring the Selenium Ecosystem for Testing” Diego will dive into a critical discussion on Selenium’s role in the broader testing ecosystem. He’ll explore whether Selenium remains the best option for web testing, considering the wide array of available frameworks. Expect valuable insights into Selenium’s advantages, limitations, and how to choose the right tool for your needs.

  2. Puja Jagani – Selenium Technical Leadership Topic: “BiDi-powered Selenium: Shaping Tomorrow’s Automation” Puja, a leading contributor to the WebDriver BiDi initiative, will give us a glimpse into the future of automation. Her talk will explore how the W3C BiDi protocol transforms browser automation with event-driven testing capabilities, offering improved performance and cutting-edge features that will redefine the automation landscape.

  3. Q and A - With Folks From Selenium Project

Why You Should Attend This webinar is more than just a celebration—it’s a chance to learn from the visionaries driving Selenium’s evolution. Whether you’re a seasoned professional or new to browser automation, this event offers invaluable insights into Selenium’s past, present, and future. 💻 Event Registration: Celebrating 20 Years of Selenium 📅 Date & Time: October 28th, 2024, at 11:30 AM GMT

Join Us in Celebrating Selenium’s Incredible Journey! For 20 years, Selenium has helped shape how we test, automate, and innovate on the web. This is your opportunity to celebrate that legacy and learn what the future holds for browser automation. We can’t wait to see you there! Event Organizers - Maaret, Diego, and Pallavi.

Watch the Recording of Our 20th Anniversary Event

Couldn’t join us live? Watch the entire “Celebrating 20 Years of Selenium” event on YouTube. Relive the milestone moments, hear directly from the Selenium leadership team, and get insights into the future of browser automation.

📹 Recording Link: Watch the Event Recording on YouTube

This recording covers the highlights, including discussions on Selenium’s evolution, its role in the testing ecosystem, and the exciting advancements in WebDriver BiDi.

Announcing SeleniumConf & AppiumConf 2025

SeleniumConf and AppiumConf are back in person!

We’re thrilled to announce that SeleniumConf & AppiumConf is returning for 2025, bringing together browser and mobile automation enthusiasts from around the world. This must-attend event will take place from March 26-28, 2025, in the vibrant city of Valencia, Spain!

This year, the conference will gather over 400 browser and mobile automation professionals, including developers, testers, quality managers, test architects, and others, to explore the latest trends in browser and mobile automation, including cutting-edge topics like AI in automation, game testing, accessibility automation, and much more. Whether you’re new to automation or an experienced professional, this conference is designed to offer actionable insights and practical knowledge that you can take back to your team.

Why Attend?

  • Unparalleled Learning: Get hands-on training and real-world insights from world-class experts in Selenium, Appium, and the broader WebDriver ecosystem. Learn how automation tools like WebdriverIO, Puppeteer, Nightwatch, and more are pushing the boundaries of testing.
  • AI & Automation: Discover how AI is reshaping browser and mobile automation and learn practical techniques integrating AI into your testing workflows.
  • Workshops & Networking: Full-day workshops on March 26 offer deep dives into advanced topics like Selenium Grid with Kubernetes, Advance Appium or Selenium Deep Dive. Plus, with so many professionals on-site, it’s the perfect opportunity to grow your network and meet project leads, committers, and fellow testers.
  • Scenic Valencia: All of this will take place at the stunning Veles e Vents event building, located right by the Mediterranean Sea. And don’t worry, we’ve got special hotel rates just for you!

Mark Your Calendar 🗓️

  • Call for Proposals and ticket sales open on October 15, 2024. Take your chance to submit a talk or secure your spot at this exciting event!
  • The conference workshops will be posted on October 15, 2024, so stay tuned! In the meantime, visit www.seleniumconf.com for more details and to plan your trip.

Help Spread the Word!

Excited about SeleniumConf & AppiumConf 2025? Share this event with your colleagues, friends, and fellow automation enthusiasts. Remember to follow us for updates and visit www.seleniumconf.com to learn more.

Happy testing!

Selenium 4.25 Released!

Today we’re happy to announce that Selenium 4.25 has been released!

We’re very happy to announce the release of Selenium 4.25 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.

Selenium 4.25.0 introduces several important changes and improvements across multiple programming languages and build systems. Below are the key highlights from this release.

General Updates

  • Chrome DevTools support is now: v129, v128, and v127 (Firefox still uses v85 for all versions)

  • Selenium has at least 4M active users in the last 30 days. 1.5M more than 4 months ago!

  • First implementation of BiDi (Bidirectional WebDriver Protocol) for .NET, providing advanced capabilities like inspecting browser contexts and receiving real-time events.

    • We are looking for feedback on this feature, so please try it out and let us know what you think! Try var bidi = await driver.AsBiDiAsync(); to get started.

Java

  • Escape cookie values when required for tests (#14486)

  • Warn about an upcoming change enforcing string quotes in TOML (#14491)

  • See all changes


Python

  • Fixed type errors for pointer_input.py, wheel_input.py, and firefox/options.py (#14476)

  • Fixed failing BiDi tests (#14448)

  • Dropped support for Python 2.x in firefox_profile.py (#14489)

  • See all changes


JavaScript

.NET

  • BiDi API updates, including renaming methods and simplifying context handling (#14318)

  • Exposed BiDi associated references in browsing context (#14495)

  • See all changes


Ruby

  • Allowed driver path to be set using environment variables (#14287)

  • Fixed the add_cause method not being able to process an array of hashes (#14433)

  • See all changes


Rust

  • Fixed errors in Selenium Manager when the browser path is incorrect (#14381)
  • Reused driver mirror URLs to discover Firefox versions (#14493)
  • See all changes

Docker Selenium

  • KEDA Scaler in Kubernetes:

    • Enhanced KEDA scaler behavior, addressing:
      • Node with different platformName scaling: Fixed incorrect scaling behavior when both Linux and Windows node stereotypes are present (#1925).
      • Excessive autoscaling: Resolved over-scaling of browser nodes (#2160).
    • Added separate parameters for basic authentication (username, password) for the Grid GraphQL endpoint (#2401).
    • Added support for nodeMaxSessions parameter to control maximum concurrent sessions per node, aligning with the node config --max-sessions (#2402).

    Note: The above KEDA scaler updates are available experimentally via our built images approach. Check out this for more details.

  • Selenium Grid Helm Chart: Updated to support the new KEDA scaler enhancements.

  • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Swastik Baranwal

Swastik Baranwal

Agustin Pequeno

Agustin Pequeno

Angie Jones

Angie Jones

Chris Gossett

Chris Gossett

Dominic Evans

Dominic Evans

Manuel Blanco

Manuel Blanco

Navin Chandra

Navin Chandra

Sandeep Suryaprasad

Sandeep Suryaprasad

Simon Benzer

Simon Benzer

Selenium Docs & Website

Agustin Pequeno

Agustin Pequeno

Simon Benzer

Simon Benzer

Docker Selenium

Markus Kopp

Markus Kopp

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Viet Nguyen Duc

Viet Nguyen Duc

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy automating!

Selenium 4.24 Released!

Today we’re happy to announce that Selenium 4.24 has been released!

We’re very happy to announce the release of Selenium 4.24.0 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.

Noteworthy changes per language

  • Java
    • BiDi Prompt/Alert Test Fix: Fixed prompt/alert related tests if BiDi is enabled.
    • Execute Script API: Added execute script high-level API for BiDi.
    • JSpecify Annotations: Added JSpecify annotations for WebDriver, WebElement, SearchContext, and other interfaces.
    • Dom Mutation Handler Support: Added DOM mutation handler support for BiDi.
    • Close HttClient on Session Failure: Ensured HttClient is closed if starting the session fails.
    • System Property to Disable Tracing: Added a system property to disable tracing. (c8676eff10)
    • See all changes

  • JavaScript
    • High-Level Script Command for BiDi: Added a high-level script command for BiDi.
    • Authentication Handlers for BiDi: Added authentication handlers for BiDi.
    • Expose Selenium Version for Node.js: Exposed the Selenium version for Node.js.
    • See all changes

  • .NET
    • Migration to System.Text.Json: Migrated from Newtonsoft.Json to System.Text.Json package.
    • See all changes

  • Python
    • Unhandled Prompt Behavior: Added unhandled prompt behavior to ‘ignore’ option if BiDi is enabled.
    • Mypy Error Fixes: Fixed mypy errors for various modules.
    • Pytest Configuration Update: Moved pytest configuration settings to pyproject.toml.
    • Global Default Timeout Override: Allowed overriding GLOBAL_DEFAULT_TIMEOUT.
    • See all changes

  • Ruby
    • Deprecate WebStorage JS Methods: Deprecated WebStorage JavaScript methods.
    • See all changes

  • Rust
    • Skipping Drivers and Browsers in Path: Included arguments for skipping drivers and browsers in the path. (a056044d9c)
    • Use Debug Format Specifier: Used the Debug format specifier to display error messages. (d8a7172a2a)
    • Firefox Version Discovery: Used Firefox history major releases endpoint for version discovery. (02d6903006)
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

MustafaAgamy

MustafaAgamy

Agustin Pequeno

Agustin Pequeno

Angie Jones

Angie Jones

Chris Gossett

Chris Gossett

Diogo Teles Sant'Anna

Diogo Teles Sant'Anna

Dominic Evans

Dominic Evans

Lauro Moura

Lauro Moura

Manuel Blanco

Manuel Blanco

Michael Mintz

Michael Mintz

Navin Chandra

Navin Chandra

Pavel Sobolev

Pavel Sobolev

Sandeep Suryaprasad

Sandeep Suryaprasad

Simon Benzer

Simon Benzer

Selenium Docs & Website

MustafaAgamy

MustafaAgamy

Agustin Pequeno

Agustin Pequeno

ian zhang

ian zhang

Pedro Aguiar

Pedro Aguiar

Pablo Martinez

Pablo Martinez

Scott Babcock

Scott Babcock

Simon Benzer

Simon Benzer

Marek Andreansky

Marek Andreansky

Docker Selenium

Ilia Lazebnik

Ilia Lazebnik

Nandor Pal

Nandor Pal

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Viet Nguyen Duc

Viet Nguyen Duc

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy automating!

HtmlUnit Remote: Acquiring Remote HtmlUnitDriver Session in Selenium 4 Grid

This post describes ‘HtmlUnit Remote’, a wrapper for HtmlUnitDriver that enables Selenium 4 Grid to manage remote instances of this “headless” browser.

HTMLUNIT REMOTE

Maven Central

The HtmlUnit Remote project implements a W3C WebDriver protocol wrapper for HtmlUnitDriver, which enables Selenium 4 Grid to supply remote sessions of this headless browser.

Background

To eliminate behavioral differences between local and remote configurations, the Selenium Foundation framework always acquires browser sessions from a Grid instance, managing its own local grid instance when not configured to use an existing grid. Selenium 3 Grid could be configured to supply HtmlUnitDriver sessions, supported by special-case handling within the Node server itself. This handling was not carried over into Selenium 4 Grid, which was completely re-engineered with new architecture and vastly expanded capabilities.

The lack of HtmlUnitDriver support in Selenium 4 Grid necessitated reconfiguring the Selenium Foundation project unit tests from using this Java-only managed artifact to using a standard browser like Chrome, an external dependency that requires additional resources and imposes additional risks of failure.

The driver service implemented by HtmlUnit Remote enables Selenium 4 Grid to supply HtmlUnitDriver sessions.

Project Rationale

My initial objective for creating HtmlUnit Remote was to retain feature parity in Selenium Foundation for the set of browsers supported with Selenium 3 and Selenium 4. Although I could configure my unit tests to target a conventional browser, I also wanted to avoid additional external dependencies with associated risks.

Once I began investigating the features and functionality I would need to enable Selenium 4 Grid to supply HtmlUnitDriver sessions, I recognized an additional benefit this project could provide - comprehensive standardized configurability.

HtmlUnitDriver Configuration

All remote drivers are configured via a standard Selenium feature - the Capabilities object. Prior to the HtmlUnit Remote project, many of the options of HtmlUnit could not be accessed or modified via the Capabilities API. These were only available via custom HtmlUnitDriver methods, and the way that non-standard capabilities had been added to the Capabilities object didn’t conform to the W3C specification.

This meant that the initial phase of the HtmlUnit Remote project was to implement a comprehensive W3C-compliant configuration object - the HtmlUnitDriverOptions class. This class extends AbstractDriverOptions, adding driver-specific capabilities under an extension named garg:htmlunitOptions. Support for this class provides full configurability of all HtmlUnitDriver options through the standard Capabilities API.

This standardized configuration API has been incorporated directly into HtmlUnitDriver, providing the core implementation for manipulating every driver setting. To maintain backward compatibility, all of the existing constructors and configuration methods have been retained, reimplemented to use this new core API.

W3C Remote Protocol Wrapper

With full standardized configurability in place, the next step was to create a server that implements the W3C WebDriver protocol. The HtmlUnitDriverServer functions as a remote protocol wrapper around one or more HtmlUnitDriver sessions, performing the following tasks:

  • Create and manage driver sessions
  • Route driver commands to specified driver sessions
  • Package driver method results into HTTP responses

HtmlUnit Remote Packaging

Rather than bulk up the existing driver with remote-specific features, HtmlUnitDriverServer and associated facilities are packaged in a companion htmlunit-remote artifact. In addition to the server, this artifact defines a driver information provider (HtmlUnitDriverInfo), a driver service (HtmlUnitDriverService), and a custom slot matcher (HtmlUnitSlotMatcher).

Connecting to the Grid

Next up is HtmlUnitDriverInfo, which specifies the basic characteristics of the driver and provides a method that creates a driver session with specified capabilities. This class implements the standard WebDriverInfo interface.

With availability of HtmlUnitDriver advertised by this information provider, Selenium 4 Grid nodes can be configured to provide driver sessions:

htmlunit.toml
[node]
detect-drivers = false
[[node.driver-configuration]]
display-name = "HtmlUnit"
stereotype = "{\"browserName\": \"htmlunit\"}"

[distributor]
slot-matcher = "org.openqa.selenium.htmlunit.remote.HtmlUnitSlotMatcher"

The selenium-server JAR doesn’t include the HtmlUnitDriver artifacts; these need to be specified as extensions to the grid class path via the --ext option:

java -jar selenium-server-<version>.jar --ext htmlunit-remote-<version>-grid-extension.jar standalone --config htmlunit.toml

The grid-extension artifact provides all of the specifications and service providers required to enable Selenium 4 Grid to supply remote sessions of HtmlUnitDriver. This artifact combines htmlunit-remote with htmlunit3-driver, htmlunit, and all of their unique dependencies.

Implementation Details

HtmlUnit Remote provides the following elements:

  • HtmlUnitDriverInfo - This class informs Selenium 4 Grid that HtmlUnitDriver is available and provides a method to create new driver instances.
  • HtmlUnitSlotMatcher - This custom slot matcher extends DefaultSlotMatcher, indicating a match if both the slot stereotype and requested browser capabilities specify htmlunit as the browser name.
  • HtmlUnitDriverService - This class manages a server that hosts instances of HtmlUnitDriver.
  • HtmlUnitDriverServer - This is the server class that hosts HtmlUnitDriver instances, enabling remote operation via the W3C WebDriver protocol.

In operation, HtmlUnitDriverService is instantiated by Selenium 4 Grid node servers that are configured to support HtmlUnitDriver. Unlike other driver services, which launch a new process for each created driver session, HtmlUnitDriverService starts a single in-process server that hosts all of the driver sessions it creates.

This is a guest blog post by Scott Babcock

Two Chrome features you should disable

This blog post lists two problematic Chrome features that can affect your automation as well as a quick way to disable them.

Search engine selection screen

Starting with version 127 of Chrome, the browser now asks which search engine you would like to use, which is great for regular users.

But for automation, it does so every single time.

To bypass this, use the argument below when specifying the browser options.

--disable-search-engine-choice-screen

Chrome wastes over 60MB of your bandwidth downloading language plugins

The second feature is something that has been with Chrome for quite a while now.

Every time you launch Chrome, it will query and download several .crx files.

These files can even be left over on your disk’s download folder if you create and close drivers faster than these can be processed.

To disable this feature, use the browser option below.

--disable-features=OptimizationGuideModelDownloading,OptimizationHintsFetching,OptimizationTargetPrediction,OptimizationHints

This is a guest blog post by Marek Andreansky

Welcoming Puppeteer to the WebDriver World

Puppeteer has moved over to support WebDriver BiDi getting full support in Chromium browsers and Firefox.

The Selenium Project has always been fully supportive of creating a standard to improve the quality of the web that we use. We started with the WebDriver Specification and over the last couple of years have been working with the Safari, Edge, Chrome, and Firefox teams on the WebDriver-BiDi specification.

Today, we are celebrating that Puppeteer has moved over to using WebDriver-BiDi, the new WebDriver Specification that allows WebDriver clients to have event driven APIs instead of the synchronous way Selenium has done it before.

This new protocol allows us to be able to do things Selenium always wanted to do but was never surfaced to us in a meaningful way. We have documented all the latest additions to Selenium, thanks to WebDriver-BiDi, in our documentation

You can read about the latest changes on Mozilla Hacks and on the Chrome Developer Blog.

Congratulations to everyone in making this a reality and supporting a standardised web!

Protecting unsecured Selenium Grids against SeleniumGreed

With an ongoing attack, called SeleniumGreed, on Selenium Grids, we recommend you keep your grid secure.

Over the last week there have been stories going around about crypto miners abusing unsecured Selenium Grids by injecting code in the session create to download and start up crypto miners. This came out thanks to the work from Wiz about an attack they have called SeleniumGreed. This issue can be abused on most versions of Selenium but there appears to be a lot of effort going into abusing Selenium Grid 3.14. Please upgrade as some of the security items have been added since then.

Selenium Grid by default doesn’t have any authentication as the assumption has always been that we want you to put this behind a secure network to prevent people from abusing your resources. There are ways that you can secure the grid, and we have documentation available on how to do this in our help section. You can see more details if you run

java -jar selenium-server-<version>.jar info security

Another way to combat this is to use a cloud provider to run your Selenium Grid. We have numerous vendors that sponsor us so have a look at our sponsors page. If you need help, after reading the help section please come into our chat rooms and we will try guide you through making your grid more secure.

Selenium 4.23 Released!

Today we’re happy to announce that Selenium 4.23 has been released!

We’re very happy to announce the release of Selenium 4.23.0 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.

Noteworthy changes per language

  • Java
    • Add custom duration for Actions constructor (#14085).
    • Set session-request-timeout as client readTimeout in RemoteNewSessionQueue.
    • Add high-level BiDi logging APIs.
    • See all changes

  • JavaScript
    • Add source type to BiDi log entry.
    • Add high-level script pinning BiDi APIs.
    • See all changes

  • .NET
    • Log http requests/responses via internal DiagnosticsHttpHandler.
    • Return protected synchronous Execute method in WebDriver.
    • See all changes



Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Agustin Pequeno

Agustin Pequeno

Selenium Docs & Website

ian zhang

ian zhang

Agustin Pequeno

Agustin Pequeno

Docker Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Werner Robitza

Werner Robitza

Sebastian Schreck

Sebastian Schreck

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy automating!

Sauce Labs: A New Milestone with Selenium

Announcing a new Development partnership tier with Sauce Labs, celebrating our supporters!

Selenium has witnessed an exceptional year filled with expansion and progress. The rising popularity of Selenium’s Python Bindings is prominently showcased through the engaging discussions at the Selenium Conference and on LinkedIn. Concurrently, the Java bindings have reached a significant landmark, surpassing 100 million downloads. In addition to this, the community has managed to garner over 2.5 million active Selenium users monthly.

We could not have achieved Selenium’s 20th anniversary without the collective efforts of numerous volunteers and the invaluable assistance of a company like Sauce Labs.

In 2008, Jason Huggins, Selenium’s creator, established Sauce Labs, a company that has since played a crucial role in Selenium’s expansion.

Sauce Labs has provided a platform for the Selenium Project to display its accomplishments, including various keynotes at SauceCon. Here, figures like Simon Stewart and Jim Evans have been able to share their visions for the future of Selenium.

Financially, Sauce Labs has substantially supported the Selenium Project, sponsoring both the project itself and the Selenium Conference over many years. This backing has been instrumental in allowing the project to flourish.

Selenium thrives on collaboration, and Sauce Labs has been a vital facilitator. They have enabled the Selenium Project to host in-person events like the Test Automation Summit in Berlin in 2022. These gatherings have provided opportunities for members of the Selenium Project to engage with creators of different testing frameworks, fostering discussions on ecosystem improvements. Sauce Labs has also hosted Selenium Dev Summits, where the project’s future has been a central topic.

Sauce Labs contributions extend beyond financial support. They have significantly contributed to the technical and organizational well-being of the Selenium Project. Boni Garcia developed the first version of Selenium Manager while at Sauce Labs. Furthermore, several Sauce Labs employees, including Marcus Merrell, Diego Molina, and Titus Fortner, continue contributing to the Selenium project, driven by their passion. This passion is shared by Sauce Labs, enabling these contributions to be part of their daily work.

This unwavering support has nurtured a project governed openly, not by a single entity, but by the community. This model has welcomed diverse contributors, including Google Chrome, Microsoft, Apple, LambdaTest, Applitools, BrowserStack, and Mozilla Firefox teams. Together, they have developed WebDriver BiDi, the next generation of WebDriver.

The project’s open governance and collaborative nature have allowed continuous work on client bindings, particularly WebDriver BiDi, community support, documentation improvements, and maintenance of additional projects.

Sauce Labs has been an unnamed development partner for the Selenium Project for many years. With this in mind, the Selenium Project now shows its appreciation to Sauce Labs for their years of continued support by creating a new sponsorship tier called the Development Partner and naming Sauce Labs the first and official Development Partner.

Sauce Labs has Selenium in its DNA, and Selenium has Sauce Labs in its DNA. This partnership celebrates their shared history and future. We are excited to see what the future holds for both Selenium and Sauce Labs, and we are excited to continue to work together for the next twenty years.

If you want to learn more about this partnership and win a limited edition t-shirt, check How Did Sauce Labs Get Its Name? A Selenium Story.

Celebrating a Milestone: BrowserStack Becomes Selenium's Development Partner

Selenium is proud to annouce that we have created a new tier to show the appreciation of the companies that support us.

It has been a great year for the Selenium community as it continues to grow. The popularity of Selenium’s Python Bindings is evident from the discussions at the Selenium Conference and on LinkedIn, while the Java bindings have impressively surpassed 100 million downloads.

This project, having reached 20 years old this year, would not be possible without the amazing contributions from our volunteer contributors and the Open Source Program Offices of companies like BrowserStack that allow us to work on this project as part of our day jobs.

About BrowserStack They have over 50,000 organizations and 6M users using their end-to-end testing platform. BrowserStack has been one of the Selenium project’s biggest supporters for years and currently employs several of Selenium’s core maintainers, donating a significant portion of their time towards the development, maintenance, support, and leadership of open-source Selenium repos.

This dedicated support has allowed us to continue work on the client bindings, especially the work going into WebDriver BiDi, support our community, continuously improve our documentation, and maintain all the extra projects we oversee, ensuring Selenium can continue to thrive for the next 20 years. We are also thrilled to highlight the collaborative efforts between the BrowserStack team, the Google Chrome team, Microsoft, Apple, SauceLabs, and the Firefox team, who have come together to build Selenium WebDriver BiDi, the next generation of Selenium. This collaborative spirit embodies our dedication to enhancing the testing experience for the Selenium user community. With this in mind, the Selenium Project now shows our appreciation to BrowserStack for their years of continued support by creating a new sponsorship tier called the Development Partner. We are deeply indebted to BrowserStack for all their support and are proud to recognize them as our first official Development Partner. This work has allowed us to continue progress on the client bindings, especially the work going into WebDriver BiDi, support our community, continuously improve our documentation, and maintain all the extra projects we oversee, so Selenium can continue to be around for the next 20 years!

Selenium 4.22 Released!

Today we’re happy to announce that Selenium 4.22 has been released!

We’re very happy to announce the release of Selenium 4.22.0 for Javascript, Ruby, Python, .NET, Java and the Grid! Links to everything can be found on our downloads page.

Highlights

  • Selenium has at least 2.6 active users in the last 30 days. 200k more than last month!
    • All information we collect is publicly available.
    • The numbers only represent users who have Selenium Manager enabled and are using Selenium v4.17 or greater.
    • Python, Chrome and Windows all see the majority of use.
  • Chrome DevTools support is now: v124, v125, and v126 (Firefox still uses v85 for all versions)
  • The first implementations of the new BiDi API have rolled out in Ruby, Python and JavaScript

Noteworthy changes per language

  • Java
    • Enabling BiDi can now be accomplished by calling enableBiDi() on an Options class instance.
    • Video file name in Dynamic Grid can be set with se:videoName capability.
    • See all changes

  • JavaScript
    • BiDi API for console logging and JavaScript errors has been implemented.
    • Additional BiDi implementations.
    • See all changes

  • .NET
    • The .NET bindings have started to roll out asynchronous methods.
      • The synchronous methods will still be supported, but they will call the async methods “under the hood.”
      • This release adds asynchronous methods to the Navigation class.
    • See all changes

  • Python
    • This release implements a new way of working with Chrome Devtools Protocol
      • The previous implementation requires async/await pattern, so it was not backwards compatible.
      • The new implementation is backwards compatible and executes async code in separate threads.
    • Updated the webkitgtk and wpewebkit driver implementations.
    • Enabling BiDi can now be accomplished by setting the enable_bidi() property of an Options class instance to True.
    • BiDi API for console logging and JavaScript errors has been implemented.
    • See all changes

  • Ruby
    • Implemented a toggle for BiDi and Classic implementations.
    • BiDi API for console logging and JavaScript errors has been implemented.
    • See all changes

  • Rust
    • Added the ability to stream logging information to stdout instead of after execution complete.
    • Improved binary location on Windows with native Rust methods.
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Agustin Pequeno

Agustin Pequeno

Alexander Millin

Alexander Millin

Scott Babcock

Scott Babcock

Vladislav Velichko

Vladislav Velichko

James Yuzawa

James Yuzawa

Selenium Docs & Website

ian zhang

ian zhang

Agustin Pequeno

Agustin Pequeno

Sang Nguyen

Sang Nguyen

Docker Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy automating!

Multi-Arch Images via Docker Selenium

This blog post announces the availability of Multi-Arch Images for Selenium Grid Server on the official Selenium Docker Hub registry.

We’re very happy to announce the landing of Multi-Arch Images for Selenium Grid Server on the Selenium Docker Hub registry!

Motivation

For experimental Docker container images that are able to run on platforms such as the Apple M-series or Raspberry Pi, the community-driven repository initiative hosted at SeleniumHQ-Community/docker-seleniarm. These images are built for separate architectures: linux/arm64 (aarch64), linux/arm/v7 (armhf), and linux/amd64 and published on Seleniarm Docker Hub registry.

In order to bring more awareness to the existence of the Multi-Arch Docker container images, provide more insight and transparency on how the container images are built, as well as overcome challenges in building and maintaining them. We have decided to merge the fork into the main project Docker Selenium and published multi-arch images on Selenium Docker Hub registry.

Overview

From image tag releases 4.21.0 onwards, the architectures supported by Docker Selenium as below

ArchitectureOperating SystemAvailable
x86_64 (aka amd64)Ubuntu LTS
aarch64 (aka arm64/armv8)Ubuntu LTS
armhf (aka arm32/armv7l)N/A

Based on the architecture of the host machine, Docker will automatically pull the correct image for the platform.

Browser Binaries

Let’s take a moment to look at the browser binaries which are available for various architectures

Google does not build Chrome (google-chrome) for Linux/ARM platforms. Hence, the Chrome (node and standalone) images are only available for AMD64. Similarly, Microsoft does not build Edge (microsoft-edge) for Linux/ARM platforms.

Instead, the open source Chromium browser is used in place of Chrome and Edge. The standalone-chromium and node-chromium

$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest

Mozilla Firefox now is available for Linux/ARM64 via Nightly channel. The Firefox version in the ARM64 image will be different from the AMD64 version until the stable release is available.

Image NameOperating Systemamd64arm64
standalone-chromiumUbuntu LTS
node-chromiumUbuntu LTS
standalone-firefoxUbuntu LTS
node-firefoxUbuntu LTS
standalone-edgeUbuntu LTS
node-edgeUbuntu LTS
standalone-chromeUbuntu LTS
node-chromeUbuntu LTS

Build, test, and distribute multi-arch images

We would also like to share what has been done to ensure that the multi-arch images can be built, tested, and distributed seamlessly.

  • Utilize Bash scripts and Makefile to wrap the tasks as much as possible. It provides the transparency on how the container images are built and proceed by single command.

  • Utilize Arm VM’s support on CircleCI to build, test, and deploy ARM64 images. Once GitHub Actions officially supports Arm-based hosted runners, those workflows can easily be moved back to the same place. All the tests done for AMD64 images (including Docker, Docker Compose, and deploy to Kubernetes) are used to verify ARM64 images.

  • Utilize experimental feature containerd image store in Docker Engine to build and distribute multi-arch images in a simple way.

Hopefully, this will make it easy for the community to find and use multi-arch images to simplify Selenium Grid Server deployment on various platforms.


Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy testing!

Selenium 4.21 Released!

Today we’re happy to announce that Selenium 4.21 has been released!

We’re very happy to announce the release of Selenium 4.21.0 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: v123, v124, and v125 (Firefox still uses v85 for all versions)
  • Selenium has at least 2.4M active users in the last 30 days. 100k more than last month!
    • India and United States are the top countries with the most users.
    • Python is the most used language from the last 5 releases.
    • The most used operating system is Windows, with at least 1.9M users.
  • Extensibility points started to be implemented to simplify the integration between Selenium and Appium. Ruby is the first language to implement it.
  • Java and JavaScript keep adding more WebDriver BiDi features.
  • In Java, it is possible to set parameters for Selenium Manager via system properties.
  • Nightly packages are tested daily with the examples from the Selenium documentation.

Noteworthy changes per language

  • Java
    • Browser containers provisioned in Dynamic Grid will use the hostConfig
    • Set test name to video file name in Dynamic Grid
    • See all changes

  • JavaScript
    • Ensure selectVisibleByText method is same as other languages
    • See all changes


  • Python
    • Moving ignore_local_proxy_environment_variables to BaseOptions
    • See all changes


Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Joe Bandenburg

Joe Bandenburg

Oleksandr Kulychok

Oleksandr Kulychok

Sandeep Suryaprasad

Sandeep Suryaprasad

Selenium Docs & Website

Agustin Pequeno

Agustin Pequeno

Chamila Ambahera

Chamila Ambahera

Docker Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

Puja Jagani

Puja Jagani

Diego Molina

Diego Molina

Boni García

Boni García

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

David Burns

David Burns

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy testing!

Selenium 4.20 Released!

Today we’re happy to announce that Selenium 4.20 has been released!

We’re very happy to announce the release of Selenium 4.20.0 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: v122, v123, and v124 (Firefox still uses v85 for all versions)
  • Selenium has at least 2.3M active users in the last 30 days. 500k more than last month!
  • Java and JavaScript keep adding more WebDriver BiDi features.
  • .NET C# and JavaScript now publish nightly builds to GitHub packages.
  • Nightly packages are tested daily with the examples from the Selenium documentation.
  • The code used to invoke Selenium Manager has been refactored in all languages, making it easier to maintain and improve.
    • The interface has changed and if users were invoking it, they might experience issues. Selenium Manager is still in beta and these type of changes are expected.

Noteworthy changes per language

  • Java
    • Browser containers provisioned in Dynamic Grid will use the hostConfig
    • Dynamic Grid re-fetches browser images if they were pruned during runtime
    • Several BiDi additions: Update browsing context create method, between others.
    • See all changes

  • JavaScript
    • Several BiDi additions: Update capture screenshot APIs to include all parameters and remove scroll parameter, between others
    • Nightly JS builds are now pushed to GitHub packages
    • See all changes

  • .NET
    • The correct devtools session id is now used after reinitialization
    • Nightly .NET C# builds are now pushed to GitHub packages
    • See all changes



Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Selenium Docs & Website

Viet Nguyen Duc

Viet Nguyen Duc

Agustin Pequeno

Agustin Pequeno

Harshit Bhardwaj

Harshit Bhardwaj

Andrew Zipperer

Andrew Zipperer

Docker Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Maxim Manuylov

Maxim Manuylov

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

Puja Jagani

Puja Jagani

Diego Molina

Diego Molina

Boni García

Boni García

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

David Burns

David Burns

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy testing!

Selenium 4.19 Released!

Today we’re happy to announce that Selenium 4.19 has been released!

We’re very happy to announce the release of Selenium 4.19.0 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: v121, v122, and v123 (Firefox still uses v85 for all versions)
  • Thanks to Selenium Manager’s records usage, we know Selenium has at least 1.8M active users in the last 30 days!
  • Java and JavaScript keep adding more WebDriver BiDi features.
  • The WebDriver BiDi features in Java have a new home, read it at Puja’s blog post.

Noteworthy changes per language

  • Java
    • se:bidi was removed from the session response when starting a Grid session, as webSocketUrl is enough.
    • Memory allocation and thread handling was improved in Grid.
    • Add missing event handlers for TargetLocator interface in WebDriverListener.
    • Several BiDi additions: adding setFiles command of the Input Module, between others.
    • See all changes

  • JavaScript
    • Several BiDi additions: adding setFiles command of the Input Module, between others.
    • See all changes

  • .NET
    • The ChromiumDriverService.AllowedIPAddresses name was corrected
    • It is now possible to set timeouts via capabilities
    • See all changes

  • Python
    • More network interfaces were added to detect lan ip
    • The install_addon() (Firefox extensions) was improved to take into account dir paths with trailing slashes
    • Improvements for type parameters
    • See all changes


  • Rust
    • Improving how MS Edge is downloaded
    • Fix how MS Edge is managed in RPM-based Linux
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Adam Dangoor

Adam Dangoor

Agustin Pequeno

Agustin Pequeno

Scott Babcock

Scott Babcock

Jani Hautakangas

Jani Hautakangas

Selenium Docs & Website

Amar Deep Singh

Amar Deep Singh

Mohammad Monfared

Mohammad Monfared

Docker Selenium

Viet Nguyen Duc

Viet Nguyen Duc

Cedric Roijakkers

Cedric Roijakkers

Maxim Manuylov

Maxim Manuylov

Mårten Svantesson

Mårten Svantesson

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

Puja Jagani

Puja Jagani

Diego Molina

Diego Molina

Boni García

Boni García

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

David Burns

David Burns

Stay tuned for updates by following SeleniumHQ on X (Formerly Twitter) or LinkedIn!

Happy testing!

Update imports to use BiDi Java

This blog post discusses the rationale behind the breaking change in Java BiDi implementation and the changes users will have to make.

What part of the code base is impacted?

Selenium WebDriver BiDi APIs in Java bindings are impacted.

What is impacted by the breaking change?

The WebDriver BiDi APIs stay as they are, so you can continue to use them. However, the import statements need to be updated.

What is the breaking change?

The import statements need to be updated when using the BiDi APIs.

Before Selenium 4.19:

import org.openqa.selenium.bidi.LogInspector;
import org.openqa.selenium.bidi.BrowsingContextInspector;
import org.openqa.selenium.bidi.Input;
import org.openqa.selenium.bidi.Script;
import org.openqa.selenium.bidi.Network;

After Selenium 4.19 and above:

import org.openqa.selenium.bidi.module.LogInspector;
import org.openqa.selenium.bidi.module.BrowsingContextInspector;
import org.openqa.selenium.bidi.module.Input;
import org.openqa.selenium.bidi.module.Script;
import org.openqa.selenium.bidi.module.Network;

Why the breaking change?

Selenium is actively working to implement the W3C BiDi. The long-term goal of W3C BiDi is to port all W3C WebDriver Classic APIs to use the WebDriver BiDi APIs under the hood. When browsingContext.locateNodes command, which is the BiDi counterpart of findElements command, was introduced, the major goal was to ensure that the ’locateNodes’ command returns a WebElement. This would be make the porting smoother in the future and allows users to continue calling APIs of the WebElement.

During the implementation, a circular dependency was encountered in the underlying build tool Bazel. The solution to this was to follow the best practices of Bazel.

So, the W3C BiDi related classes of a module were grouped into Bazel package. The classes that themselves call commands or events were all grouped under a package named ‘module’. Thus, following the recommended practice and avoiding Bazel’s circular dependency proved to be a win-win solution.

Summary

The W3C BiDi protocol is in under development, and parallelly browsers and clients are working to add the complementary APIs. While Selenium works on implementing it, the protocol is constantly changing, with new modules or APIs being added or existing ones being updated. While the team strives to avoid breaking changes and deprecate APIs for at least 2 versions before removal, it can be challenging to adhere to this for some changes, such as the one described in this blog post.

Selenium 4.18 Released!

Today we’re happy to announce that Selenium 4.18 has been released!

We’re very happy to announce the release of Selenium 4.18.0 and 4.18.1 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: v120, v121, and v122 (Firefox still uses v85 for all versions)
  • Selenium Manager records usage has been decreased to reduce impact on users.
  • Chrome headless changed the name of the browser to reflect that it is not actually chrome; Selenium now handles this seamlessly, but you should still switch to --headless=new (see: Headless is going away)

Noteworthy changes per language

  • Java
    • Enabling Grid to use self-signed certificate for debugging
    • Added explicit target locator events to the listener support classes in WebDriverListener.
    • Add missing event handlers for TargetLocator interface in WebDriverListener.
    • Several BiDi additions: Browsing context destroyed event, Network intercept commands, command continuewithAuth, between others.
    • See all changes

  • JavaScript
    • Several BiDi additions: Browsing context destroyed event, realm destroyed event, command continuewithAuth, between others.
    • See all changes

  • .NET
    • Fix protocol cdp version for RemoteWebDriver.
    • Fix network response data encoding.
    • Explicitly support passing the full path to driver in Service constructor
    • See all changes



  • Rust
    • Add timestamps to Selenium Manager logs
    • Selenium Manager decreases frequency of statistics reporting
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Manuel Blanco

Manuel Blanco

Oleg Ridchenko

Oleg Ridchenko

Simon Perepelitsa

Simon Perepelitsa

Simon K

Simon K

Valery Yatsynovich

Valery Yatsynovich

Selenium Docs & Website

Michal Nowierski

Michal Nowierski

Mohammad Monfared

Mohammad Monfared

我的饭

我的饭

Nikolay Borisenko

Nikolay Borisenko

Docker Selenium

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium 4.17 Released!

Today we’re happy to announce that Selenium 4.17 has been released!

We’re very happy to announce the release of Selenium 4.17.0 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: v119, v120, and v121 (Firefox still uses v85 for all versions)
  • Selenium Manager records usage set environment variable SE_AVOID_STATS to "true" to avoid sending information.
  • Chrome headless changed the name of the browser to reflect that it is not actually chrome; Selenium now handles this seamlessly, but you should still switch to --headless=new (see: Headless is going away)

Noteworthy changes per language

  • Java
    • Remove deprecated event listener classes; update to EventFiringDecorator and WebDriverListener classes
    • Allow disabling Grid UI
    • Deprecated FirefoxBinary class and legacy Error Codes
    • Deprecated HTML5 features for offline storage, location, and network connection
    • No longer accepting session requests with desiredCapabilities keyword
    • See all changes

  • JavaScript
    • Remove deprecated headless methods and associated references
    • Implemented remote file downloading
    • See all changes

  • .NET
    • Improvements to the new logging implementation
    • Removed previously deprecated code
    • See all changes

  • Python
    • Updated WPEWebKit support
    • Removed previously deprecated code
    • Deprecated FirefoxBinary and several outdated FirefoxProfile methods
    • See all changes


  • Rust
    • Use latest browser from cache when browser path is not discovered
    • Throw a descriptive message when error parsing JSON from response
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Andrei Solntsev

Andrei Solntsev

James Braza

James Braza

Lauro Moura

Lauro Moura

Valery Yatsynovich

Valery Yatsynovich

Viet Nguyen Duc

Viet Nguyen Duc

Henrik Skupin

Henrik Skupin

Selenium Docs & Website

Yevgeniy Shunevych

Yevgeniy Shunevych

Docker Selenium

Auto81

Auto81

Amar Deep Singh

Amar Deep Singh

Viet Nguyen Duc

Viet Nguyen Duc

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium Vs … blog posts

This blog post discusses the click bait posts out there comparing selenium, cypress, and playwright. How none of these are meaningful or helpful.

The easiest way to clickbait a blog post about automated testing is to compare Selenium against another tool in the space with a catchy title especially when it talks down about the incumbent.

Unfortunately, this can lead to muddying the waters of which features are available in any of the products out there especially when we compare apples to apples.

Selenium has always been a great tool for browser automation. Fortunately for the project, it has become the tool of choice for testing web applications for nearly 2 decades. The area this project has focused on is building out the hard parts of browser automation that are increasingly difficult. Stable APIs and scalability of the infrastructure to run Selenium has always been the priority of the project. It hasn’t focused on how people test with it because there are very good test frameworks out there and having to do it for 5 different languages is a non-trivial amount of engineering effort.

However, some particular misconceptions regularly reappear across these blog posts.

It’s too hard to set up browsers and drivers compared to Playwright and Cypress

This used to be true in the past as you had to download the drivers. This wasn’t too bad for GeckoDriver and SafariDriver as they could handle browser upgrades gracefully. On the other hand, you need to update the drivers for Chromium-based browser for every new release.

For over a year now, Selenium handles this automatically. If it can’t find a ChromeDriver or EdgeDriver, it will download it using Selenium Manager. Since its first release it has improved a lot and it is now probably the best in class since the latest versions of Selenium will even download browsers if it can and use that. Compared to Playwright and Cypress you don’t need to update your dependency on Selenium to update browsers and drivers, you still use the same browsers as your customers, and switching versions becomes a breeze: you don’t also have to change the test framework you’re using. And, let’s not forget that it uses the browser that Google recommends you use for testing.

Setting up a test runner is hard work where Playwright and Cypress have it built in…

Well… maybe? Setting up E2E test frameworks with Selenium isn’t as difficult as some might suggest. The hard part really is making sure that the driver is in the right place and we’ve solved that as discussed above. Once that’s done, Selenium’s approach allows you to use whichever test runner you’re most comfortable with. If you’d like a “batteries included” approach, with Selenium tightly integrated with the test runner, then one of the many projects that use Selenium, such as SeleniumBase, Nightwatch, Serenity, and so on, might be the right tool for you.

One thing to note is that Playwright is the only multi-language browser automation framework like Selenium. However, if you don’t use TypeScript or JavaScript you will still need to do the setup of the test runner yourself. Some testing frameworks have plugins that automatically set up the fixtures you might need. In the JavaScript/TypeScript space if you really need a built-in test runner there are downstream projects like NightwatchJS and tangential projects like WebdriverIO. Downstream projects use our libraries and tangential projects have their own libraries but still follow the WebDriver standard.

Playwright and Cypress can do network interception and allow me to write event-driven code unlike Selenium

Selenium has been able to offer this since Selenium 4 came out. It’s so good that even Playwright suggest you use it for scaling your tests. The Selenium Project won’t be removing this anytime soon as we are dependent on WebDriver BiDi specification being implemented for those features to replace them. Even then Selenium has a history of trying to make sure that upgrades don’t break anything without sufficient warning. It’s why each language provides high-level wrappers, such as the NetworkInterceptor, that isolate your tests from the underlying technology being used.

Summary

As we have seen from the above Selenium is still as good as the products out there. One thing that is different for Selenium from Cypress or Playwright is that we’re a volunteer-driven project and not commercially backed. Want to help us out? Why not write a blog post about how you’re using the features above or post on social media how these features make your lives easier?

Blog Posts - 2023

Removal of AbstractEventListener + EventFiringWebDriver + WebDriverEventListener

This blog will go over some examples on how to transition code that uses the aforementioned classes.

Upgrading to WebDriverListener and EventFiringDecorator

Decorating the webdriver

new EventFiringWebDriver(driver); // Old approach
new EventFiringDecorator().decorate(driver); // New approach

Implementing method wrappers

One may find the need to have their own custom implementations be used for underlying decorated method calls. An example may be wanting to use your own findElement implementation to store metadata from web elements. One can go down a deep rabbit hole of decorators ( extending WebDriverDecorator and such ), so to keep things simple we will extend EventFiringDecorator since we want a single decorator to handle all our listener events.

public class WebDriverWrapper implements WebDriver {
    private final WebDriver driver;
    WebDriverWrapper(WebDriver driver) {
        this.driver = driver;
    }
    // custom implementation goes here
    @Override
    public WebElement findElement(final By by) {
        // custom implementation goes here
        return driver.findElement(by);
    }
}

public class testDecorator extends EventFiringDecorator<WebDriver> {

    @Override
    public Object call(Decorated<?> target, Method method, Object[] args) throws Throwable {
        String methodName = method.getName();
        if ("findElement".equals(methodName)) {
            WebDriverWrapper newDriver = new WebDriverWrapper((WebDriver) target.getOriginal());
            return newDriver.findElement((By) args[0]);
        }
        return super.call(target, method, args);
    }
}

Some notes about the above example, we are only overriding the ‘general’ call method and checking the method name against every call made. Without going too deep decorators one can also override calls made by class instances to offer a more targeted approach. Just to expose some more functionality, let’s modify our example. We can modify WebElement context since we might care about child elements and elements found by WebDriver ( WebDriver and WebElement both extend the SearchContext ).

public class WebElementWrapper implements WebElement {
    private final WebElement element;
    WebElementWrapper(WebElement element) {
        this.element = element;
    }
    @Override
    public WebElement findElement(final By by) {
        // custom implementation goes here
        return element.findElement(by);
    }
}

public class WebElementDecorator extends EventFiringDecorator<WebDriver> {
    @Override
    public Decorated<WebElement> createDecorated(WebElement original) {
        return new DefaultDecorated<>(original, this) {
            @Override
            public Object call(Method method, Object[] args) throws Throwable {
                String methodName = method.getName();
                if ("findElement".equals(methodName)) {
                    // custom implementation goes here
                    WebElementWrapper element = new WebElementWrapper(getOriginal());
                    return element.findElement((By) args[0]);
                }
                return super.call(method, args);
            }
        };
    }
}

In the sample above, we are still doing a very similar approach of overriding the call method but now we are also targeting WebElement instances.

Registering Listeners

new EventFiringWebDriver(driver).register(listener1).register(listener2); // Old approach
new EventFiringDecorator(listener1, listener2); // New approach

Listening to Events

A quality of life change that is featured in WebDriverListener class is the use of ‘default’. In Java, the default keyword, when used in the context of an interface method, indicates that the method has a default implementation. If a class implementing the interface chooses not to override the method, it will inherit the default implementation. This change allows for splitting up listeners without needing to implement the unnecessary methods you don’t need or care about.

Listening to specific events using before/after methods call

// Old approach
public class AlertListener implements WebDriverEventListener {
    @Override
    public void beforeAlertAccept(final WebDriver driver) {
        // custom implementation goes here
    }
// implement every method in interface
}

// New approach
public class AlertListener implements WebDriverListener {
    @Override
    public void beforeAccept(Alert alert) {
        // custom implementation goes here
    }
// does not need to implement every method in interface
}

Listening to Generic Events

A change that was brought on is the ability to listen to generic events. One use case is logging information in a parallelized test suite. Rather than create a listener and override every method to add a simple log statement, there is now a simpler alternative of overriding one method call. Below I override beforeAnyCall, but afterAnyCall exists as well which also has the results of the call to the decorated method.

public class Listener implements WebDriverEventListener {
    private static final Logger LOGGER = Logger.getLogger(Listener.class.getName());

    @Override
    public void beforeAnyCall(Object target, Method method, Object[] args) {
        logger.debug("Thread: " + Thread.currentThread().getName() +
                " | Method Name: " + method.getName() +
                " | Method Args: " + Arrays.toString(args));
    }
}

There also was an addition listening to more specific generic events. Going back to the logging example, beforeAnyCall is a good method for debugging information or tracking the actions of a thread but might generate too much noise. In the same use case we might only care about WebDriver or WebElement calls. One can override instances of WebDriver and derived objects( WebElement, Alert, etc.) for before/after events.

public class Listener implements WebDriverEventListener {
    private static final Logger LOGGER = Logger.getLogger(Listener.class.getName());

    @Override
    public void beforeAnyWebDriverCall(WebDriver driver, Method method, Object[] args) {
        logger.debug("Thread: " + Thread.currentThread().getName() +
                " | Method Name: " + method.getName() +
                " | Method Args: " + Arrays.toString(args));
    }

    @Override
    public void beforeAnyWebElementCall(WebElement element, Method method, Object[] args) {
        logger.debug("Thread: " + Thread.currentThread().getName() +
                " | Method Name: " + method.getName() +
                " | Method Args: " + Arrays.toString(args));
    }
}

So that’s some general examples on how to transition your code! Happy testing!

Selenium 4.16 Released!

Today we’re happy to announce that Selenium 4.16 has been released!

We’re very happy to announce the release of Selenium 4.16.0 for Javascript, Ruby, Python, and Selenium 4.16.1 for .NET, Java and the Grid. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v118, v119, and v120 (Firefox still uses v85 for all versions)
  • Users may now opt in to Selenium Manager by specifying a browserVersion that is different from what is found on the System
  • All bindings now log Selenium information

Noteworthy changes per language

  • Java
    • Improve Grid usage of Selenium Manager by always allowing browser version of “stable”
    • Implement CDP script pinning for Chrome-based browsers
    • Allow reusing devtools instance with JDK 11 client
    • Moved org.openqa.selenium.remote.http.jdk to selenium-http
    • See all changes


  • .NET
    • Allow overriding default Actions duration
    • Remove System.Drawing.Common as package dependency
    • See all changes

  • Python
    • Remove deprecated Safari parameters for reuse_service and quiet
    • Fix bug to allow Remote WebDriver to use custom Chrome-based commands
    • See all changes

  • Ruby
    • Added initial typing support with rbs files
    • Fix bug preventing Selenium Manager from working with Unix and Cygwin
    • See all changes

  • Rust
    • Use online mapping to discover proper geckodriver version
    • Fix webview2 support when browser path is set
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Agustin Pequeno

Agustin Pequeno

Anthony Sottile

Anthony Sottile

Dominik Stadler

Dominik Stadler

Johnny.H

Johnny.H

Manuel Blanco

Manuel Blanco

Matthew Kempkers

Matthew Kempkers

Nikhil Agarwal

Nikhil Agarwal

Daniel P. Purkhús

Daniel P. Purkhús

Viet Nguyen Duc

Viet Nguyen Duc

Henrik Skupin

Henrik Skupin

Selenium Docs & Website

Sparsh Kesari

Sparsh Kesari

Ed Manlove

Ed Manlove

Ronald Abegg

Ronald Abegg

Tamas Utasi

Tamas Utasi

Docker Selenium

Thabelo Ramabulana

Thabelo Ramabulana

Amar Deep Singh

Amar Deep Singh

Matt Colman

Matt Colman

Viet Nguyen Duc

Viet Nguyen Duc

Selenium Team Members

Thanks as well to all the team members who contributed to this release:

ian zhang

ian zhang

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Luis Correia

Luis Correia

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Novelties in Selenium Manager 0.4.15

Selenium Manager 0.4.15 is shipped with Selenium 4.15.0. This blog post summarizes the novelties introduced in this new release.

Support for Firefox ESR

Selenium Manager 0.4.15 includes support for Firefox Extended Support Release (ESR). This way, Firefox ESR can be automatically managed with Selenium using the label esr in the browser version. Bindings languages set this browser version (like other accepted labels for browser versions, such as stable, beta, dev, canary, and nightly) using a browser option called browserVersion.

Support for Edge WebView2

Selenium Manager 0.4.15 allows automated driver management for Microsoft Edge WebView2. WebView2 is a component that enables embedding web technologies (HTML, CSS, and JavaScript) in native apps, using Microsoft Edge as the rendering engine to display web content. At the time of this writing, WebView2 is available in Windows.

This way, Selenium Manager allows detecting WebView2 in Windows machines and resolving the proper msedgedriver binary for it. Internally, Selenium Manager uses the browser name webview2 to handle WebView2, detecting its version based on registry queries. In the bindings, WebView2 is enabled through a browser option called useWebView.

Support for mirror repositories

Selenium Manager 0.4.15 includes a couple of new arguments in Selenium Manager for specifying custom URLs for drivers and browsers (instead of the default ones, such as chromedriver, Chrome for Testing, etc.). These arguments are:

  • --driver-mirror-url: Mirror URL for driver repositories.
  • --browser-mirror-url: Mirror URL for browser repositories.

As usual, these values can be configured using the config file or environment variable (e.g., SE_DRIVER_MIRROR_URL or SE_BROWSER_MIRROR_URL). Moreover, there are browser and driver-specific configuration keys, i.e. chrome-mirror-url, firefox-mirror-url, edge-mirror-url, etc. (in the configuration file), and SE_CHROME_MIRROR_URL, SE_FIREFOX_MIRROR_URL, SE_EDGE_MIRROR_URL, etc. (as environment variables).

Here is an example of this feature calling Selenium Manager from the shell:

./selenium-manager --debug --browser chrome --browser-version 100 --avoid-browser-download --driver-mirror-url=https://registry.npmmirror.com/-/binary/chromedriver/
DEBUG   chromedriver not found in PATH
DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
DEBUG   Output: "\r\r\n\r\r\nVersion=117.0.5938.150\r\r\n\r\r\n\r\r\n\r"
DEBUG   Detected browser: chrome 117.0.5938.150
DEBUG   Discovered chrome version (117) different to specified browser version (100)
DEBUG   Required driver: chromedriver 100.0.4896.60
DEBUG   Downloading chromedriver 100.0.4896.60 from https://registry.npmmirror.com/-/binary/chromedriver/100.0.4896.60/chromedriver_win32.zip
INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\100.0.4896.60\chromedriver.exe
INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe

Debug release

To troubleshoot Selenium Manager in complex error cases, it is interesting to capture the backtrace. But to do that, the Selenium Manager binaries must be created with the debug symbols. Since the resulting binaries with debug symbols are much larger than the default release artifacts, we generate them on demand using a custom workflow in GitHub Actions. This way, we have included a checkbox in the workflow for triggering the Selenium Manager build. When this checkbox is enabled when building Selenium Manager, the debug symbols will be added to the resulting binaries (for Windows, Linux, and macOS). All in all, these binaries will be used on demand to troubleshoot complicated problems.

Selenium Manager workflow screenshot

Selenium Manager in cache (only for Java bindings)

As of version 4.15.0 of the Selenium Java bindings, the Selenium Manager binary is extracted and copied to the cache folder. For instance, the Selenium Manager binary shipped with Selenium 4.15.0 is stored in the folder ~/.cache/selenium/manager/0.4.15). This feature will allow direct manipulation of Selenium Manager as a CLI tool, for instance, for troubleshooting. This feature is only available for Java bindings since Java is the only language that does not have direct access to the Selenium Manager binaries (since they are released compressed into the JAR files of the selenium-java artifacts).

Next steps

Look at Selenium Manager documentation for a detailed description of its features. Also, you can trace the status of the development activities in the Selenium Manager project dashboard.

Selenium 4.15 Released!

Today we’re happy to announce that Selenium 4.15 has been released!

We’re very happy to announce the release of Selenium 4.15.0 for Java, Javascript, Ruby, .NET and the Grid; 4.15.2 for Python. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v117, v118, and v119 (Firefox still uses v85 for all versions)
  • Implemented Remote File Downloads
  • Selenium Manager supports webview2, Firefox ESR and Driver and Browser Mirrors

Noteworthy changes per language

  • Java
    • Numerous BiDi implementations
    • Remove CDP version dependencies in the server
    • Selenium Manager now gets copied to cache directory instead of being used from temp directory
    • See all changes

  • JavaScript
    • Replaced calls to console.log with managed loggers
    • Added several BiDi methods
    • See all changes

  • .NET
    • Improved nuget packages metadata
    • Allows starting service object directly
    • See all changes



  • Rust
    • Included debug and split-debuginfo in dev profile
    • Changed windows target to stable-i686-pc-windows-gnu
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Selenium Docs & Website

Afranio Alves

Afranio Alves

Anselmo Pfeifer

Anselmo Pfeifer

Luis Correia

Luis Correia

Sang Nguyen

Sang Nguyen

Vicente Sombo

Vicente Sombo

sripriyapkulkarni

sripriyapkulkarni

Zachary Zollman

Zachary Zollman

Vinicius Caetano

Vinicius Caetano

Docker Selenium

Luis Correia

Luis Correia

Mårten Svantesson

Mårten Svantesson

Matt Colman

Matt Colman

Philippe GRANET

Philippe GRANET

sebastian haas

sebastian haas

Viet Nguyen Duc

Viet Nguyen Duc

Thanks as well to all the Selenium Team Members who contributed to this release:

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium Open Space Conference Oct 28th

Free and online open space conference for Selenium community on Oct 28th, Selenium’s 19th birthday

In less than two weeks, Selenium project is holding space for free and online community meetup, the inaugural Selenium Open Space Conference. Open space conferences are ones where everyone is a speaker, and we co-create our agenda for conversations, questions or answers, workshops, sharing and learning.

We start our 24 hour event at time of 19 years from the tracked Selenium release announcement. We split the day into four segments to facilitate the global community. We set up an event site, and a mechanism to enroll: by pull request or issue to the site in github.

With enrollment, you can already tell if you have a topic in mind you would like to host, and see some (not all!) of the sessions people have in mind for the day.

To run the event, we set up Welo and Miro. Our space has 11 track rooms that each fit up to 150 people regardless of appearance, and we build our agenda on Miro during marketplace of ideas, one for each four time segments. Welo Miro

Welcome from the organizers, would be lovely to see you join us all.

Status of Selenium Manager in October 2023

This blog post summarizes the novelties introduced in the latest two versions of Selenium Manager (i.e., 0.4.13 and 0.4.14).

Selenium Manager continues its development plan. As usual, in the latest releases, i.e., 0.4.13 and 0.4.14 (shipped with Selenium 4.13 and 4.14, respectively), we have fixed the problems reported so far. In these releases, the issues were related to the extraction of the Firefox binary from the self-extracting archive (SFX) in Windows and the advanced configuration through the configuration file (se-config.toml) and environment variables (e.g., SE_BROWSER). Moreover, these recent releases include new features, as explained below.

Search for the best driver possible in the cache

By default, Selenium Manager needs to request online endpoints (such as Chrome for Testing JSON API or Firefox product-details JSON API to discover, download, and maintain the proper drivers and browsers that Selenium requires. The downloaded artifacts are stored in the cache (by default, ~/.cache/selenium) and reused from there.

To make the driver resolution procedure more robust, as of version 0.4.13, Selenium Manager includes a new feature for locating the drivers in the cache when some error happens. This way, when a network request (or other function) fails in Selenium Manager, it tries to locate the driver in the cache. This characteristic aims to provide a best-effort solution for creating a Selenium session properly, which is the final objective of Selenium Manager. Also, this feature will help to provide a better experience for locating drivers for Selenium Grid.

Locating Selenium Manager binary with an environment variable

The next feature related to Selenium Manager 0.4.13 has been implemented in the Selenium bindings (i.e., Java, JavaScript, Python, .Net, and Ruby). As of Selenium 4.13.0, the Selenium bindings allow locating the Selenium Manager binary using an environment variable called SE_MANAGER_PATH. This way, if this variable is set, the bindings will use its value as the Selenium Manager path in the local filesystem. This feature will allow users to provide a custom compilation of Selenium Manager, for instance, if the default binaries (compiled for Windows, Linux, and macOS) are incompatible with a given system (e.g., ARM64 in Linux).

Automated Edge management

Selenium Manager 0.4.14 includes automated Edge management. This browser is the last we have in mind for this feature, after Chrome and Firefox.

This feature has been implemented in the same way that Chrome and Firefox for macOS and Linux. In other words, Selenium Manager allows to automatically manage (i.e., discover, downloads, and cache) the latest Edge versions (i.e., stable, beta, dev, canary) and old versions (e.g., 115, 116, etc.). The downloaded binaries, as usual, are stored in the Selenium cache. The following output commands showcase this feature in macOS (first snipped) and Linux (second snippet):

./selenium-manager --browser edge --debug --force-browser-download

DEBUG	msedgedriver not found in PATH
DEBUG	Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG	Required browser: edge 117.0.2045.40
DEBUG	Downloading edge 117.0.2045.40 from https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/6e65d9ef-0bb9-4636-8d9e-2b1b9d16149d/MicrosoftEdge-117.0.2045.40.pkg
DEBUG	edge 117.0.2045.40 has been downloaded at /Users/boni/.cache/selenium/edge/mac64/117.0.2045.40/Microsoft Edge.app/Contents/MacOS/Microsoft Edge
DEBUG	Reading msedgedriver version from https://msedgedriver.azureedge.net/LATEST_RELEASE_117_MACOS
DEBUG	Required driver: msedgedriver 117.0.2045.40
DEBUG	Downloading msedgedriver 117.0.2045.40 from https://msedgedriver.azureedge.net/117.0.2045.40/edgedriver_mac64.zip
INFO	Driver path: /Users/boni/.cache/selenium/msedgedriver/mac64/117.0.2045.40/msedgedriver
INFO	Browser path: /Users/boni/.cache/selenium/edge/mac64/117.0.2045.40/Microsoft Edge.app/Contents/MacOS/Microsoft Edge
./selenium-manager --browser edge --debug --browser-version beta

DEBUG	msedgedriver not found in PATH
DEBUG	edge not found in PATH
DEBUG	edge beta not found in the system
DEBUG	Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG	Required browser: edge 118.0.2088.11
DEBUG	Downloading edge 118.0.2088.11 from https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-beta/microsoft-edge-beta_118.0.2088.11-1_amd64.deb
DEBUG	edge 118.0.2088.11 has been downloaded at /home/user/.cache/selenium/edge/linux64/118.0.2088.11/msedge
DEBUG	Reading msedgedriver version from https://msedgedriver.azureedge.net/LATEST_RELEASE_118_LINUX
DEBUG	Required driver: msedgedriver 118.0.2088.11
DEBUG	Downloading msedgedriver 118.0.2088.11 from https://msedgedriver.azureedge.net/118.0.2088.11/edgedriver_linux64.zip
INFO	Driver path: /home/user/.cache/selenium/msedgedriver/linux64/118.0.2088.11/msedgedriver
INFO	Browser path: /home/user/.cache/selenium/edge/linux64/118.0.2088.11/msedge

Nevertheless, this feature cannot be implemented similarly for Windows. The reason is that the Edge installer for Windows is distributed as a Microsoft Installer (MSI) file, designed to be executed with administrator rights. We tried to extract the Edge binaries from that MSI file. Still, it seems not possible (see Stack Overflow post that summarized the problem). All in all, the only solution we found is to install Edge in Windows using the MSI installer, and so, administrator grants are required.

This way, when Edge is attempted to be installed with Selenium Manager in Windows with a non-administrator session, a warning message will be displayed as follows:

./selenium-manager --debug --browser edge --browser-version beta

DEBUG   msedgedriver not found in PATH
DEBUG   edge not found in PATH
DEBUG   edge beta not found in the system
WARN    There was an error managing edge (edge can only be installed in Windows with administrator permissions); using driver found in the cache
INFO    Driver path: C:\Users\boni\.cache\selenium\msedgedriver\win64\118.0.2088.17\msedgedriver.exe

But when Selenium Manager is executed with administrator grants in Windows, it will be able to automatically discover, download, and install Edge (stable, beta, dev, canary, and older versions):

./selenium-manager --debug --browser edge --browser-version beta

DEBUG   msedgedriver not found in PATH
DEBUG   edge not found in PATH
DEBUG   edge beta not found in the system
DEBUG   Checking edge releases on https://edgeupdates.microsoft.com/api/products
DEBUG   Required browser: edge 118.0.2088.17
DEBUG   Downloading edge 118.0.2088.17 from https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/7adec542-f34c-4dea-8e2a-f8c6fab4d2f3/MicrosoftEdgeBetaEnterpriseX64.msi
DEBUG   Installing MicrosoftEdgeBetaEnterpriseX64.msi
DEBUG   edge 118.0.2088.17 is available at C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe
DEBUG   Required driver: msedgedriver 118.0.2088.17
DEBUG   msedgedriver 118.0.2088.17 already in the cache
INFO    Driver path: C:\Users\boni\.cache\selenium\msedgedriver\win64\118.0.2088.17\msedgedriver.exe
INFO    Browser path: C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe

Chromium support

Chromium is released as portable binaries, distributed as zip files for Windows, Linux, and macOS (see Chromium download page). Nevertheless, there is a case in which Chromium is actually installed in the system. This happens in Linux systems when installing Chromium through package managers like atp or snap, for instance, as follows:

sudo snap install chromium

Therefore, as of 0.4.14, Selenium Manager looks for the Chromium binaries in the PATH when Chrome is not discovered. The following snippet showcases how this feature works in a Linux machine in which Chrome is not available, but Chromium has been installed through snap:

./selenium-manager --browser chrome --debug
DEBUG   chromedriver not found in PATH
DEBUG   Found chromium in PATH: /snap/bin/chromium
DEBUG   Running command: /snap/bin/chromium --version
DEBUG   Output: "Chromium 117.0.5938.149 snap"
DEBUG   Detected browser: chrome 117.0.5938.149
DEBUG   Required driver: chromedriver 117.0.5938.149
DEBUG   chromedriver 117.0.5938.149 already in the cache
INFO   Driver path: /home/user/.cache/selenium/chromedriver/linux64/117.0.5938.149/chromedriver
INFO   Browser path: /snap/bin/chromium

Next steps

We are close to implementing all the features initially planned for Selenium Manager. You can trace the status of the development activities in the Selenium Manager project dashboard.

Selenium 4.13 Released!

Today we’re happy to announce that Selenium 4.13 has been released!

We’re very happy to announce the release of Selenium 4.13.0 for Java, Python, Javascript and the Grid; and 4.13.1 for .NET and Ruby. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v115, v116, and v117 (Firefox still uses v85 for all versions)
  • Reminder: this is the last version of Selenium with Java 8 support. Please upgrade to at least Java 11.
  • The location of Selenium Manager can be set manually in all bindings with SE_MANAGER_PATH environment variable.

Relevant improvements per language

  • Java
    • Deprecated setScriptTimeout(), use scriptTimeout()
    • Fixed several bugs related to logging driver output
    • Removed a number of previously deprecated methods
    • See all changes


  • .NET
    • Users can now start a service before creating the driver object instance
    • Removed Microsoft.IdentityModel.Tokens as dependency
    • Fixed several bugs and made improvements to DevTools implementations
    • See all changes

  • Python
    • Removed deprecated headless methods
    • Fixed bug preventing using performance logging in Chrome and Edge
    • See all changes

  • Ruby
    • Fixed bug preventing using performance logging in Chrome and Edge
    • Users can now start a service before creating the driver object instance
    • Removed deprecated driver extensions for location and network connection
    • See all changes

  • Rust
    • Various bug fixes for improved Selenium Manager functionality
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Krishna Suravarapu

Krishna Suravarapu

Sean Gomez

Sean Gomez

Manuel Blanco

Manuel Blanco

Michael Mintz

Michael Mintz

Nikolay Borisenko

Nikolay Borisenko

Sandeep Suryaprasad

Sandeep Suryaprasad

Scott Babcock

Scott Babcock

Selenium Docs & Website

Sparsh Kesari

Sparsh Kesari

eaccmk

eaccmk

Nikolay Borisenko

Nikolay Borisenko

Sachin Kumar

Sachin Kumar

Docker Selenium

Amar Deep Singh

Amar Deep Singh

Luis Correia

Luis Correia

William Lacerda

William Lacerda

Thanks as well to all the Selenium Team Members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium 4.14 Released!

Today we’re happy to announce that Selenium 4.14 has been released!

We’re very happy to announce the release of Selenium 4.14.0 for Java, Python, Javascript, Ruby, .NET and the Grid. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v116, v117, and v118 (Firefox still uses v85 for all versions)
  • If you are using Java, this release requires Java 11! (see post on Java 8 support)
  • Selenium supports automatic downloading and management of the Microsoft Edge browser

Relevant improvements per language

  • Java
    • Removed support for Async HTTP Client, the default is now the default Java library
    • Allow setting SSL context in client config for HttpClient
    • Several logging message improvements
    • See all changes


  • .NET
    • Saving screenshots with different image formats is deprecated
    • Removed IdentityModel dependency
    • See all changes

  • Python


  • Rust
    • Automated Edge management
    • Recognizes and handles webview2
    • Locates existing Chromium browsers when specifying Chrome
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Alexey Pelykh

Alexey Pelykh

Manuel Blanco

Manuel Blanco

Scott Babcock

Scott Babcock

Selenium Docs & Website

ian zhang

ian zhang

Docker Selenium

Amar Deep Singh

Amar Deep Singh

Ismael Onilearan

Ismael Onilearan

Cody Lent

Cody Lent

William Lacerda

William Lacerda

Thanks as well to all the Selenium Team Members who contributed to this release:

Boni García

Boni García

Sri Harsha

Sri Harsha

Nikolay Borisenko

Nikolay Borisenko

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Simon K

Simon K

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium 4.12.0 Released!

Today we’re happy to announce that Selenium 4.12.0 has been released!

We’re very happy to announce the release of Selenium 4.12.0 for Java, .NET, Ruby, Python, and Javascript as well as the Grid. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v114, v115, and v116 (Firefox still uses v85 for all versions)
  • Quite a few fixes for Selenium Manager, and now with Firefox browser management! Read about all the new Selenium Manager features
  • .NET only explicitly targets netstandard2.0
  • Python no longer supports Python 3.7
  • Ruby no longer supports :capabilities arguments for local drivers (must use :options now)

Relevant improvements per language

  • Java
    • Several improvements in working with Selenium Manager
    • Allow deleting remote downloaded files from grid (#12501)
    • Removed deprecated UNEXPECTED_ALERT_BEHAVIOR, BROWSER_LOGFILE, createPointerDown, createPointerUp and JWP /file endpoint
    • Deprecated disableNativeEvents and Remote Response status field
    • See all changes




  • Ruby
    • Fix bug preventing good error messages in Selenium Manager when stdout empty
    • Fix bug with Firefox not loading net/http library by default (#12506)
    • See all changes

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Nikolay Borisenko

Nikolay Borisenko

Sandeep Suryaprasad

Sandeep Suryaprasad

Scott Babcock

Scott Babcock

Selenium Docs & Website

Andrii Maliuta

Andrii Maliuta

Andrei Solntsev

Andrei Solntsev

Nikolay Borisenko

Nikolay Borisenko

Tahanima Chowdhury

Tahanima Chowdhury

Veerendra Jana

Veerendra Jana

Docker Selenium

Mario Segura

Mario Segura

Thanks as well to all the Selenium Team Members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Jonathan Lipps

Jonathan Lipps

Luke Hill

Luke Hill

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Simon K

Simon K

Titus Fortner

Titus Fortner

Stay tuned for updates by following SeleniumHQ!

Happy testing!

What's new in Selenium Manager 0.4.12, shipped with Selenium 4.12.0

Selenium Manager 0.4.12 is shipped with Selenium 4.12.0. This release aims to stabilize the features provided so far, delivering a new relevant characteristic: automated browser management for Firefox.

A new release of Selenium Manager is out. For this release, we made a relevant decision concerning the Selenium Manager versioning format. From now on, Selenium Manager will follow the same version as Selenium. Nevertheless, since Selenium Manager is still in beta, its major version is 0. Thus, Selenium 4.12.0 is shipped with Selenium Manager 0.4.12.

First, we made a substantial effort to stabilize the already available features on Selenium Manager. This way, the version includes several bug-fixing related to automated driver management or caching. You can find the details of the changes implemented in Selenium Manager 0.4.12 in the (newly created) changelog file.

Besides, for this release, we made a significant update to the documentation page of Selenium Manager. This page contains all the fine-grained information related to automated driver and browser management, configuration, etc. Also, it has several TL;DR summarizing the main ideas for the eager reader.

Automated Firefox management

After shipping automated browser management based on Chrome for Testing on the previous release, Selenium Manager 0.4.12 continues the job by providing automated Firefox management. This way, Selenium Manager 0.4.12 allows us to manage the different Firefox releases (for Windows, Linux, and macOS), making them seamlessly available for Selenium.

The procedure is the same as with Chrome. When Firefox is unavailable in the machine running Selenium, it is automatically discovered, downloaded, and cached by Selenium. If no version is specified, the latest stable Firefox release is managed by Selenium Manager. Besides, the bindings can use a browser option called browserVersion to specify a particular Firefox release (e.g., 114, 115, etc.). Finally, the label stable allows us to manage the current stable Firefox release explicitly, and the labels beta, dev, and nightly as used for unstable Firefox releases.

This feature is possible thanks to the remarkable work of the Firefox team by maintaining current and old releases in their public repository. Moreover, the Firefox version discovery in Selenium Manager is made thanks to the availability of the product-details JSON API, also maintained by the Firefox team.

Improved configuration

Custom setup is sometimes necessary for browser automation. For that reason, Selenium Manager already provides different features for rich configuration. Selenium Manager 0.4.12 extends this feature by delivering a new configuration argument called --cache-path. This argument allows changing the path of the local folder used to store downloaded assets (drivers and browsers) by Selenium Manager (by default, ~/.cache/selenium). As usual, this argument can also be changed by including an entry in the configuration file or using an environment variable (SE_CACHE_PATH). Regarding the former, the name of the configuration file has been renamed to se-config.toml in Selenium Manager 0.4.12. As usual, if you use this configuration file, it must be placed in the root of the cache folder.

Other changes

A minor change in Selenium Manager 0.4.12 is related to the metadata file, now called se-metadata.json. As usual, this file is stored in the root of the cache folder. This file contains versions discovered by Selenium Manager making network requests and the time-to-live (TTL) in which they are valid. Since the TTL for browsers and drivers is now the same concept, Selenium Manager unifies these two configuration elements (previously, browser_ttl and driver_ttl) in a single one called ttl (with a default value of 3600 seconds, i.e., 1 hour). For further details, visit the Selenium Manager page about caching.

Last but not least, the Selenium Manager binary compiled for macOS is universal, in the sense that it can be executed both in x64 and arm64 architectures out of the box. Previously, the binary was compiled for x64, and so, Rosetta should be available in arm64 macOS machines (i.e., M1 or M2). With the new Selenium Manager macOS binary, Rosetta is no longer mandatory.

Next steps

The next release of Selenium Manager will continue delivering automated browser management, this time for Edge, and other features. As usual, you can trace the work in progress in the Selenium Manager project dashboard.

Selenium 4.11.0 Released!

Today we’re happy to announce that Selenium 4.11.0 has been released!

We’re very happy to announce the release of Selenium 4.11.0 for Java, .NET, Ruby, Python, and Javascript as well as the Grid and Internet Explorer Driver. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v113, v114, and v115 (Firefox still uses v85 for all versions)
  • Support for Chrome for Testing (CfT) through Selenium Manager. Read more at the new Selenium Manager features blog post.
  • Selenium Manager now locates the browser driver binary on PATH or the configured path, checks for potential incompatibilities, and gives better warning and error messages.
  • Nightly builds are being pushed for Ruby and Java. Support for other languages is coming soon.
  • Ignore process id match when finding the window handle - IE Mode on Edge. (#12246) (#12279)

Relevant improvements per language

  • Java
    • Make user defined SlotMatcher used everywhere in Grid code (#12240)
    • Add support for FedCM commands (#12096)


  • .NET
    • Implementation of event wrapped shadow root element (#12073)
    • Allow setting a different pointer, keyboard, or wheel on input device (#11513)
    • Add move to location method to Actions (#11509)
    • Add support for Safari Technology Preview (#12342)
    • Fix error when we send non-base64 data for fetch command (#12431)
    • Fix continueResponse method in CDP (#12445)

  • Python
    • removed redundant attributes capabilities and set_capability in wpewebkit/options.py (#12169)
    • improve driver logging, implement log_output() for flexibility and consistency of driver logging (#12103)
    • let users pass service args to IE driver (#12272)
    • Expose WPEWebKitService and WebKitGTKService in the public API
    • Remove deprecated ActionChains.scroll(...)
    • Add creation flag for windows in selenium_manager (#12435)

  • Ruby
    • Made network interception threads fail silently (#12226)
    • Remove deprecated code (#12417)

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Michael Mintz

Michael Mintz

Nikolay Borisenko

Nikolay Borisenko

Sandeep Suryaprasad

Sandeep Suryaprasad

Hanbo Wang

Hanbo Wang

Sebastian Meyer

Sebastian Meyer

Daniel Brown

Daniel Brown

Vedanth Vasu Dev

Vedanth Vasu Dev

Bartek Florczak

Bartek Florczak

João Luca Ripardo

João Luca Ripardo

Debanjan Choudhury

Debanjan Choudhury

Christian Biesinger

Christian Biesinger

Sen ZmaKi

Sen ZmaKi

Selenium Docs & Website

Cristian Greco

Cristian Greco

Gayathri Rukmadhavan

Gayathri Rukmadhavan

Mikhail C.

Mikhail C.

nevinaydin

nevinaydin

Erick Ribeiro

Erick Ribeiro

Docker Selenium

Luis Correia

Luis Correia

alb3ric

alb3ric

Bartek Florczak

Bartek Florczak

Mårten Svantesson

Mårten Svantesson

wintersolutions

wintersolutions

Thanks as well to all the Selenium Team Members who contributed to this release:

Tamsil Sajid Amani

Tamsil Sajid Amani

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Titus Fortner

Titus Fortner

Simon Stewart

Simon Stewart

Boni García

Boni García

Puja Jagani

Puja Jagani

Simon K

Simon K

Alex Rodionov

Alex Rodionov

Krishnan Mahadevan

Krishnan Mahadevan

David Burns

David Burns

James Mortensen

James Mortensen

Stay tuned for updates by following SeleniumHQ!

Happy testing!

What's new in Selenium Manager with Selenium 4.11.0

Selenium 4.11.0 ships very relevant new features of Selenium Manager: support of Chrome for Testing (CfT) endpoints for chromedriver management and automated Chrome management (based also on CfT).

As of version 4.6.0, all releases of Selenium (Java, JavaScript, Python, Ruby, and .Net) are shipped with Selenium Manager. Selenium Manager is a binary tool (implemented in Rust) that provides automated driver management for Selenium. Selenium Manager is still in beta, although it is becoming a relevant component of Selenium.

So far, the main feature of Selenium Manager is called automated driver management. I use the term management for this feature (and not just download) since this process is broader and implies different steps:

  1. Browser version discovery. Selenium Manager discovers the browser version (e.g., Chrome, Firefox, Edge) installed in the machine that executes Selenium. For this step, shell commands are used (e.g., google-chrome --version).
  2. Driver version discovery. With the discovered browser version, the proper driver version is resolved. For this step, the online metadata maintained by the browser vendors (e.g., chromedriver, geckodriver, or msedgedriver) are used.
  3. Driver download. With the resolved driver version, the driver URL is obtained; with that URL, the driver artifact is downloaded, uncompressed, and stored locally.
  4. Driver cache. Uncompressed driver binaries are stored in a local cache folder (~/.cache/selenium). The next time the same driver is required, if the driver is already in the cache, it will be used from there.

Drivers on the PATH

Driver management through Selenium Manager is opt-in for the Selenium bindings. Thus, users can continue managing their drivers manually (putting the driver in the PATH or using system properties) or rely on a third-party manager to do it automatically. Selenium Manager only operates as a fallback: if no driver is provided, Selenium Manager will come to the rescue. Nevertheless, Selenium Manager also helps users to identify potential problems with the drivers on the PATH.

Let’s consider an example. Imagine you manually manage your chromedriver for your Selenium tests. When you carry out this management, the stable version of Chrome is 113, so you download chromedriver 113 and put it in your PATH. Your Selenium tests execute. Everything is fine. But the problem here is that Chrome is evergreen. This name refers to Chrome’s ability to upgrade automatically and silently to the next stable version when available. This feature is excellent for end-users but potentially dangerous for automated testing. Let’s go back to the example to discover it. Your local Chrome will eventually update to version 115. And that moment, your Selenium tests will be broken due to the incompatibility of the manually managed driver (113) and your Chrome (115). That day, your test dashboard will be red due to the following error message: “session not created: This version of ChromeDriver only supports Chrome version 113”.

This problem is the primary reason for the existence of the so-called driver managers. And as of Selenium 4.11, Selenium Manager helps to understand potential issues related to the drivers in the PATH. When an incompatible driver release is found in the PATH, a warning message like the following is displayed to the user:

WARN    The chromedriver version (113.0.5672.63) detected in PATH at C:\my-drivers\chromedriver.exe might not be compatible with the detected chrome version (115.0.5790.110); currently, chromedriver 115.0.5790.102 is recommended for chrome 115.*, so it is advised to delete the driver in PATH and retry

Entering Chrome for Testing (CfT)

The Chrome team started a very relevant initiative for the testing community in 2023: Chrome for Testing (CfT). CfT is a reduced release of Chrome primarily addressed to the testing use case.

One of the key differences between a regular Chrome release and CfT is that Chrome is evergreen, but CfT is not. This way, CfT allows pined browsers for testing. CfT releases are portable binaries (for Windows, Linux, and macOS) for different versions, including the stable, beta, dev, and canary channels. These releases can be programmatically discovered using the CfT JSON endpoints.

As of version 114, the chromedriver team has stopped publishing the chromedriver releases and metadata using their traditional chromedriver download repository. This way, and as of version 115, chromedriver releases can only be discovered programmatically using the abovementioned CfT JSON endpoints.

This change has been very relevant for the so-called driver managers. Luckily, Selenium already supports this new way of chromedriver discovery. The last version of Selenium Manager uses the CfT endpoints for chromedriver management. Therefore, if you are using Selenium Manager and Chrome, you must be updated to Selenium 4.11.0 to continue managing chromedriver automatically.

Automated browser management

Moreover, as of Selenium 4.11.0, Selenium Manager implements automated browser management based on CfT. In other words, Selenium Manager uses the CfT endpoints to discover, download, and cache the different CfT releases, making them seamlessly available for Selenium.

Let’s suppose we want to driver Chrome with Selenium (see the doc about how to start a session with Selenium). Before the session begins, and when the driver is unavailable, Selenium Manager manages chromedriver for us. This way, all the complexity related to CfT endpoints, driver versions, etc., is transparent, and we can rely on Selenium Manager to discover, download, and cache the proper driver for us.

In addition, and as a significant novelty starting on Selenium 4.11.0, if Chrome is not installed on the local machine when executing the previous line, the current stable CfT release is discovered, downloaded, and cached (in ~/.cache/selenium/chrome). But there is more. In addition to the stable CfT version, Selenium Manager also allows downloading of older versions of CfT (starting in version 113, which is the first version published as CfT).

To set a browser version with Selenium, we use a browser option called browserVersion. Until now, the value of this option had no effect when using the local browser since Selenium could not change what is installed in the system. But things are different with Selenium 4.11.0.

Let’s consider a simple example. Suppose we set browserVersion to 114 using Chrome options. In this case, Selenium Manager will check if Chrome 114 is already installed. If it is, it will be used. If not, Selenium Manager will manage (i.e., discover, download, and cache) CfT 114. And in either case, the chromedriver is also managed. Finally, Selenium will start Chrome to be driven programmatically, as usual.

But there is even more. In addition to fixed browser versions (e.g., 113, 114, 115, etc.), we can use the following labels for browserVersion:

  • stable: Current CfT version.
  • beta: Next version to stable.
  • dev: Version in development at this moment.
  • canary: Nightly build for developers.

When these labels are specified, Selenium Manager first checks if a given Chrome is already installed (beta, dev, etc.), and when it is not detected, CfT is automatically managed.

Under the hood

Selenium Manager is a CLI (command line interface) tool implemented in Rust and compiled for Windows, Linux, and macOS. The Selenium Manager binaries are shipped with each Selenium release. This way, each Selenium binding language invokes Selenium Manager to carry out the automated driver and browser management previously explained.

For most users, Selenium Manager should work silently and transparently. But if you want to play with Selenium Manager or use it for your own use case (e.g., to download drivers or CfT releases), you can get the Selenium Manager binaries from the Selenium main repository.

For instance, to manage Chrome/chromedriver, the Selenium Manager command we need to invoke from the shell is the following (notice that the flag --debug is optional, but it helps us to understand what Selenium Manager is doing):

> selenium-manager --browser chrome --debug
DEBUG   Checking chromedriver in PATH
DEBUG   Running command: chromedriver --version
DEBUG   Output: ""
DEBUG   chromedriver not found in PATH
DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
DEBUG   Using shell command to find out chrome version
DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
DEBUG   Output: "\r\r\n\r\r\nVersion=115.0.5790.110\r\r\n\r\r\n\r\r\n\r"
DEBUG   Detected browser: chrome 115.0.5790.110
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG   Required driver: chromedriver 115.0.5790.102
DEBUG   Driver URL: https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/115.0.5790.102/win64/chromedriver-win64.zip
INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\115.0.5790.102\chromedriver.exe
INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe

In this case, the local Chrome (in Windows) is detected by Selenium Manager. Then, using its version and the CfT endpoints, the proper chromedriver version (115, in this example) is downloaded to the local cache. Finally, Selenium Manager provides two results: i) the driver path (downloaded) and ii) the browser path (local).

Let’s consider another example. Now we want to use Chrome beta. Therefore, we invoke Selenium Manager specifying that version label as follows (notice that the CfT beta is discovered, downloaded, and stored in the local cache):

> selenium-manager --browser chrome --debug --browser-version beta
DEBUG   Checking chromedriver in PATH
DEBUG   Running command: chromedriver --version
DEBUG   Output: ""
DEBUG   chromedriver not found in PATH
DEBUG   Checking chrome in PATH
DEBUG   Running command: where chrome
DEBUG   Output: ""
DEBUG   chrome not found in PATH
DEBUG   chrome has not been discovered in the system
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
DEBUG   Required browser: chrome 116.0.5845.49
DEBUG   Downloading chrome 116.0.5845.49 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.49/win64/chrome-win64.zip
DEBUG   chrome 116.0.5845.49 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\116.0.5845.49\chrome.exe
DEBUG   Reading metadata from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
DEBUG   Required driver: chromedriver 116.0.5845.49
DEBUG   Driver URL: https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.49/win64/chromedriver-win64.zip
INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.49\chromedriver.exe
INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\116.0.5845.49\chrome.exe

Troubleshooting in the bindings

If you want to get the Selenium Manager debugging information (as shown in the section before) when using the Selenium bindings languages, you can enable the logging capabilities of Selenium. Please visit the Selenium troubleshooting page for details.

Next steps

You can trace the work in progress in the Selenium Manager project dashboard. The following features to be implemented in Selenium Manager will continue the automated browser management mechanism, this time for Firefox and Edge. Stay tuned!

Building Selenium

How does the Selenium team build Selenium itself, and why did we chose the tools we chose?

One of the things that we knew from the very beginning of the Selenium project was that people like to code in more than one language. Some people love a bit of JS, others Ruby, and still others prefer C# or Java.

To complicate matters, there’s plenty of pieces we want to share between the language bindings you’ll be using. Examples include the “atoms” (re-usable pieces of javascript that perform common functions – such as “isDisplayed” or “getAttribute” – that we want to work the same way no matter which language you prefer to write tests in), things like our CDP support, which uses shared files that describe all the available functions we can call, and the new Selenium Manager, which is written in Rust, but we bundle with each of the language bindings.

The process of converting the source code and other artefacts (such as the atoms) together into the artefacts we distribute (such as the Selenium Server, or the language bindings) is called the “build”. There are plenty of build tools out there. If you’re a java developer, you’ve probably come across Maven or Gradle. If you’re a JS hacker, then perhaps something like npm or yarn is something you’ve used. If you’re a C developer (there are still plenty out there!) then you’re likely using make or CMake.

The problem with many build tools is that they’re focused on one language. Npm is great, but it’s a terrible choice for a Java project. Gradle is fine, but not if you’re working in Ruby.

Why is this a problem? Because in the Selenium codebase we want to support multiple different languages, and we want to be able to “stitch” them together into a single cohesive whole. For example, the Selenium jars contain a fairly large amount of JS. The Ruby gems do too.

What we want is a single build tool that can cope with lots of different languages, so we can weave our build into something where we only need that one tool.

Enter Bazel. This was a build tool originally developed by Google, but which is now Open Source and increasingly widely used. Bazel itself is relatively limited in what it can do, but it can be extended easily using “rulesets” that allow it to support everything we need, and more!

Bazel is one of a new generation of build tools, and focuses on exposing how each part of the build process relates to the other parts. You could imagine drawing a chart, with each thing we need to compile (eg. Selenium Manager, or the atoms, or one of the jars we ship) connected by lines to other parts that they depend upon. In Computer Science, that chart is called a “graph”, and because each line has a direction (“this thing depends upon that thing”) we call it a directed graph. Because we can’t depend on something that depends on itself, we can introduce a “cycle”. Bazel is a build tool designed to work with these “directed acyclic graphs”.

One nice thing about these graphs is that there are well-known ways to figure out which parts of the build can be performed in parallel. A modern computer has a CPU with many (4, 8, 16!) cores, plenty of memory, and fast SSDs: it can comfortably perform many tasks at the same time. So Bazel takes advantage of this, running as many parts of the build at the same time as it can. This makes our builds significantly faster than they used to be!

Better yet, Bazel makes us list all the things that each part of the build depends on. Not just the source code, but which versions of which tools we’re using. That makes it a lot easier for a developer new to the project to get started: they just need to clone our repo, make sure they have Bazel installed, and the build process will take care of making sure that they have everything they need (although that first build may be very slow as everything that’s needed will be downloaded from the Net). That’s not just nice for people new to the project, it’s nice for the existing developers. They no longer need to know how to install and set up toolchains that they may not be familiar with – they just run the build.

Using the “build graph”, Bazel is able to tell which pieces of code in the Selenium source code depend on which other parts. This means that although we can tell Bazel to “run all our tests” when we make a change, it’s smart enough to know that it only needs to run those tests which are actually affected by a change. You can see this in action in this video, but needless to say, this can save us a huge amount of time! We can also ask Bazel to re-run flaky tests

But there’s another advantage of describing all the things we need for a build. Since we’ve described everything we need to Bazel, and how all the pieces fit together, there’s no need to just run the build on our own machines. We’re working with EngFlow to make use of their build grid. Rather than just running a small number of things at the same time on our machines, we can run many times that on their build grid. Our builds there are incredibly fast!

So, that’s why we use Bazel on our project: it supports all the languages we want to use in a single tool, allows us to not think about how to set up our development machines, runs builds incredibly quickly, and we can make use of build grids to build things even faster.

Java 8 support in Selenium

On September 30, 2023, Java 11 will be the minimum version supported by Selenium.

“If it ain’t broke, don’t fix it” is a saying you may have heard, but sometimes it’s necessary to move on from our old favorites. That’s why we’re announcing that Selenium will stop supporting Java 8 on September 30, 2023. This applies for both the Java bindings and the Selenium Grid.

Selenium has long supported Java 8, but as technology evolves, so must we. One of the primary reasons for this change is that Java 8 reached the end of active support over a year ago. In addition, our default HTTP Client has not had a major release in several years, and a bug has been found that we can not fix. We have decided to move to the native Java HTTP Client, but it requires using Java 11 or greater. The sooner we make this change, the sooner we can avoid dealing with this issue.

Our new minimum version will be Java 11. September 30, 2023 is also the end of active support for Java 11. However, we want to take a cautious and conservative path forward, and not force our users to make the big jump from Java 8 to Java 17, as we understand the community might need longer to move to that version. We will revisit this topic in the future to announce the plan to support Java 17 as a minimum version.

We understand that this change may require some of our users to make adjustments, but we believe that it’s a necessary step for the continued growth of Selenium. Please take some time to check your infrastructure and ensure you’re running on Java 11 or higher. We understand that some may be hesitant or may find it difficult to make the switch, but we believe it will pay off in the long run.

Please let us know your questions, concerns, and feedback through our community chat.

Happy testing!

Selenium 4.10.0 Released!

Today we’re happy to announce that Selenium 4.10.0 has been released!

We’re very happy to announce the release of Selenium 4.10.0 for Java, .NET, Ruby, Python, and Javascript as well as the Grid and Internet Explorer Driver. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v112, v113, and v114 (Firefox still uses v85 for all versions)
  • Selenium Manager supports proxy usage by using the proxy information set in the browser options.
  • Adding support for webview2 in Edge for Java, JavaScript, and Ruby
  • Error messages across bindings now include links to the Selenium documentation.
  • Overhaul of the service classes and logging output options.
  • Logger in Ruby updated default behavior to match other languages and added features to improve filtering types of logging.
  • Python - removal of several sections of deprecated code.

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Selenium

Boris Petrov

Boris Petrov

Nikolay Borisenko

Nikolay Borisenko

Rishav Trivedi

Rishav Trivedi

Michael Mintz

Michael Mintz

Vladislav Velichko

Vladislav Velichko

Moritz Kiefer

Moritz Kiefer

Valery Yatsynovich

Valery Yatsynovich

Oboleninov Anton

Oboleninov Anton

Scott Stevens

Scott Stevens

Sandeep Suryaprasad

Sandeep Suryaprasad

Alpatron

Alpatron

Tarek Oraby

Tarek Oraby

robin gupta

robin gupta

Kat Rollo

Kat Rollo

Brandon Squizzato

Brandon Squizzato

Luis Correia

Luis Correia

Stephan Erlank

Stephan Erlank

Jordan Zimmitti

Jordan Zimmitti

Brian Schreder

Brian Schreder

Selenium Docs & Website

Tarek Oraby

Tarek Oraby

robin gupta

robin gupta

Kat Rollo

Kat Rollo

Brandon Squizzato

Brandon Squizzato

Docker Selenium

Luis Correia

Luis Correia

Stephan Erlank

Stephan Erlank

Jordan Zimmitti

Jordan Zimmitti

Brian Schreder

Brian Schreder

Thanks as well to all the Selenium Team Members who contributed to this release:

Boni García

Boni García

Alex Rodionov

Alex Rodionov

Tamsil Sajid Amani

Tamsil Sajid Amani

Diego Molina

Diego Molina

Titus Fortner

Titus Fortner

Simon Stewart

Simon Stewart

Krishnan Mahadevan

Krishnan Mahadevan

Sri Harsha

Sri Harsha

Puja Jagani

Puja Jagani

David Burns

David Burns

James Mortensen

James Mortensen

Stay tuned for updates by following SeleniumHQ!

Happy testing!

InvalidSelectorException has changed

⚠️ InvalidSelectorException now extends from WebDriverException

Before Selenium 4.8.2 in Java and C#, when an invalid locator was used to identify an element, the resulting behavior would be inconsistent in our bindings.

For example, let’s check the following code:

ArrayList<Class<? extends Exception>> expectedExceptions = new ArrayList<>();
        expectedExceptions.add(org.openqa.selenium.NoSuchElementException.class);
        expectedExceptions.add(org.openqa.selenium.StaleElementReferenceException.class);
        expectedExceptions.add(org.openqa.selenium.ElementNotInteractableException.class);
        expectedExceptions.add(org.openqa.selenium.InvalidElementStateException.class);
        
return new FluentWait<>(driver)
      .withTimeout(Duration.ofMillis(ELEMENT_IDENTIFICATION_TIMEOUT))
      .pollingEvery(Duration.ofMillis(ELEMENT_IDENTIFICATION_POLLING_DELAY))
      .ignoreAll(expectedExceptions)
      .until(nestedDriver -> {
         nestedDriver.findElement(By.xpath("invalid-xpath")).click;
      });

The expected result before this change would be that the driver waits until the timeout expires and then throw an InvalidSelectorException.

This doesn’t make much sense because a broken/invalid selector would never fix itself, and hence should throw immediately.

This was discussed and agreed during the TLC meeting on August 17, 2022, and implemented through the pull request 11727 and the following commit.

With the changes mentioned above, an invalid selector will throw an InvalidSelectorException immediately.

Please note that this may have an impact on backwards compatibility if you are not expecting this exception to be thrown while handling invalid locators.

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium 4.9.0 Released!

Today we’re happy to announce that Selenium 4.9.0 has been released!

We’re very happy to announce the release of Selenium 4.9.0 for Java, .NET, Ruby, Python, and Javascript as well as the Grid and Internet Explorer Driver. Links to everything can be found on our downloads page.

Highlights

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Ashley Trinh

Ashley Trinh

Nikolay Borisenko

Nikolay Borisenko

Dana Sherson

Dana Sherson

Zach Attas

Zach Attas

Ariel Juodziukynas

Ariel Juodziukynas

Henrik Skupin

Henrik Skupin

Abdullah Aslam

Abdullah Aslam

ting

ting

Johnny.H

Johnny.H

Mohab Mohie

Mohab Mohie

Michael Mintz

Michael Mintz

Michael Render

Michael Render

Tobias Smolka

Tobias Smolka

Étienne Barrié

Étienne Barrié

James Hilliard

James Hilliard

Mark Mayo

Mark Mayo

Thanks as well to all the Selenium Team Members who contributed to this release:

Alex Rodionov

Alex Rodionov

Boni García

Boni García

Titus Fortner

Titus Fortner

Diego Molina

Diego Molina

Tamsil Sajid Amani

Tamsil Sajid Amani

Sri Harsha

Sri Harsha

Simon Stewart

Simon Stewart

Krishnan Mahadevan

Krishnan Mahadevan

David Burns

David Burns

Simon K

Simon K

Puja Jagani

Puja Jagani

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Let's meet at SeleniumConf, Once Again!

SeleniumConf is back in person! Yes! It does feel good to say this.

This year is special, thanks to the decision to host an in-person conference after a long hiatus and several years of virtual-only events. We’ve gone out of our way to reflect this feeling at the conference. We have engrossing keynotes, well-researched talks, hands-on pre-conference workshops, hallway tracks, and whatnot!

Here’s a quick list of what to expect!

What’s cooking in Keynotes?

We have Diego Molina kicking things off with ‘Selenium: State of the Union’ where he will talk about all things Selenium, including the project, the code, and the community. Think of it as a journey through the times with Selenium. A must-attend without any shred of doubt!

Next up is Erika Chestnut’s ‘Bigger Than The Box’ where she will focus on the idea of quality and whether it has been restricted to only a single step in the delivery process. It is indeed a dialogue that needs to happen given that our lives revolve around quality.

On day 2, we have first-time SeleniumConf keynote speaker Mark Winteringham from the Ministry of Testing talking about ‘What Exactly Do You Do in Test Automation?’ Is it just about coding and frameworks or is there more to it? How should a test automation practitioner think about their role? Think of this as learning from the ground up or in some cases, back to the basics!

Talks, talks, and more talks

We’ve cast our net far and wide this time around.

Just as a highlight, across the two days, we will cover a diverse range of topics from crawlers, identifying code smells, blended testing, component testing, quality gates, quality metrics to track, testing with real robots, and managing the test data nightmare, among others. Quite a list, huh? Trust me, this is just a sneak peek. You can check out the entire list here.

Also, we’ve got a session on how testing with Selenium is solving unemployment in Africa.

The cherry on the cake is the Q&A with the Selenium Committer’s Panel where you’ll get to pick the brains of the very people who’ve built Selenium.

In a way, we’ve truly tried our best to touch upon the technology, people, and process aspects of testing. We’d love to have you over to catch these experts in action!

Getting your hands dirty with tailored workshops

Testing is all about exploring. How about exploring and diving into something new?

We’ve got community leaders doing deep dives into Selenium, Appium 2.0, how to become a committer, state model-based testing, and driving observability with Selenium Grid.

We truly believe that nothing beats hearing it from the horse’s mouth.

What’s more?

While there are some amazing keynotes, well-researched talks, and structured workshops, we really think the biggest takeaway for any attendee is the people they’ll get to meet. Selenium has been a great example of how the community can come together to build something that is greater than the sum of its parts. A conference like this brings together folks from across the world, with different levels of experience, and puts them under a single roof.

What can be more beautiful than getting to interact with the very community that has built and grown Selenium?

What are you waiting for? Register now! We can’t wait to welcome you to Chicago!

Headless is Going Away!

Now that we got your attention, headless is not actually going away, just the convenience method to set it in Selenium

Headless is an execution mode for Firefox and Chromium based browsers. It allows users to run automated scripts in headless mode, meaning that the browser window wouldn’t be visible. In most of Selenium’s bindings there is a convenience method to set this execution mode while setting the browser options. However, Selenium 4.8.0 will be deprecated this method and now users need to set it through arguments when setting the browser options.

Why is Selenium doing this?

Chromium based browsers have now two different headless modes (the original one, and one with more capabilities added in 2022). When a user sets headless to true via the convenience method in Selenium, it is using the initial method provided by Chromium based browsers.

By deprecating the convenience method (and removing it in Selenium 4.10.0), users will be in full control to choose which headless mode they want to use.

What are the two headless modes?

The traditional --headless, and since version 96, Chrome has a new headless mode that allows users to get the full browser functionality (even run extensions). Between versions 96 to 108 it was --headless=chrome, after version 109 --headless=new.

Using --headless=new should bring a better experience when using headless with Selenium.

Thanks to Michael Mintz for the detailed explanation!

Check more details about the new headleass mode at the official Chrome blog.

How can I set headless mode from now on?

In short, users can add the headless mode they want to use through arguments in browser options.

Before

ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
WebDriver driver = new ChromeDriver(options);
driver.get("https://selenium.dev");
driver.quit();
let driver = await env
  .builder()
  .setChromeOptions(new chrome.Options().headless())
  .build();
await driver.get('https://selenium.dev');
await driver.quit();
// C# did not have a convenience method
options = Selenium::WebDriver::Chrome::Options.new
options.headless!
driver = Selenium::WebDriver.for :chrome, options: options
driver.get('https://selenium.dev')
driver.quit
options = ChromeOptions()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()

After

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
WebDriver driver = new ChromeDriver(options);
driver.get("https://selenium.dev");
driver.quit();
let driver = await env
  .builder()
  .setChromeOptions(options.addArguments('--headless=new'))
  .build();
await driver.get('https://selenium.dev');
await driver.quit();
var options = new ChromeOptions();
options.AddArgument("--headless=new");
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://selenium.dev");
driver.Quit();
options = Selenium::WebDriver::Options.chrome(args: ['--headless=new'])
driver = Selenium::WebDriver.for :chrome, options: options
driver.get('https://selenium.dev')
driver.quit
options = ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()

If you have any questions or comments, please reach out through any of all the available options shown at our support page.

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium 4.8.0 Released!

Today we’re happy to announce that Selenium 4.8.0 has been released!

We’re very happy to announce the release of Selenium 4.8.0 for Java, .NET, Ruby, Python, and Javascript as well as the Grid and Internet Explorer Driver. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v107, v108, and v109 (Firefox still uses v85 for all versions)
  • Large JS executions have the name as a comment to help understand what payload being sent to/from server/driver.
  • Deprecation of headless convenience method. Read more about in the headless blog post.
  • Ruby overhauls Options classes (again)
  • Initial BiDi support in JavaScript, Ruby, and improvements in Java.
  • We’re continuing to remove Legacy Protocol classes in Java and Grid.
  • Accommodate ability to specify sub-paths in Grid.
  • Plus various language specific bug fixes; see the full list of changes in the Changelogs

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Nikolay Borisenko

Nikolay Borisenko

Kian Eliasi

Kian Eliasi

James Hilliard

James Hilliard

Potapov Dmitriy

Potapov Dmitriy

Johnson Sun

Johnson Sun

George Adams

George Adams

Jon Dufresne

Jon Dufresne

Valery Yatsynovich

Valery Yatsynovich

Thanks as well to all the Selenium Team Members who contributed to this release:

David Burns

David Burns

Alex Rodionov

Alex Rodionov

Titus Fortner

Titus Fortner

Diego Molina

Diego Molina

Puja Jagani

Puja Jagani

Krishnan Mahadevan

Krishnan Mahadevan

Sri Harsha

Sri Harsha

Boni García

Boni García

Simon K

Simon K

Simon Stewart

Simon Stewart

Tamsil Sajid Amani

Tamsil Sajid Amani

Blog Posts - 2022

Year End Review 2022

Looking back at our achievements from 2022

It was an amazing year here at the Selenium project, and we wanted to remind you of some of the great things we accomplished.

In terms of releases, we continued to build on top of Selenium 4 which was launched in October 2021. This year we published v4.2, v4.3, v4.4, v4.5, v4.6, and v4.7. These releases included improvements, bug fixes, removal of deprecated functionality, improved error handling, updates of the underlying libraries, support for the latest Chrome DevTools versions to keep you in sync with new browser releases, but also new features.

We introduced the first (beta) version of the embedded Selenium Manager. The purpose of this feature is to help you manage your driver binaries without having to manually update them yourself each time a new version is released. We also introduced observability in the Docker-Selenium images. Another major new feature is native support for scrolling in the Actions API. But these are only some of the highlights of what we released. To get the details for each language we support, you can check out their corresponding Changelog pages: Java, Python, Ruby, Javascript, DotNet.

In terms of events and gatherings, in July our Selenium India Conference took place, this time online. It kicked off with an 8 talk pre-conference event, namely Selenium Lite. We then had a full day of workshops, followed by 2 days of conference. We had over 50 speakers and over 800 participants from around the world. The talks focused on Selenium, the Selenium ecosystem, automation, methodologies and best practices. In case you missed some of these talks, you can still watch them here.

We also held 2 test automation summits: one in San Francisco and one in Berlin. During these workshops the participants, together with some of the maintainers of frameworks from the Selenium ecosystem, built their Selenium based projects, added tests, new features and fixed bugs. During the first summit the participants focused on the BiDi protocol, while during the second one the focus was on Appium and mobile automation.

We are kicking off next year with a few surprises. The Selenium Conference in Chicago just announced the Speaker Lineup. Stay tuned for further details!

Many thanks to everyone who has contributed to the Selenium project for all their hard work this year!

And special thanks to all of you who are using, following and supporting the Selenium project.

From everyone here at SeleniumHQ, may you have the best holidays and an amazing new year. See you in 2023!

SeleniumConf Chicago 2023 Speakers Announced

The SeleniumConf Chicago 2023 Program Review Committee and conference organizers are finalizing the agenda, but in advance of this here is what you can look forward to.

As many of you know, the Selenium Conference returns to an in-person event next March 28-30, 2023 in Chicago, IL. The Program Chairs & Committee, as well as the Extended Program Review Committee, have been hard at work putting together an outstanding lineup of speakers and workshops, and we’re close to releasing the full agenda and a completely re-branded conference website - stay tuned! In the meantime, we wanted you to be among the first to know who will be presenting, announce a new, additional pre-conference workshop, and provide you with some important updates. Here we go!

Keynote Sessions

There will be four plenary keynote presentations across the 2-day conference. Selenium Core Committer Diego Molina will open the conference on Wednesday with the “Selenium: State of the Union” presentation, followed by Quality & Leadership Coach Erika Chestnut presenting “Bigger Than The Box”, where she shares how she has crossed the aisles to elevate and expand the role quality in the organizations that she has worked for. Day 2 kicks off with Mark Winteringham, Ministry of Testing OpsBoss, presenting “What Exactly Do You Do In Test Automation”. The final keynote session will be a Q&A with the Selenium Committers panel.

Confirmed Track Session Presenters

Following the opening keynote presentations, there will be two separate track sessions running in parallel. Here are the confirmed speakers to date and the presentations they will be giving:

New Workshop Added - State Model-Based Testing Using Selenium

We’re pleased to announce a new addition to the optional pre-conference workshop day, State Model-Based Testing Using Selenium, led by Ru Cindrea, Managing Partner and Senior Test Consultant, Altom Consulting & Alex Rotaru, Co-owner, Altom Consulting. If you haven’t yet heard of State Model-Based Testing (SMBT) is a testing technique that allows testers to visualize their applications and to generate and automate test flows by using different models of the application under test, thus obtaining a large number of test scenarios. When certain paths of the application are changed, the benefit of using SMBT is that you will only have to modify the states and transitions that apply to that change.

This workshop rounds out the core pre-conference workshop offerings, which include a Selenium Deep Dive session led by Selenium Project Core Committer, Titus Fortner; Driving Observability with Selenium Grid 4, led by Manoj Kumar, VP, Developer Relations at LambdaTest and Selenium Project Leadership Committee member, and Advanced Appium 2.0, with Srini Sekar & Sai Krishna, Lead Consultants at Thoughtworks and long-time Appium workshop instructors.

Workshops are one of the most popular offerings at any SeleniumConf and because class sizes are limited they invariably sell-out. Early Bird ticket sales have closed, but you can still find openings for any of these awesome day-long sessions. Register today and make sure you get a seat at the Conference + Workshop session of your choice.

Wait, Wait - Where is the Fix a Bug, Become a Committer Workshop?

If you’re a long-time follower of past Selenium Conferences, or just happened to attend the July, 2022 virtual SeleniumConf, you may be familiar with the long-standing workshop offering “Fix a Bug, Become a Committer”. This workshop is a bit different in that the goal is to both enhance your own Selenium experience while offering the ability to contribute back to the project. With this, it’s not a learning session, per se, but more of a doing session, and we thought we’d take a different approach this time and make it available at no-charge (other than buying a conference ticket) to a limited number of applicants. If you are familiar with Selenium and want to extend your conference experience an extra day we encourage you to apply. Scholarship applicants (more below) are also welcome to apply.

Announcing the SeleniumConf Chicago 2023 Scholarship Program

The mission of the Selenium project is to educate the QA and developer communities about Selenium, the importance of quality assurance, and automated testing in general. Both the Selenium project and the SeleniumConf organizers very much want everyone to be able to attend the conference, but we know that not everyone’s personal or financial circumstances make this possible - so, we’re setting aside a number of free tickets, and covering travel expenses, as part of our SeleniumConf Chicago 2023 scholarship program.

The program aims to support individuals from underrepresented groups in tech and those facing economic or social hardship so they have access to SeConf content and networking opportunities. If you’re an aspiring software professional looking to use Selenium, or a current one without access to the funds to buy your ticket, you should apply. We will award tickets to people who can show that the knowledge gained will be useful for their ongoing career. The application form will be posted in January, 2023.

Ready to Go, But Your Manager Needs More Convincing?

You’ve now seen the keynotes, the current roster of speakers, and the awesome hands-on workshop descriptions, but you still need more to convince your manager? Download this “Convince Your Boss” email template and tailor it to your specific rationale using the details you’ve gleaned from this post. We’d really like to see you next March in Chicago - so register here!

Selenium 4.7.0 Released!

Today we’re happy to announce that Selenium 4.7.0 has been released!

We’re very happy to announce the release of Selenium 4.7.0 for Java, .NET, and Javascript as well as the Grid and Internet Explorer Driver; for Ruby use 4.7.1, and Python 4.7.2. Links to everything can be found on our downloads page.

Highlights

  • Chrome DevTools support is now: v106, v107, and v108 (Firefox still uses v85 for all versions)
  • Selenium Manager now supports IE Driver & has improved error logging.
  • Using Edge in IE Mode no longer requires ignoring zoom levels.
  • We’re continuing to remove Legacy Protocol classes in Java and Grid.
  • Java adds WebDriver-BiDi support for Logging.
  • .NET includes an explicit target for net6.0 framework.
  • Ruby is now publishing nightly gems
  • Plus various language specific bug fixes; see the full list of changes in the Changelogs

Contributors

Special shout-out to everyone who helped the Selenium Team get this release out!

Christian Clauss

Christian Clauss

Dor Blayzer

Dor Blayzer

Fenil Mehta

Fenil Mehta

Jared Webber

Jared Webber

Michael Mintz

Michael Mintz

Nikolay Borisenko

Nikolay Borisenko

Tamsil Sajid Amani

Tamsil Sajid Amani

Thanks as well to all the Selenium Team Members who contributed to this release:

David Burns

David Burns

Boni García

Boni García

Diego Molina

Diego Molina

Sri Harsha

Sri Harsha

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Simon Stewart

Simon Stewart

Simon K

Simon K

Titus Fortner

Titus Fortner

BELLATRIX Test Automation Framework for C# and JAVA

Customize and extend BELLATRIX, a cross-platform .NET 6 and JAVA test automation framework to perfectly fit your needs. Start on top of hundreds of best practices features and integrations.

Over the last decade, a large ecosystem of Open Source projects has sprouted up around Selenium. Selenium is often used for automating web applications for testing purposes, but it does not include a testing framework. Nowadays, Selenium Ecosystem initiatives try to give popularity to popular open-source test automation frameworks maintained by people outside of the core Selenium maintainers. One of these frameworks is BELLATRIX, invented by Anton Angelov. It has two versions - C# and Java. A testing framework is an abstraction in which common code provides generic functionality (which can be selectively overridden) for testing different aspects of our applications- UI, API, security, performance, and many others.

BELLATRIX Test Automation Framework

The first version of BELLATRIX appeared on 26 December 2017. It was available only for C# initially, but written on the new back then .NET Core, allowing the framework to be used on all major operating systems (cross-platform). One huge advantage of BELLATRIX is its cross-technology readiness. It allows you to write tests for different technologies such as Web, Mobile, Desktop, and API. In BELLATRIX, we strive for the API for all modules to be as identical as possible.

The usage is simple. We suggest cloning BELLATRIX as a GIT sub-module. Then, any customizations, tests, and project-specific plug-ins should be placed in a project outside the BELLATRIX cloned repository. This way, you can quickly update to the latest version.

BELLATRIX official website, download and releases info

BELLATRIX official C# GitHub Page

BELLATRIX official Java GitHub Page

BELLATRIX C# Documentation

BELLATRIX Java Documentation

Let’s investigate how easy it is to create your first test with BELLATRIX in 15 minutes. The sample will showcase how to create a very basic test login into a website:

  1. Open the BellatrixTestFramework.sln
  1. Under the starthere folder, find the project you prefer: web, mobile, desktop, API
  1. Open the BellatrixLoginTest.cs file. There you will find a sample test automating the login.
[TestClass]
public class LoginTestsMSTest : MSTest.WebTest
{
    public override void TestInit()
    {
       App.Navigation.Navigate("http://demos.bellatrix.solutions/my-account/");
    }

    [TestMethod]
    public void SuccessfullyLoginToMyAccount()
    {
        var userNameField = App.Components.CreateById<TextField>("username");
        var passwordField = App.Components.CreateById<Password>("password");
        var loginButton = App.Components.CreateByXpath<Button>("//button[@name='login']");

        userNameField.SetText("info@yourverybusywebsite.com");
        passwordField.SetPassword("yourverysecretp4ssw0rd$");
        loginButton.Click();

        var myAccountContentDiv = App.Components.CreateByClass<Div>("woocommerce-MyAccount-content");
        myAccountContentDiv.ValidateInnerTextContains("Hello John");

        var logoutLink = App.Components.CreateByInnerTextContaining<Anchor>("Log out");

        logoutLink.ValidateIsVisible();
        logoutLink.Click();
    }
}

All available services are available through the main App class. The Components property provides various Create methods for finding elements. They are generic, so you need to mention the type of the searched element. We have different elements because, for each of them, BELLATRIX offers various additional methods and assertions on top of native WebDriver methods. The sample code uses MSTest as the default test framework, but by changing the attributes, it will also work out of the box for NUnit. Of course, you need to change the base class namespace too.

Why BELLATRIX?

Let’s quickly list some of the essential things the framework brings to the table:

Multiple Test Environments Configuration

Every aspect of the framework can be controlled via a rich JSON configuration designed to work for many test environments. Web Project Configuration.

Customization

One of the hardest things to develop is to allow these generic frameworks to be extendable and customizable. Knowing how essential customization is, we utilize different ways to achieve it. The major one is about writing your own plug-ins.

Test Reliability

One of the biggest problems in test automation is handling timeouts and performing actions on elements that may not be on the page right now. BELLATRIX hides the complexity of searching and waiting for elements. Furthermore, when you perform an action or assertion against an element, we guarantee that once returned, it will be present.

A significant part of your tests are the assertions - checking whether some conditions are met. To handle such scenarios, we created elements Validate methods. They internally handle the whole complexity of waiting for some condition to happen.

updateCart.ValidateIsDisabled();
totalSpan.ValidateInnerTextIs("120.00€", timeout: 30, sleepInterval: 2);
messageAlert.ValidateIsNotVisible();

Complex Controls

BELLATRIX provides API that makes handling HTML tables and grids much easier HTML tables and grids.

Here is an example for asserting grid cells:

TestGrid.ForEachCell(cell => cell.AssertFontSize("14px"));
TestGrid.GetCell("Firstname", 1).ValidateInnerTextIs("Mary");
TestGrid.GetCell(0, 1).ValidateInnerTextIs("John");
TestGrid.GetCell<Employee>(cell => cell.PersonalEmail, 1).ValidateInnerTextIs("mary@hotmail.com");

There is much more complex stuff that you can do with both components so check the official documentation.

Integrations

Seamlessly integrate the framework with your existing tools and processes. Execute tests in the clouds, distribute and publish test results in reporting solutions. Maybe the most significant differentiators of the framework are its many integrations with popular tools such as Jira/qTest/Allure/ReportPortal and clouds such as AWS, Microsoft Azure, + many more. All these integrations leverage BELLATRIX plug-in architecture. For example, we have plug-ins for automatically generating/updating test cases based on our automated tests in qTest and AzureDevops or similarly creating automatic bug reports with steps to reproduce in Jira or Azure.

Dynamic Test Cases

Dynamic test cases are a unique feature in BELLATRIX, where the framework automatically generates test cases in a popular test case management system based on your automated tests. It will populate the title, description, and other necessary properties automatically. Moreover, it will generate human-readable steps and expected results. The most significant benefit is that it will keep up to date with your auto-generated test cases over time, no matter what you change in your tests. It is an excellent functionality which allows the non-technical people of your company to see what your tests are doing.

AI Validation of PDFs and Image

Azure Computer Vision is a service that can be used to extract printed and handwritten text from images and documents with mixed languages and writing styles. In contrast, Azure Form Recognizer is an AI-powered document extraction service that understands your document. You are not limited to PDFs only. You can use the same feature for extracting text from complex images. BELLATRIX comes with similar functionality based on the AWS cloud.

Email Testing

BELLATRIX offers a few utilities for email testing. There are a few scenarios where we need such integration. The first one is related to creating unique email inboxes and using them to submit various online forms. Later, we can read the emails via the services and check the content of the emails. It might be enough to verify the content via regular C#, or in some cases, we might need to interact with the email content in the browser.

There are tons of other integrations that we use on a daily basis in many big enterprise projects, such as cloud secrets management for securely storing credentials and other secrets. All BELLATRIX Integrations

Using BELLATRIX in your projects might save months/years of effort even if you have the required programming knowledge. This way, you can quickly focus on writing automated tests for your project. Usually, there are 4-6 major releases each year, including all bug fixes and new features. Check our release notes history. The framework is fully covered with over 4000 automated tests and offers rich documentation. We make sure to merge the new feature branches only when we are sure that everything is working. If some issue emerges after a major release, it is quickly fixed within a few days.

For feature requests or bug reports, you can submit them to our GitHub repositories. If you believe that the functionality you developed can be added to the CORE framework or you have a bug fix, please submit a PR so we can discuss it and potentially merge it. For anything else, you can reach us via our contact us form.

Introducing Selenium Manager

Get a working environment to run Selenium out of the box with a new beta feature!

Most people’s first experience with Selenium ends up with an error message like this one:

java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver 
system property; for more information, see https://chromedriver.chromium.org/. The latest version can be 
downloaded from https://chromedriver.chromium.org/downloads

Then they have to search the web for instructions on what to do with the drivers they download.

Selenium: now with batteries included!

The Selenium project wants to improve the user experience, and one of the first steps is to help all users to simplify how they set up their environment. Configuring browser drivers has been for many years a task which users need to perform in order to have a working environment to run Selenium.

Setting up a browser driver once is not that complicated, but as browser release cycles got shorter, and now we have a new Chrome/Firefox/Edge version every 4-6 weeks, the task of keeping the browser driver in sync with the browser version is not that easy anymore.

Selenium Manager is a new tool that helps to get a working environment to run Selenium out of the box. Beta 1 of Selenium Manager will configure the browser drivers for Chrome, Firefox, and Edge if they are not present on the PATH.

To run a Selenium test with Selenium 4.6, you only need to have Chrome, Firefox, or Edge installed. If you already have browser drivers installed, this feature will be ignored. If you’d like to help us test it, though, delete your drivers or remove your third party driver manager and things should still “just work.” If they don’t, please file a bug report.

Future releases of Selenium Manager will eventually even download browsers if necessary.

Inspired by Open Source and the Selenium Community

Selenium Manager is not a completely new solution. Over the years, several third-party projects in the Selenium ecosystem emerged. Such as: WebDriverManager for Java, webdriver-manager for Python, webdrivers for Ruby, and WebDriverManager.Net for C#.

All these projects served as an inspiration and as a clear sign that the community needed this feature to be built-in Selenium. In addition, a survey done on January 2021 showed that most Selenium users want to get rid of the driver management problem. Plus, the fact that the driver installation page is by far the most visited one in the Selenium documentation.

Selenium Manager in detail

Selenium Manager is a CLI (Command-Line Interface) tool developed in Rust to allow cross platform execution. On its beta 1 version, Selenium Manager is invoked transparently by the Selenium bindings when no browser driver is detected on the PATH or no third party driver manager is being used.

You can also use Selenium Manager without the Selenium bindings. While we plan to do formal releases in the future, for now, the binaries can be found directly on the Selenium repository. Check the different parameters and options by running the following command:

$ ./selenium-manager --help

A quick example showing how ChromeDriver gets configured can be seen below:

$ ./selenium-manager --browser chrome
INFO	/home/boni/.cache/selenium/chromedriver/linux64/106.0.5249.61/chromedriver

If you maintain a WebDriver based project and would like to use Selenium Manager as well, join us in our community channels and we would be happy to help. Also, if you are interested in contributing, for detailed instructions and information check the project’s README.

Next steps

Selenium Manager is still under development, features will be added and bugs fixed along with each release. However, you as a member of the Selenium community are key part on the future success of this new tool. Please report ideas or bugs through our issue tracker and join the conversation through our community channels. Looking forward to your feedback!

Happy testing!

Selenium 4.6.0 Released!

Today we’re happy to announce that Selenium 4.6.0 has been released!

We’re very happy to announce the release of Selenium 4.6.0 for Java, .NET, Python, Ruby, and JavaScript bindings as well as the Grid and Internet Explorer Driver. Links to everything can be found on our downloads page.

Highlights

  • Adding support for CDP released in Chrome v105, v106, and v107, while v104 was removed
  • Initial implementation of Selenium Manager across bindings
  • Improvements to the new Java HTTP 11 client and important Grid fixes.
  • Observability enabled in the Docker-Selenium images.
  • Various language specific bug fixes; see the full list of changes in the Changelogs

Huge thanks to all the contributors who made this version possible:

Nick Crews

Nick Crews

Simon K

Simon K

Chris Stringer

Chris Stringer

Kazuki Higashiguchi

Kazuki Higashiguchi

Brandon Walderman

Brandon Walderman

Václav Votípka

Václav Votípka

Konstantin Kotenko

Konstantin Kotenko

Vinothkumar Ranganathan

Vinothkumar Ranganathan

Hyesung Lee

Hyesung Lee

Titus Fortner

Titus Fortner

Boni García

Boni García

Sri Harsha

Sri Harsha

Muhammad Hammad

Muhammad Hammad

Nikolay Borisenko

Nikolay Borisenko

Alex Rodionov

Alex Rodionov

Puja Jagani

Puja Jagani

Tamsil Sajid Amani

Tamsil Sajid Amani

Yevgeniy Shunevych

Yevgeniy Shunevych

Krishnan Mahadevan

Krishnan Mahadevan

Selenium 4.5.0 Released!

Today we’re happy to announce that Selenium 4.5.0 has been released!

We’re very happy to announce the release of Selenium 4.5.0 for Java, .NET, Python, Ruby, and JavaScript bindings as well as the Grid and Internet Explorer Driver. Links to everything can be found on our Downloads Page.

Highlights

Huge thanks to all the external contributors who made this version possible:

Austin Michael Wilkins

Austin Michael Wilkins

Andrei Solntsev

Andrei Solntsev

Bartek Florczak

Bartek Florczak

Vikas Goel

Vikas Goel

Kazuki Higashiguchi

Kazuki Higashiguchi

Kazuaki Matsuo

Kazuaki Matsuo

Michael Mintz

Michael Mintz

Nikolay Borisenko

Nikolay Borisenko

Kim Hyeonseok

Kim Hyeonseok

Potapov Dmitriy

Potapov Dmitriy

Shishu Raj Pandey

Shishu Raj Pandey

Tamsil Sajid Amani

Tamsil Sajid Amani

Tony Narlock

Tony Narlock

Henrik Skupin

Henrik Skupin

Using Java 11+ HTTP Client in Selenium 4.5.0 and beyond

We’re happy to share that starting from Selenium 4.5.0, a Java 11+ HttpClient is supported

Current HTTP client used in Selenium

Selenium uses an HTTP client and associated WebSocket client for multiple purposes

  • To send commands to the WebDriver
  • To send commands from the Selenium client library to the Grid
  • For various Grid components to communicate with each other depending on the Grid mode
  • To create ChromeDevTools protocol and BiDi protocol sessions

Currently, Selenium uses AsyncHttpClient. AsyncHttpClient is an open-source library built on top of Netty. It allows the execution of HTTP requests and responses asynchronously. Additionally it also provides WebSocket support. Hence it is a good fit.

Why does Selenium want to move to Java 11+ HTTP Client?

While AsyncHttpClient provides the required functionality, the open-source project is not been actively maintained since June 2021. It coincides with the fact that Java 11+ provides a built-in HTTP and WebSocket client. Selenium can utilize it to replace AsyncHttpClient.

Currently, Selenium Java supports Java 8. Selenium has plans to upgrade the minimum version supported to Java 11. However, it is a sizeable effort. Aligning it with major releases and accompanied announcements is crucial to ensure the user experience is intact.

The Selenium server runs great on Java 11+ already, so while we plan to make that the minimum version in a future release, for now we plan to introduce optional components that can take advantage of modern Java releases.

So as a first step towards this move, the Java 11+ HTTP client from Selenium 4.5.0 and above.

Using Java 11+ HTTP Client in Selenium

Prerequisites:

  • Project configured to use Java 11+
  • Using Selenium 4.5.0 as a minumum version, find the latest in the downloads page.

Integrating the Java 11+ client

Java 11+ HTTP client sits in its own artifact. It can be imported into projects that use Java 11+.

Add the artifact the POM

Add the follow dependencies to your pom.xml

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-java</artifactId>
  <version>4.5.0</version>
</dependency>
<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium-http-jdk-client</artifactId>
  <version>4.5.0</version>
</dependency>

NOTE: In the dependencies above version 4.5.0 is shown, however we recommend you to check the downloads page to use the latest version released. Make sure the versions used are matching.

Set the system property

Set the system property to indicate that Java 11+ Http client needs to be used. By default, it uses the AsyncHttpClient.

 System.setProperty("webdriver.http.factory", "jdk-http-client");

You are all set up to leverage the newly supported client. The user-experience remains the unchanged. Everything else works as expected.

Using the Java 11+ client in Grid

To do that, you will need to download the selenium-http-jdk-client jar file and use the --ext flag to make it available in the Grid jar’s classpath.

The jar file can be downloaded directly from repo1.maven.org and then start the Grid in the following way:

java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar -—ext selenium-http-jdk-client-4.5.0.jar standalone

An alternative to downloading the selenium-http-jdk-client jar file is to use Coursier.

java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar —-ext $(coursier fetch -p org.seleniumhq.selenium:selenium-http-jdk-client:4.5.0) standalone

If you are using the Hub/Node(s) mode or the Distributed mode, setting the -Dwebdriver.http.factory=jdk-http-client and —-ext flags needs to be done for each one of the components.

NOTE: In the dependencies above version 4.5.0 is shown, however we recommend you to check the downloads page to use the latest version released. Make sure the versions used are matching.

Huge thanks to Simon Stewart (@shs96c) for making this possible with his contribution!

Dev and Beta Channel Browsers via Docker Selenium

Now you can test on Google Chrome, Mozilla Firefox, and Microsoft Edge on the Dev and Beta channels using Docker Selenium

The Docker Selenium browser Beta and Dev channel releases are now regularly published to Docker Hub and updated every two days. This enables testers and developers to test their applications on pre-release versions of Google Chrome, Mozilla Firefox, and Microsoft Edge before their official releases, using container tools, such as Docker. This empowers teams to stay ahead of the curve and catch potential showstoppers in their CI environment before those issues have an impact on their users.

What are “release channels”?

Here’s some background on release channels: Google, Mozilla, and Microsoft all maintain different “channels” for their respective browser releases. Most end users use the “Stable” channel. The Stable channel releases have passed rigorous testing, and these versions are considered “production-ready”. Up until now, this was the only option for a tester or developer when using Docker Selenium. Today, we’re pleased to announce teams can also test on versions of these browsers yet to be released to the general population. These are the Beta and Dev channels.

For clarity, here is Google’s description of these 3 channels from their “Chrome Release Channels” page:

Stable channel: This channel has gotten the full testing and blessing of the Chrome test team, and is the best bet to avoid crashes and other issues. It’s updated roughly every two-three weeks for minor releases, and every 6 weeks for major releases.

Beta channel: If you are interested in seeing what’s next, with minimal risk, Beta channel is the place to be. It’s updated every week roughly, with major updates coming every six weeks, more than a month before the Stable channel will get them.

Dev channel: If you want to see what’s happening quickly, then you want the Dev channel. The Dev channel gets updated once or twice weekly, and it shows what we’re working on right now. There’s no lag between major versions, whatever code we’ve got, you will get. While this build does get tested, it is still subject to bugs, as we want people to see what’s new as soon as possible.

Standalone Usage:

To use these new Docker Selenium container images in Standalone mode, run the following commands:

Chrome Beta:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta

Chrome Dev:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev

Firefox Beta:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:beta

Firefox Dev:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:dev

Edge Beta:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta

Edge Dev:

$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev

Selenium Grid

To run these container images in a Selenium Grid, we’ll use docker-compose. For instance, this example shows how to run a Selenium Grid with Chrome, Firefox, and Edge on the Beta channel:

docker-compose-v3-beta-channel.yml:

# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3-beta-channel.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3-beta-channel.yml down`
version: "3"
services:
  chrome:
    image: selenium/node-chrome:beta
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  edge:
    image: selenium/node-edge:beta
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  firefox:
    image: selenium/node-firefox:beta
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  selenium-hub:
    image: selenium/hub:latest
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

To run on the more cutting edge – and hence potentially more buggy – Dev channel, simply replace the “beta” tags with “dev”.

Support

These Beta and Dev images represent pre-release browsers and WebDrivers, and they’re not guaranteed to be 100% stable. Should you run into any issues with these images, support from the Selenium community is limited and is dependent on the browser vendors. However, if you believe the issue is related to Selenium, please contact us in the various support channels.

Scaling a Kubernetes Selenium Grid with KEDA

Scaling Selenium Grid in a Kubernetes cluster with the help of KEDA

The Issue

If you have any experience with Selenium Grid and Kubernetes you will probably run into an issue with scaling. Kubernetes (K8S) works wonders for scaling up and down applications based on their CPU and Memory usage, but it is not so straightforward when it comes down to applications like Selenium Grid.

The issue is described quite well in this blog post. But in short, the Horizontal Pod AutoScaler (HPA) that is built into Kubernetes checks (by default) for resource consumption to determine if a deployment needs to be scaled up or down. This becomes an issue for Selenium Grid for a couple reasons:

  1. The browser pods use a variable amount of resources depending on the demand of the current test. This means that all your browser pods may be in use but there isn’t enough CPU usage for the HPA to decide that a scale-up is needed, leaving tests waiting in the queue unnecessarily.
  2. When Kubernetes decides to scale down a deployment it does so (for the most part) at random. You could have 10 tests running on 20 pods and need to scale down. More than likely at least one of the pods asked to terminate will still have a test running, resulting in connection failures.

How KEDA Helps

KEDA is a free and open-source Kubernetes event-driven autoscaling solution that extends the feature set of K8S’ HPA. This is done via plugins written by the community that feed KEDA’s metrics server with the information it needs to scale specific deployments up and down.

Specifically for Selenium Grid, we have a plugin that will tie into our grid to get the information it needs. Example of the used trigger:

triggers:
  - type: selenium-grid
    metadata:
      url: 'http://selenium-grid-url-or-ip:4444/graphql'
      browserName: 'chrome'

All of this gets saved as a Scaled-Object like so:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: selenium-chrome-scaledobject
  namespace: <namespace of your browser pods>
  labels:
    deploymentName: selenium-chrome-node-deployment
spec:
  minReplicaCount: 0
  maxReplicaCount: 80
  scaleTargetRef:
    name: selenium-chrome-node-deployment
  triggers:
    - type: selenium-grid
      metadata:
        url: 'https://selenium-grid-url-or-ip:4444/graphql'
        browserName: 'chrome'

As an added bonus KEDA allows us to scale our deployments down to 0 when there is no use, something the normal out-of-the-box HPA does not allow.

Check more details at the documentation for Scaled-Object in KEDA.

A full example of how to implement this is further down in the article but KEDA solves one of our two issues. Now we can properly scale up and down based on the actual load on the Selenium Grid. Unfortunately scaling down still results in the likely possibility that a pod is still running a test and is told to terminate before it can finish.

Using PreStop and Drain

To combat this we are going to use a combination of K8s PreStop and Selenium Grid’s Drain functionality.

  • PreStop allows us to set a command or chain of commands that is run to completion before the container is told to stop.
  • Drain tells the selenium browser pod to finish its current test and then shut down.

Together these look like so in our browser pod yaml:

spec:
  template:
    spec:
      terminationGracePeriodSeconds: 3600
      ...
      ...
      containers:
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh", "-c", "curl --request POST 'localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'; tail --pid=$(pgrep -f '[n]ode --bind-host false --config /opt/selenium/config.toml') -f /dev/null; sleep 30s"]

Breaking this down

  • terminationGracePeriodSeconds is set to however long you wish to give your pods to gracefully terminate before being forced. In this case I give the pods 60 minutes to finish their test when asked to terminate. If you are also scaling your cluster nodes as a part of this you may need to increase the termination grace period for your cluster nodes as well.
  • When the pod is told to stop, the PreStop command is ran first.
  • We curl the localhost of our pod to tell it to drain. The pod will no longer accept new session requests and will finish its current test. More information on this can be found in the Selenium Grid documentation.
  • We then tail the internal node process that will continue to run until the node has been drained.
  • After this we give the pod 30 seconds to finish anything else before giving the full termination command.

And with that our application can now safely scale down our selenium browser deployments!

From Start to Finish

Install KEDA

  • You need to use version 2.8.0 or later, you can find the latest version number at the Selenium Grid Scaler docs.
  • kubectl apply -f https://github.com/kedacore/keda/releases/download/<Version_Number_Here>/keda-<Version_Number_Here>.yaml

Create and apply your scaled object(s)

As described earlier your scaled object will look like so:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: selenium-chrome-scaledobject
  namespace: <namespace of your browser pods>
  labels:
    deploymentName: selenium-chrome-node-deployment
spec:
  minReplicaCount: 0
  maxReplicaCount: 80
  scaleTargetRef:
    name: selenium-chrome-node-deployment
  triggers:
    - type: selenium-grid
      metadata:
        url: 'https://selenium-grid-url-or-ip:4444/graphql'
        browserName: 'chrome'

You will need one of these for every browser you wish to scale.

Things to edit:

  1. namespace should be the namespace that your selenium browser pods exist in
  2. deploymentName are the name of your browser deployment
  3. name (within spec) is also the name of your browser deployment
  4. url is the url of your selenium grid
  5. browserName is the name of the browser you are using
  6. minReplicaCount and maxReplicaCount are the min and maximum pod count you want to have

If you plan to scale with Edge you will need at least version 2.8.0 of KEDA and will need to include sessionBrowserName as well in the trigger metadata:

triggers:
    - type: selenium-grid
      metadata:
        url: 'https://selenium-grid-url-or-ip:4444/graphql'
        browserName: 'MicrosoftEdge'
        sessionBrowserName: 'msedge'

This is due to a name change between the Edge sessions in the queue and the active sessions and is addressed through this pull request.

Once you have that ready just save it as a yaml file and apply with:

  • kubectl apply -f ./<scaled-object-file-name>.yaml --namespace=<browser_namespace>

Add PreStop commands to your browser pods

  1. Set your terminationGracePeriodSeconds of your deployment to whatever the maximum time you wish to give the pods in order to terminate gracefully. Again you may need to also increase the grace period for your nodepool as well which will vary depending on your K8s provider.
  2. Add the PreStop command to the container lifecycle spec:
spec:
  template:
    spec:
      terminationGracePeriodSeconds: 3600
      ...
      ...
      containers:
        lifecycle:
          preStop:
            exec:
              command: ["/bin/sh", "-c", "curl --request POST 'localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'; tail --pid=$(pgrep -f '[n]ode --bind-host false --config /opt/selenium/config.toml') -f /dev/null; sleep 30s"]

That is it, your Selenium Grid pods should now scale up and down properly without any lost sessions!

Selenium 4.4.0 Released!

Today we’re happy to announce that Selenium 4.4.0 has been released!

We’re very happy to announce the release of Selenium 4.4.0. We’re shipping this for Java, .Net, Python, Ruby, and JavaScript, so if you’re using any of those languages, go and grab it from your package manager of choice!

Some of the main highlights are:

  • Adding support for CDP released in Chrome v104, while v101 was removed
  • Virtual authenticator feature was completed across languages.
  • All language bindings will throw an error when w3c: false is set in ChromeOptions
  • Improved health checks and requests with non W3C locators for Relay Nodes in Grid

Check the complete changelog and download the artifacts at the Selenium 4.4.0 release in GitHub or directly from the Selenium site.

Huge thanks to all the contributors who made this version possible:

praveendvd

praveendvd

Bogdan Condurache

Bogdan Condurache

Andrei Solntsev

Andrei Solntsev

Alex Rodionov

Alex Rodionov

Boni García

Boni García

Ravi Sawlani

Ravi Sawlani

jsfehler

jsfehler

elgatov

elgatov

Valery Yatsynovich

Valery Yatsynovich

Yusuke Noda

Yusuke Noda

Kevin Dew

Kevin Dew

Brandon Walderman

Brandon Walderman

Nikolay Borisenko

Nikolay Borisenko

Robert Fletcher

Robert Fletcher

Simon K

Simon K

Yevgeniy Shunevych

Yevgeniy Shunevych

Tamsil Sajid Amani

Tamsil Sajid Amani

Tony Narlock

Tony Narlock

Sri Harsha

Sri Harsha

Test Automation Summit Berlin

An event to improve contributions to and collaboration among open source WebDriver based projects

Have you ever wanted to contribute to an open source testing project, but couldn’t figure out where to start? If so, fill out this form to apply for an invitation to join the Open Source Test Automation Summit on August 26 in Berlin, sponsored by Selenium and hosted by Sauce Labs. You can review the list of available projects below and select the one that you’d like to contribute to. We’ll be in touch soon if you are selected to join us.

Update 7/22/2022: Application deadline is July 28! We’ll contact everyone by Friday, July 29.

This will not be your typical workshop. This will be a working session with one or more maintainers of a given project to show you exactly what you need to know to contribute to that project. Selected participants will be required to bring a laptop capable of executing Selenium tests, including a working dev environment for the applicable programming language.

This is a new idea we’re trying out, so space is very limited. If there is sufficient demand we will consider doing more events like this in the future.

Objectives

At the end of the session you will be able to:

  • Build the project on your computer
  • Execute the existing test suite for the project
  • Write new tests for the project
  • Add a feature or fix a bug

Agenda (subject to change)

StartEndActivity
09000930Breakfast
09301000Talk: “State of WebDriver Ecosystem”
10001100Lightning talks about participating projects
11001200Split into working groups and walk through projects
12001300Lunch
13001630Continue with working sessions
16301700Wrap up
1700Happy hour

Participating Projects

The following maintainers are will be present to assist you in working on their project:

MaintainerProject(s)
Andrei SolntsevSelenide
Boni GarciaWebDriverManager
Christian BromannWebdriverIO
David BurnsW3C Web Platform Tests, Selenium
Diego MolinaSelenium
Filip CynarskiFluentLenium
Jan MolakSerenity/JS
Jani MikkonenRobot Framework
Nick MokhnachAppium
Ronald BrillHTMLUnit Driver
Simon StewartSelenium
Titus FortnerWatir, Selenium
Yevgeniy ShunevychAtata

Update 7/20/2022: Ronald Brill, maintainer of HTMLUnit Driver will now be joining us!

Update 7/25/2022: Yevgeniy Shunevych, maintainer of Atata will now be joining us!

Update 7/26/2022: Simon Stewart, creator of WebDriver, will now be joining us!

Other Projects

Do you maintain an open source project in the WebDriver ecosystem?
Have you written a test framework that uses Selenium that is (or you want to make) open source?
Please fill out this form (provide additional relevant details in the comments), and we will be in touch about future events.

Removing Legacy Protocol Support

Selenium 4.9 will only support W3C compliant WebDriver syntax

The Selenium team prides itself on how seriously it takes backwards compatibility. A lot of care has gone into the Java bindings, especially, to ensure very few breaking changes over the years. There is Selenium code written 15 years ago that can still run with Selenium 4 libraries! Providing this exceptional amount of support comes with a large maintenance burden, though, and we need to be able to properly meet the needs of the vast majority of our userbase.

TL/DR:

  • Support for the legacy JSON Wire Protocol will be removed from Java Selenium 4.9 (other languages have already removed this support)
  • Protocol conversions will stop in Selenium 4.9 Grid
  • You can ensure your sessions are W3C compliant by using Browser Options classes instead of the deprecated Desired Capabilities classes (and avoid using “set capability” methods directly)
  • If you rely on the current protocol conversion functionality, and it works for you, you can continue to use it with Selenium Grid 4.8

By far the biggest challenge in the past seven years of Selenium development has been transitioning the underlying implementation from the legacy JSON Wire Protocol to the new standardized W3C WebDriver Protocol. Because the WebDriver specification was being actively developed at the time, Selenium 3 supported both protocols simultaneously. We implemented “handshake” code to determine which protocol to use. When starting a session, Selenium would package the provided capabilities in both legacy and W3C formats, send them to the driver/server, and use whichever protocol was returned. This worked well for the most part. For many users, no changes were necessary to get W3C compliant sessions from new browsers (Firefox 47+ and Chrome 75+).

For the Java bindings, it was decided to take this approach one step further. Instead of just sending along what was provided in both formats, the code converted capabilities from the legacy protocol to the W3C protocol on behalf of the user. The Selenium Grid makes use of this code, so, regardless of which client language sends legacy capabilities to it, the Grid translates it to the W3C protocol for communication with the driver and then re-translates the results back to the legacy protocol. Because the code must make some assumptions and guesses for this to work, there are a lot of frustrating edge cases.

For Selenium 4.0, the Ruby, JavaScript, and .NET bindings, each removed the handshake code, so no legacy commands are used. Due to some issues that couldn’t be resolved before freezing the 3.x code, Python is waiting until Selenium 4.9 to remove its handshake code. The Selenium team intended to continue to support both protocols in the Grid and Java bindings throughout the 4.x releases, but running test suites written for Selenium 2 on the Selenium 4 Grid resulted in a larger than expected number of failures. Half a dozen bugs were discovered, some with a large effect.

The code in question is sufficiently complex that fixing the bugs without causing new problems would be a significant challenge. As such, we’ve decided to start simplifying the code base again by explicitly not supporting capabilities and commands from the legacy protocol in any of the Selenium codebase. If you are using the latest version of Java Selenium, everything that will be removed has already been marked deprecated, so double-check your usage to ensure there aren’t any surprises.

If you’re interested in the nitty-gritty details of some of the issues we found exploring this problem, you can look at the discussion in Selenium Issue #10374.

For more information on ensuring compatibility with the Grid, please follow our Selenium 4 Upgrade Guide

Locate your locators - Python bindings changes upcoming

Updating your locators for changes in the Python bindings in Selenium 4

In real estate, the mantra for finding a new house or office space is “location, location, location!”. It could be said that when working with Selenium, a critical aspect of writing tests is “locators, locators, locators!”. Having a robust locator strategy - in your app under test and in your test framework - is highly important for effective testing.

If you are a Pythonista like myself and using Selenium for your test automation, then there are some important changes coming to how locators are defined and used.

Sometime after Selenium 4.2, the Python Selenium bindings will remove locator-specific methods for finding elements. This means that the methods

driver.find_element_by_id("some_id")
driver.find_element_by_name("some_name")
driver.find_element_by_tag_name("some_tag")
driver.find_element_by_css_selector("some_selector")
driver.find_element_by_class_name("some_class")
driver.find_element_by_link_text("some_text")
driver.find_element_by_partial_link_text("some_other_text")
driver.find_element_by_xpath("some_xpath")

will be removed. All of these methods are in fact special cases of

driver.find_element(By_object, "some_locator")

so this approach is now preferred (required, even) with the Python bindings.

Note that it’s good practice to use the By object which has specific values for using particular locator strategies. For example, this line

driver.find_element_by_id("submit_button").click()
driver.find_element_by_css_selectors('.myelement child').text

becomes

driver.find_element(By.ID, "submit_button").click()
driver.find_element(By.CSS_SELECTOR, '.myelement child').text

If you’re really desperate however you can use strings instead of the By object:

driver.find_element('id', "submit_button").click()
driver.find_element('css selector', '.myelement child').text

If you have any plans to upgrade your Selenium client for your Python tests to recent versions of Selenium 4, definitely keep these changes in mind. It’s a good time to update your locator strategy and structure.

(This article was originally posted here. Thanks to the Selenium core contributors for adding this here!)

IE Mode in Edge supported by IEDriver

Support for IE Mode in Edge with IEDriver

With the retirement of Internet Explorer 11 (IE 11) later this year, the folks in Redmond have helped the Selenium project with getting IE Mode in Microsoft Edge working in IEDriver.

IE 11 is due to retire on 15 June 2022 for certain versions of Windows 10. After this date, the Selenium project recommends that you test your IE sites with IE Mode in Microsoft Edge. The Selenium Project will not remove support for IE 11 when it retires but we will not actively fix issues as we have done with previous versions of IE.

The Microsoft Edge team have committed to supporting IE Mode in Edge until 2029 when support for Windows 10 is retired.

Microsoft have written up all the details on how to use and how to migrate your site and we recommend you go read and follow their steps to make sure you’re ready.

Blog Posts - 2021

Improving & refining our Docs translations

We are refining our docs content with help from the community!

A while ago, we started to make the Selenium documentation available in more languages. This, in an effort to offer a more inclusive environment for Selenium users who do not have English as their mother tongue.

This effort grew organically, and we got many pull requests adding content for different languages. Over time, some translations got to a very good state, and others didn’t get much attention. This brought the situation where 9 different languages are available in the documentation, but only a few add value to the readers.

To understand which languages are getting visits, we started using Plausible. After a few weeks, we combined the information collected by the analytics tool with the translated percentage per language, and we got the following:

Here’s the number of visitors on the landing page for a given translation in the past 2 weeks, and the percent of documentation pages translated:

LanguageVisitorsTranslated
ja1,70086%
zh-cn1,50086%
es40942%
fr20331%
pt-br18987%
de8865%
ko7968%
nl226%

This shows that the most used languages (aside from English) are Japanese and Chinese, and that the language that has translated most of the content is Portuguese.

Based on this data, we decided to create a new role in the Selenium project: translators. This role will help the project keep in shape the different translations available. Together with that, we are also putting on hold the other available translations until we find volunteers for each language.

If you have any questions or comments, please reach out through any of all the available options shown at our support page.

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Stepping Down, Stepping Up

Simon is stepping down as lead of the Selenium project. What happens next?

The short version is that I’m stepping down as the Selenium project lead, and will concentrating on pushing WebDriver Bidi forwards. Fortunately, the Selenium TLC have already been steering the project for a while now, so it’s in excellent hands. With Selenium 4 now shipped, the project has a new energy and enthusiasm about it. The future is bright, and I’m looking forward to seeing what it holds.

The longer version? Well, that’s more personal. Let me start at the beginning….

On the 3rd January, 2007 I pushed the initial commit of “WebDriver” to a public repo. I helped with the Selenium 1.0 release, and at the same time made sure that WebDriver emulated the original Selenium RC APIs (in code that lives on to this day). In 2009, Jason Huggins and I merged the Selenium and WebDriver projects, and I took over the leadership of the project. I’ve been the lead for every version of Selenium since then, often being the person who tagged each release in source control, all the way up to the recent Selenium 4 release.

By the numbers, that’s

  • 14 years of WebDriver
  • 12 years of Selenium for me
    • Though the first Selenium commits were in 2004
  • 1 10 year birthday celebration
  • Approximately 130 Selenium releases.
  • I’ve landed just over 5100 commits
    • Which is about 20% of all the changes made to Selenium over the years.
  • 3 different source control systems
  • 5 build systems
  • 14 Selenium conferences
  • 696 different people contributing to the project.

In a way, I blame Michael C for this. He and I worked together at ThoughtWorks in Australia, and had been working with HttpUnit. My assertion was that its API was fine. His was that it should be more Object-Oriented. To explore the idea, I started writing an OO wrapper around HttpUnit, and (of course!) Michael was right.

Or maybe it’s Joe Walnes who I should be talking about. At about the same, he’d been exploring a similar kind of design, but where my API had a Browser, his had the far better sounding WebDriver, and he was generous enough to allow me to use the same name in my next iteration of the idea.

Or, perhaps, it’s Paul Hammant and ThoughtWorks. Paul was the one who suggested Open Sourcing what was then “WebDriver” under the Apache 2 license, and ThoughtWorks supported the decision to make the code available to the world.

In any case, on that day in 2007, I was sitting on the sofa with a glass of red wine, creating the project on Google Code, and thinking (if I was thinking deeply at all) that it’d be nice to get the code out there, and in six months it’ll probably be over. There was absolutely no way I could dream that the project would grow far beyond me, emerging from the Cambrian explosion of the early days of web testing to become first an industry-wide de facto standard, and then, through the work done in the W3C, an actual standard. It’s the only browser automation API that all the browser vendors support.

During these past 14 years, Selenium has been one of the constants of my life. I joke sometimes that I’ve known it longer than my wife and my son, but is it a joke if it’s true?

Why spend that much time and effort on Open Source? On something that you give away for free? Because it’s just been so incredibly rewarding. I’ve had a chance to meet people from all over the globe, work with amazing people from a range of companies I’d never have a chance of working with normally, learn and practice skills I wouldn’t have had a chance to exercise, and to write code that makes people’s lives just a little bit easier.

Most importantly, Selenium has been the way that I’ve met some of the best friends I have in my life. I’ve been very lucky.

I’ve also been lucky to have met and been part of the Selenium community. The conferences and meetups have been a fantastic way to hear about how people are using the tool, and I am constantly impressed by how inventive and thoughtful people can be. The conversations I’ve had at those events have changed how I think about all sorts of things, and not just code. The IRC and Slack channels are vibrant and interesting places to be. There are folks who are there regularly who I’ve never met in person, but who I feel I could count as friends.

Who knew that Open Source could be the source of so much that makes a life bright?

But today, I’m stepping down as the project lead, and will be away from the project until summer, though (in the true spirit of this project), I’m not sure which year.

Why, if all I said above is true, am I stepping down?

The major reason is that the things I like to do, and that I’m good at, are not the things that the project needs right now. It would be hubris to believe that no-one else could do as good a job, particularly when I know how amazing so many people on the project are.

The other reason is that I’m tired. For the past 14 years, much of my free time, as well as hours within work, has been spent working on Selenium. There are other projects and interests I’d like to pour some energy into (just ask me how my Turkish lessons are going!)

In my absence, the project’s “Technical Leadership Committee” will continue to be setting the direction of the project. I’ve been listening to the discussions about where the project can go: it’s going to be brilliant.

That is, while I’m stepping down, the rest of the TLC will be stepping up. They’ve already been running the project for a while. They’ll continue the work we’ve started and carry it forwards and upwards. If you’re reading this, and want to get involved, step in and join the fun. Now’s the perfect time.

When I took over as lead of the Selenium project, Paul joked that he had thrown me the keys and run in the opposite direction. I guess it’s my turn to do that now!

Before finishing, I’d just like to say a heartfelt “thank you” to everyone who’s been involved in the Selenium project. To everyone who’s contributed in some way, or used the code we’ve written, thank you. To everyone who’s filed a bug, thank you too. To all the people who I’ve had the pleasure of so many conversations with, that I would never have met without Selenium, thank you. To my family, who’ve supported me and understood with endless patience that Selenium is a part of our lives, thank you. And to my friends on the project, an extra meaningful thank you.

I won’t be here, but I won’t be far. See you all soon.

A Tour of 4: New Commands

There’s more to Selenium 4 than just the server

Before we ship Selenium 4, I thought it would be nice to introduce some of the new features in-depth. Of course, all of the features we’re covering are in the main WebDriver documentation, so if you’re not one for reading blog posts, then feel free to dive in there!

You may well be familiar with how to start a Selenium server: you just do something like java -jar selenium-server-4.0.0.jar standalone and away you go! But with Selenium 4, there are some more things you can do with this jar.

Least obviously, the server jar is an exectuable on its own. If you’re using Linux or macOS, and have Java installed, you can make the jar executable (eg. chmod 755 selenium-server-4.0.0.jar), rename it to something like selenium and put it on your $PATH. That way, rather than writing java -jar ... you can simply run selenium.

Now you’ve done that, if you run selenium with selenium --help you’ll get a handy list of the available sub-commands you can execute. There are the old favourites, such as standalone (for starting a standalone selenium server), and hub and node (for starting a Selenium Hub and Node setup), but there are other interesting commands that are new to Selenium 4.

The first of these is info. We’ve added this to provide easy to find and access documentation on common tasks when using the selenium server. If you run selenium info on its own, you’ll see something like this:

Info
====

You can find out more about topics concerning Selenium Grid by running the
"info" command followed by: 

* config - Help on how to configure Selenium
* tracing - Help on how distributed tracing works with selenium
* security - Help on how how to secure communications to and within selenium
* sessionmap - Help on different types of sessionmap and how to start them.


Each topic will give you enough information to help you get started, and contains
some pointers on our site to provide more complete information. 

To get more information on a particular topic, just add the name of the topic, for example selenium info security. The hope is that this will make it less daunting to deal with Selenium, and give you a great place to get started with some of the more complicated topics around running a Selenium Grid.

Although it’s incredibly flexible, the selenium command offers a daunting list of command line flags. How are you supposed to remember them all? You’re not! Instead, let selenium completion take the strain for you. If you’re a zsh user, then just source <(selenium completion zsh), and now you have tab completion for the sub-commands, as well as for all the flags, including examples of how to use them.

And, finally, there are some hidden flags. We hid them because they can be a little bit confusing to use or understand what they’re meant to do, but one that can be very useful when debugging how your Grid is configured is the --dump-config flag. When run with a server command such as standalone or hub, it will dump the configuration options used by the Grid as a JSON blob. This can be helpful for tracking down subtle issues with configurations, especially when using environment properties for configuration.

Announcing Selenium 4

Selenium 4.0.0 is released! Get it while it’s hot!

It’s with very great pleasure that we are announcing the release of Selenium 4. This is available for Java, .Net, Python, Ruby, and Javascript. You can download it from your favourite package manager or right from GitHub!

If you’re already a Selenium user, this update should be as easy as just changing your dependency from 3.x to 4.0.0. We’ve worked hard to ensure that this is a “drop-in” upgrade, having focused on keeping the public APIs as stable as possible.

Of course, we’ve made changes, so if you relied on code that was marked as internal to Selenium, or that was deprecated, you might experience some hiccups. Please check our documentation for advice on how to deal with each of the common problems we’re aware of.

But there’s more to Selenium 4 than just being a stable release of what was there before! It brings a whole host of new and exciting features that we hope will make your tests more fun to write, and more stable when you run them. Let’s take a look at some of them!

We’ve introduced “relative locators”. These allow you to specify where on the page an element can be found using language that people use too; things like “above that element”, or “to the right of this other element”. This will hopefully provide you all with a tool to fight against incredibly complex locators, making your tests read a little more clearly, and being more resilient to changes in the page’s DOM. We’re not the first ones to come up with this idea – that honour belongs to Sahi – but if you’ve not used them before, we hope you like them!

If you’re using Firefox or a browser that is derived from Chromium, we’ve added a slew of new capabilities too. These include ways of handling “basic” and “digest” authentication, Network Interception (Are you an HTTP 418?), and also performing commonly requested tasks, like waiting for a change in the DOM, or providing a way to look at Javascript errors.

We’ve added these new features in a way that fits in with our existing APIs. There’s no need to rewrite your tests: just use the new features when it feels right to you.

We have also rebuilt the Selenium Grid, taking lessons from successful projects such as Zalenium and Selenoid to enhance the capabilities. This new Grid runs just as well as a single process, running on a single machine, as it does in the traditional “hub and node” configuration, but it also supports a fully-distributed mode, for use in modern infrastructure running Kubernetes. It has better security baked-in, because we know that securing a Grid can be a difficult task. And at all of these scales and sizes, all the new features we’ve added to the language bindings will work as expected.

The Grid can also manage Docker containers on your local machine, pulling images such as the standalone firefox server so your infrastructure maintenance becomes just a little bit less taxing.

Finally, the Grid is easier to manage. We’ve revamped the UI, placing it on top of a GraphQL model that anyone is free to query and make use of to create their own visualisations or monitors of the Grid. If you’d like to peek into a running session, there are live VNC previews you can open and interact with, providing even better insight into what’s been going on. And if you want even more information, we’ve integrated support for OpenTelemetry into the Grid, so now you can find out exactly what’s happening, where, and when.

I know it’s a cliche to say that it’s a “very great pleasure”, but, being honest with you, it genuinely is. Working on this new version of Selenium has been a chance to work with some amazing engineers, and to be part of a vibrant and energetic community. It’s been a lot of fun to write this code, with these people, and it feels right to say “thank you” to as many of them as possible here. So, without waiting any longer….

We would like to thank all of our users who have helped Selenium be successful over the years. Without you we wouldn’t be where we are today. We would also like to thank all the contributors who have submitted Pull Requests, your contributions make Selenium better. For everyone who’s taken the time to file an issue, and to let us know where there’s been a problem: thank you. We only have a chance to improve when we know that there’s something that needs work!

And finally, thank you to all the Selenium Committers, BrowserStack, Sauce Labs, and our Selenium-Level sponsors for getting this release ready for our users.

We hope you enjoy Selenium 4, and we can’t wait to see what you do with it!

A Tour of 4: Authentication

Introducing how Selenium 4 handles authentication

Before we ship Selenium 4, I thought it would be nice to introduce some of the new features in-depth. Of course, all of the features we’re covering are in the main WebDriver documentation, so if you’re not one for reading blog posts, then feel free to dive in there!

The first thing I’d like to introduce you to is Selenium 4’s new-found ability to authenticate to websites. We’ve always been able to handle “form-based” authentication, where a login page has some INPUT elements that you need to enter the user name and password, but handling sites that use basic or digest authentication has always been harder. When using Selenium 3, the advice has been to get the login cookie and set it on your session before accessing the site, but you can now just call a register method to add a user name and password (or, in the future, other kinds of authentication credentials)

In short, in Selenium 4, the process has become less complicated. Perhaps an example will help?

// This "HasAuthentication" interface is the key!
HasAuthentication authentication (HasAuthentication) driver;

// You can either register something for all sites
authentication.register(() -> new UsernameAndPassword("admin", "admin"));

// Or use something different for specific sites
authentication.register(
  uri -> uri.getHost().contains("mysite.com"),
  new UsernameAndPassword("AzureDiamond", "hunter2"));
  
driver.register(username: 'admin', password: 'admin')
  

Once you’ve done this, every time the driver loads a page that needs authentication, it will automatically use the user name and password you’ve given it.

This feature is currently implemented on top of Selenium 4’s CDP support, and so only works on those browser that support that protocol, but as we push forwards with development of WebDriver Bidi implementations will switch to that when they can.

Selenium 4 Release Candidate 2

The second (and last!) release candidate of Selenium 4 is here!

We’ve listeneed and responded to the feedback from the first release candidate of Selenium 4, and we’re now happy to announce the second release candidate of Selenium 4. This is shipping for .Net, Java, Python, Ruby, and Javascript, and it’s available from all the popular package managers. Go! Try it out!

Unless we encounter a very serious issue or bug, this is likely to be the last release before we push Selenium 4.0.0 itself. What does this mean for you? It’s your last chance to try it on for size and let us know if there are any problems.

In this release, we’ve fixed a nasty issue where closing the first window would cause CDP-related features to break, and have landed a few other cleanups and fixes.

If you’re a Firefox user, please make sure you’re using the very latest version of the geckodriver If you don’t, there may be problems starting sessions as we rely on new features that are included in this new geckodriver release.

If you’re new Selenium 4, then you may want to read this blog post, which explains more, but you might want to have a look at:

  • Relative locators, which provide a way of finding elements by where they are in relation to one another (like “above”, or “to the right of”)
  • Authentication on websites using basic or digest authentication
  • Network interception, which provides an easy easy way to capture and modify HTTP traffic from the browser, as well as making it possible to get HTTP status codes.

Thank you to everyone in the community who’s given us so much helpful and thoughtful feedback on the first release candidate. We really hope that you enjoy this release candidate too!

Selenium 4 Release Candidate

We’re very happy to announce the first release candidate of Selenium 4.

We’re very happy to announce the first release candidate of Selenium 4. We’re shipping this for .Net, Java, Python, Ruby, and JavaScript, so if you’re using any of those languages, go and grab it from your package manager of choice!

This release is the result of a lot of work by the Selenium team project, but most importantly, all the Selenium community who tried our beta releases, and gave us great and valuable feedback.

One thing you may want to do to get ready for the update (which you can do before updating the dependency itself!) is to update the drivers you need. In particular, please update geckodriver to 0.29.1 or later.

Most of the new features in Selenium 4 are mentioned in this blog entry, but the main highlights are:

  • Relative locators, for finding elements using terms that make sense to us humans.
  • The ability to intercept network traffic
  • Authentication with basic or digest authentication.

If this sounds interesting, please download the release candidate from your favourite package manager (maven, nuget, npm, pip, or the gem), or directly from the Selenium site.

All Selenium downloads are now available on GitHub releases

We are happy to announce all Selenium are available on GitHub releases.

We announced on a previous entry our decision to move all binaries from Google Storage to GitHub releases. Today, we would like to announce that this work has been completed and all binaries are also available to be downloaded in each one of the releases we have done in GitHub.

In addition to that, all links on our downloads page have been updated, as well as all references to Google Storage in the Selenium code base.

Please note that all past releases will be available both in Google Storage and GitHub releases, but new ones will only be present in GitHub releases. We recommend everyone to modify your download scripts to keep all tooling up to date.

If you have any questions or comments, please reach out through any of all the available options shown at our support page.

Stay tuned for updates by following SeleniumHQ!

Happy testing!

Selenium downloads will move to GitHub releases

We are moving all Selenium binaries from Google Storage to GitHub releases.

Thanks to Google, Google Storage has been the central place where we have been able to upload all binaries created for each Selenium release, and the place where the Selenium community can download them from. To do so, all people needed to do was visit our downloads page, find the release, and download from there!

The Selenium project hosts its source code on GitHub, and people who are familiar with GitHub know that they can go to the “release” page there to find any downloads for each release of a project.

Rather than hosting the downloads in two places, the Selenium project has decided to host everything on GitHub. We’ll still have links from the download page, but rather than pointing to Google Storage, these will now point to the downloads for each corresponding release tagged on GitHub.

All past releases will be available both in Google Storage and GitHub releases, but new ones will only be present in GitHub releases.

If you are a watcher of the Selenium repo, please note that there will be some noise in your inboxes. We need to create releases for old tags in order to upload the binaries to the release (as is the way GitHub releases work), and we expect to complete this in the next couple of weeks.

If you have any questions or comments, please reach out through any of all the available options shown at our support page.

Stay tuned for updates by following SeleniumHQ!

Happy testing!

The Selenium website has a new look!

We’re very happy to announce the new look for the Selenium website!

We have been working hard during the last few weeks redoing our website. Today, we are very happy to share it with the community and we are hoping to get as much feedback as possible!

We did a major revamp to our website two years ago. However, this revamp had some “technical debt” in it…

We use Hugo to generate our website, and to build a website with Hugo, one normally needs to select a Hugo theme. Our previous website was being built using two different Hugo themes, which was less than ideal. Having two Hugo themes was hard to maintain and accepting contributions was tricky in some cases.

This new website version is using the Docsy theme, made by some folks at Google and used by other popular projects such as Apache Airflow and Kubernetes. Using Docsy helps us to focus more on the website’s content rather than spending lots of time maintaining the underlying details of it.

We all hope you will like the new look and please check our contribution guidelines if you want to contribute to the Selenium website.

Happy testing!

Public Project Meeting - July 15, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on July 15, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:00 PM

Here is the agenda proposal:

General project statistics

“se:cdpVersion” is missing in C# and JS

Can all bindings do CDP over Grid?

  • What are the features present in Selenium 4?

Do all bindings implement them

9:01

@AutomatedTester @Puja Jagani @barancev @jimevans @titusfortner @p0deje @harsha509 please tag the ones I forgot

Titus Fortner 9:02 PM

Documentation theme change update

9:03

(I know you’ve been busy)

David Burns 9:04 PM

The python ci will be green today

Diego Molina 9:04 PM

ok, so let’s start

Regarding bugs we had, with @Puja Jagani we fixed the queue issue, so now the Grid runs enough sessions in parallel

9:05

but we still have 3 open issues, mentioned in the agenda

the timeout one has proven to be hard to reproduce, and therefore fix

David Burns 9:05 PM

I was able to reliably recreate the timeout issue. We were hitting issues in chrome that makes us think chrome is breaking

Diego Molina 9:06 PM

really? The original issue is reported with Firefox

David Burns 9:06 PM

Well, I am getting the timeout message, like with Firefox, with chrome 91

9:07

And it’s like the browser tab has hung/crashed and it manifests

@Puja Jagani has the script and I will help reduce if I can

Simon Stewart 9:07 PM

I need to do some rework of NetworkInterceptor to allow everything to be intercepted

9:08

And I think https://github.com/SeleniumHQ/selenium/issues/9594 is fixed by https://github.com/SeleniumHQ/selenium/commit/0795e78559924be1b69b4c8051f5185f289a4268 #9594 Hub reporting no available nodes after a few hours https://github.com/SeleniumHQ/selenium|SeleniumHQ/seleniumSeleniumHQ/selenium | Apr 8th | Added by GitHub

Diego Molina 9:08 PM

I think @Puja Jagani saw the issue this morning, and she said she was having a look

Simon Stewart 9:09 PM

Darn it. I thought we had it fixed

Though we don’t handle the case automatically. I manually tweaked things to make that work

David Burns 9:09 PM

Shoutout to Puja for looking at ALL THE THINGS

Simon Stewart 9:10 PM

+1000

Diego Molina 9:11 PM

aside from those two, now looking into the IE issue with Grid\

as the Grid is sending and invalid JSON to the IEServer

Jim Evans 9:12 PM

um, se:cdpVersion was implemented in .NET in f10cb89

Simon Stewart 9:12 PM

Woot!

Diego Molina 9:12 PM

great, I will update that item :tada:

on the client side, we still need to find time to build the feature parity doc

9:15

Aside from those items, I can give an update on the new (or reworked) website

9:16

I’ve been spending 1-2 hours per day, for now I am only building the website as it is, not digging into the docs yet

Titus Fortner 9:16 PM

“digging into the docs” == “updating the docs theme” ?

Diego Molina 9:16 PM

so, everything below the about menu is already implemented

Titus Fortner 9:16 PM

or writing the docs

Diego Molina 9:17 PM

and I still need to create pages for these links

Titus Fortner 9:18 PM

that all looks great!

Diego Molina 9:18 PM

to bring context, our website is made from two different Hugo themes, glued together during the build process and a few hacks in between

I’ve found https://www.docsy.dev/ a good alternative since it offers a good theme that can contain both things in one

9:19

this requires to recreate our website using the docsy theme, this part is around 60% done then we need to migrate the existing docs into the new theme

9:20

migrating the docs could be done as a task of copying and pasting or we could see it as a chance to reestructure and organise the existing content, and adding a few things more

9:21

if we want to reestructure, it would be nice to see proposals (like a global TOC with brief descriptions of each item)

9:21

then we can reuse what we have currently, and add what is missing

Titus Fortner 9:22 PM

So code snippets would look like this: https://gist.github.com/harsha509/e690dd2c72f1f5c5785be4c8a47c87fd

Simon Stewart 9:22 PM

Lift and shift first, rework second

Diego Molina 9:22 PM

code snippets is an implementation detail

Simon Stewart 9:22 PM

(That is, let’s open the door to contributions first, then figure out how things should be shaped)

Titus Fortner 9:22 PM

I get it’s implementation

9:23

but that’s the piece I can help with :slightly_smiling_face:

Diego Molina 9:23 PM

right now they look similar to that, so it could be a matter of adjusting things

9:24

ideally, the future for code snippets is to render code stored in GitHub, so we can execute it in GitHub actions for example

Titus Fortner 9:25 PM

I guess the question I had about it (what I tried to figure out a few months back and failed) is if there’s a way to point to a repo like you & Christian built for Docusaurus :smile: (another implementation detail) But… there’s nothing preventing us from writing that code now and figuring it out later

David Burns 9:25 PM

I like rust for this reason… when you run tests it also tests the doc snippets

Titus Fortner 9:25 PM

@p0deje implemented that for Ruby

9:26

it’s really neat

I’ll try to find time to propose something here and try to get feedback from people smarter than I am about these things https://seleniumhq.slack.com/archives/CBH302726/p1626364266427200

Diego Molina

if we want to reestructure, it would be nice to see proposals (like a global TOC with brief descriptions of each item) Posted in #selenium-tlc | Today at 9:21 PM | View message

Diego Molina 9:28 PM

all WIP is committed, so if someone wants to have a look, please check https://github.com/SeleniumHQ/seleniumhq.github.io#wip-moving-to-hugo-docsy-theme

SeleniumHQ/seleniumhq.github.io Official Selenium website and documentation Website https://selenium.dev/

Titus Fortner 9:29 PM

Nice work on all of that

Simon Stewart 9:29 PM

Agreed. Excellent work, @diemol. Thank you

Diego Molina 9:29 PM

hopefully I can have the site migrated in a couple of weeks, then we have focus on the docs

9:30

I do not have any more topics, does anyone have something else?

Titus Fortner 9:31 PM

Hopefully I’ll have all my ${paidWork} code in a good place at that point to take a break

9:32

I also promised the chromedriver team that I’d help fix up their Ruby code

Lots of things to update

9:33

Right now I’m busy updating all of my Java test examples from JUnit 4 to JUnit 5 thanks to @Puja Jagani

Diego Molina 9:36 PM

ok, so it seems we are done with today’s public meeting, thank you everyone!

Public Project Meeting - June 17, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on June 17, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 8:52 PM

Here is the proposed agenda:

General project statistics

  • Previous meeting: 167 open issues, 28 open pull requests
  • Currently: 170 open issues, 23 open pull requests

Pending work for the RC 1?

Language bindings

  • “se:cdpVersion” is missing in C# and JS
  • Can all bindings do CDP over Grid?
  • What are the features present in Selenium 4?
  • Do all bindings implement them?

Release process

After beta 4, we should document how each binding and the Grid are released

Selenium IDE

8:56 PM

btw, there is no hurry to start, we can also start when most folks are available, I believe this won’t be a long one

Diego Molina 9:01 PM

Just a comment from the increased number of issues… I believe users are starting to give more feedback, so that’s good

9:05 PM

I believe we can slowly jump into the first topic: Pending work for the RC 1?

9:06 PM

Regarding the Grid, I would say it is feature complete

9:07 PM

but we have a couple of bugs we are checking with @Puja Jagani

9:08 PM

I think we can sort them out during the next week (fingers crossed :slightly_smiling_face:)

Diego Molina 9:13 PM

talking about the language bindings, I think the most relevant thing for RC1 is to check feature parity

Titus Fortner 9:14 PM

@AutomatedTester did the shadow Dom work you did end up in geckodriver /Firefox yet?

9:15 PM

I know some bindings implemented the endpoints already

David Burns 9:15 PM

No, it’s nearly done

Maybe I should hand it to the Mozilla folks and maybe they could finish it off

Titus Fortner 9:15 PM

I kind of wanted to wait until I could make sure tests passed and stuff because I never trust myself :)

David Burns 9:16 PM

There is an issue with something between marionette and geckodriver but those are super hard to diagnose

Titus Fortner 9:17 PM

There were some accessibility endpoints? I’m not sure we’ve all added. And I think ruby deprecated methods that other languages implemented with JS

I’ve been meaning to do a deeper dive into the various tests, but haven’t gotten there yet. Ruby broke CDP in last beta release, we need to figure out

9:21 PM

We probably need to do a beta 4.1 just for ruby with that fix

Diego Molina 9:22 PM

Since the VNC stuff has been implemented, I have a bit of time next week to start working in an issue to document feature parity

Titus Fortner 9:23 PM

I’ll dedicate some time this month to helping with it

Probably the last topic is Release process

9:24 PM

Last week Simon recorded the Java release and shared the video so I can document it

It’d be great if the other folks who also do releases do the same, so we can document and potentially automate releases

Diego Molina 9:30 PM

I believe that was everything we had in the agenda

Titus Fortner 9:36 PM

Documentation. We got an offer from a company to help us with documentation so they can integrate it with their product which is an executable browser IDE thing

Or something. I’m not entirely certain, but sounds potentially interesting.

Diego Molina 9:37 PM

tell us more, @titusfortner :slightly_smiling_face:

Titus Fortner 9:37 PM

I at least want to get a demo and see what they mean.

I don’t know more, yet. :)

Diego Molina 9:37 PM

ah ok, they reached out to you privately :slightly_smiling_face:

Titus Fortner 9:38 PM

Yeah, I’ll loop you in when we set up a demo. Might not work for what we need

Diego Molina 9:39 PM

sounds good

Public Project Meeting - June 03, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on June 03, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:01 PM

:wave: Anyone around for our public meeting? @barancev @manoj9788 @mmerrell @simonstewart @harsha509 @Puja Jagani @AutomatedTester @titusfortner @p0deje @jimevans

9:02 PM

Let me post our ongoing agenda

General project statistics

  • Previous meeting: 161 open issues, 25 open pull requests
  • Currently: 167 open issues, 28 open pull requests
  • Pending work for the Beta 4?

Server - Grid

  • Pipe VNC connectors through the WebSocket plumbing for live video
  • Check that the Redis/JDBC backed services actually function
  • Distributor follows spec when allocating new sessions

Language bindings

  • “se:cdpVersion” is missing in C# and JS
  • Can all bindings do CDP over Grid?
  • What are the features present in Selenium 4?
  • Do all bindings implement them?

Release process

  • After beta 4, we should document how each binding and the Grid are released

Selenium IDE

  • Who knows what the release process is? What is needed?

  • Who can help reviewing pull requests?

  • please feel free to add any topics you’d like to add

Todd Tarsi 9:04 PM

I have been puttering on running ide v3 inside of ide v4, and it is kinda coming along. I’ll just post a screencap of where it’s at when we get there

Simon Stewart 9:04 PM

Agenda LGTM

Diego Molina 9:05 PM

A comment on General project statistics It feels as if folks are trying betas a bit more, I see an increase of issues

Simon Stewart 9:06 PM

That’s a Good Thing.

Diego Molina 9:06 PM

Most of the Grid ones can be fixed with docs, so I can take time to do that

other ones, seem to be either bugs or people just figuring out how to use beta 3, not sure

Simon Stewart 9:06 PM

I got some informal feedback from someone who said “btw it seems a ton more stable than 3.141.59 for us on soak test”.

Diego Molina 9:06 PM

That is nice to know

Simon Stewart 9:06 PM

Are there any issues we should be prioritising?

I’ve not read them recently, but if there’s a theme, we can try and address the systemic causes

Diego Molina 9:09 PM

We also have a few PRs pending to review, some of them related to the Grid, which @Puja Jagani created, and maybe when things are less intense, you could have a look @simonstewart, please?

Simon Stewart 9:10 PM

Sure. I’ll get on that ASAP

Diego Molina 9:10 PM

ok, so Pending work for the Beta 4?

Simon Stewart 9:11 PM

Just the .Net bindings, I think New

Diego Molina 9:11 PM

  • Server - Grid
  • Pipe VNC connectors through the WebSocket plumbing for live video
  • Check that the Redis/JDBC backed services actually function
  • Distributor follows spec when allocating new sessions I think “Distributor follows spec when allocating new sessions” was done, right?

and I believe @Puja Jagani tackled “Check that the Redis/JDBC backed services actually function”, not sure

Simon Stewart 9:11 PM

I think so, just checking

Simon Stewart 9:11 PM

I think so, just checking

9:12 PM

Yeah. We follow the spec better now

Before rc1, I’ll do some more command line testing of it using curl. I bet I can still make it fail

Diego Molina 9:13 PM

I was going to start working on “Pipe VNC connectors through the WebSocket plumbing for live video” but I bumped into the StressTest not passing, which lead to a fix. I want to have this before RC1, hopefully for beta 4

Simon Stewart 9:13 PM

Hopefully the infrastructure you’ll need is already in place.

I guess you’re going to expose a se:vnc capability or similar?

Diego Molina 9:14 PM

yes, that is the idea

Simon Stewart 9:14 PM

Perfect

Which reminds me, we should make sure that both Sauce and BS know that the Selenium 4 local ends will all try connecting to se:cdp and their infra could/should/might want to handle that

Titus Fortner 9:18 PM

local ends should only try connecting to that endpoint if using a devtools feature. Might make sense to just let it error out as unknown endpoint if it isn’t supported.

Diego Molina 9:18 PM

We are working internally on that, everyone at Sauce is aware :slightly_smiling_face:

Simon Stewart 9:18 PM

@titusfortner that’s what the java code does

@diemol that’s great news :slightly_smiling_face:

Diego Molina 9:20 PM

Ok, so Language bindings

  • “se:cdpVersion” is missing in C# and JS
  • Can all bindings do CDP over Grid?

I am not sure if @harsha509 and @AutomatedTester had time to use that in the JS bindigns

Simon Stewart 9:21 PM

If bindings are using se:cdp properly, then they should be able to do CDP over Grid.

Sri Harsha 9:22 PM

No @diemol. As discussed in last we punt it to rc1. If time permits i will look into it for sure

Simon Stewart 9:22 PM

I think the .Net bindings aren’t aware of the se:cdp capability yet

A quick grep suggests that’s true

Diego Molina 9:22 PM

thank for the update, @harsha509!

ok, so maybe we can jump to the next topic:

  • What are the features present in Selenium 4?
  • Do all bindings implement them?

I have not been able to get this list done, lack of time and also I do not know where to start to get this information

9:26 PM

from the top of my head, is:

  • Relative locators (Java can accept the locator, the other bindings use withTag)
  • New tab command
  • CDP (but what CDP features?)
  • Full page screenshot in Firefox
  • Print to PDF

9:26 PM

any others?

Sri Harsha 9:26 PM

JS bindings doesnt have /session/{session id}/element/{element id}/shadow endpoint implemented

9:27 PM

not sure of other language bindings

  • computedRole

  • computedLabel

Titus Fortner 9:28 PM

Do any of the drivers have shadow endpoint implemented?

Simon Stewart 9:28 PM

I’ll wire that into Java next week

Jim Evans 9:28 PM

working away at .NET to get ready for beta. :tada: 4

Simon Stewart 9:28 PM

I may wire in a fallback too

Jim Evans 9:29 PM

i want to also include the shadow endpoints, but i may not get to that.

Simon Stewart 9:29 PM

It can wait for rc1.

9:30 PM

For the record, I’m thinking of rc1 as “if we want to, we could tag this as 4.0 and be done”, so until we ship that, we don’t need all the commands in place. :+1: 1

9:30 PM

I’m seriously hoping beta4 is the last beta

Titus Fortner 9:31 PM

So, it’s not explicitly on the agenda, but relates to the languages implementing everything….

documentation.

Would be nice to have something that explains everything that is new with examples in each of the languages

9:31 PM

(as in I am willing to help not just complain about this one)

9:33 PM

but…

  • Do we still want to update to a different theme first?

  • Would it be possible to get help from a “Technical Content Strategist” or the like to help us organize things?

Diego Molina 9:33 PM

that is my idea by listing the features and seeing where they are implemented and where they need to be implemented :+1: 2

Sri Harsha 9:33 PM

I have tried my best to provide examples for all language bindings and a note on top of it like https://www.selenium.dev/documentation/en/webdriver/browser_manipulation/#create-new-window-or-new-tab-and-switch

Simon Stewart 9:34 PM

@titusfortner a human’s guide to the new features is a good idea.

Titus Fortner 9:34 PM

After spending a little time with the Sauce tech content team it has really showed me how much of a difference it makes to have someone who does this for a living organize things

I can look at something and say “this structure doesn’t make sense,” but my solution will be something that also doesn’t make sense. :smile:

Diego Molina 9:36 PM

I want to move to Docsy, a hugo theme that helps us to have website and docs in one single place

Titus Fortner 9:36 PM

and if we can reference code snippets from selenium repo tests rather than having to create/maintain them independently in our docs that would be huge

Is docsy the one I was looking at last time (whenever that was)?

Simon Stewart 9:36 PM

@diemol can the move to docsy be done at the same time as the docs themselves are updated?

Diego Molina 9:36 PM

and I have found Hugo shortcodes that can render real tests hosted in GitHub repositories, so we can run those tests in GitHub actions and provide working examples :tada: 2

Simon Stewart 9:37 PM

Oh! That’s nice!

Diego Molina 9:37 PM

I want to move the website first and leave for last the docs, but it will be hard to sync things, but it can be done

Titus Fortner 9:38 PM

I feel like if we have

  • A more intuitive structure of documentation
  • A template for adding code snippets in tabs

then it’s just a matter of finding the test code in the project for each feature

Diego Molina 9:39 PM

nro. 2, is the Hugo shortcode I found

Titus Fortner 9:39 PM

and I’d like to propose we actually look to hire someone to help us with #1.

Top notch documentation for Selenium 4 could make all the difference

Simon Stewart 9:39 PM

We can easily set up an “example” repo that people can look at

Titus Fortner 9:40 PM

@diemol yeah, I just need an example in the template we want to use, because that’s what I was missing the last time I tried to help :slightly_smiling_face:

Luis Correia 9:41 PM

sorry for intruding, the documentation so far is too “surgical”, lacking proper context. I would provide a full Java/C#/Python Class/Snipped with inline comments that would explain constructs

Titus Fortner 9:41 PM

I loaded the new template, spent like 8 hours tyring to figure out how to get tabs to work, and then gave up. :smile:

Luis Correia 9:42 PM

bonus points would go to code interacting with an example website

Diego Molina 9:42 PM

This is normally the type of thing that gets done when someone spends a few days working on it and then enabling others to work :+1: 1

9:42 PM

So hopefully I can have time for that after beta 4 is released

Titus Fortner 9:43 PM

I think if I understood Go better I might have been successful

9:43 PM

it just is very different from Docusaurus and Jekyll which are the 2 static site implementations I’ve worked with

and I like @Luis Correia’s point about more context

Diego Molina 9:43 PM

We can pair on that, I don’t know Go so much, I just know how to copy & paste properly

Titus Fortner 9:44 PM

but as someone who writes things with a lot more context, it’s also a *much more significant undertaking

9:44 PM

Watir we have the inline docs that are surgical, then “guides” on our website that try to explain things

And we have examples in each of the repos against our test server

something we might do is publish the test server on selenium.dev so anyone can run their own code against it without having to build selenium?

9:45 PM

I did that for the watir test code as well

Luis Correia 9:46 PM

yes, public test servers are a good thing

I can help testing and correct testing code (mainly for Java) against that server

I’m kinda “well versed” into Maven build cycles and can probably help the project in that respect

Titus Fortner 9:48 PM

I just copy/pasted everything to the examples directy: http://watir.com/examples

People can change url_for(“forms_with_input_elements.html”) in the specs to “http://watir.com/examples/forms_with_input_elements.html"

Diego Molina 9:48 PM

maybe we can jump into the next topic? Release process

  • After beta 4, we should document how each binding and the Grid are released

Titus Fortner 9:52 PM

For Ruby you need an account on rubygems. We can probably set one up a common email @selenium.dev with a secret password

9:53 PM

we can build the gem with bazel now, but the actual release requires manual intervention still

but I think we all agree that it is needed and we can do it after Se4 release

Diego Molina 9:56 PM

Something we were talking yesterday was to record the release process in a zoom call or similar and some of us who have more time, can document that process

Simon Stewart 9:58 PM

The java process isn’t too taxing

9:58 PM

The main thing is you need a Sonatype OSS account so you can publish the artifacts

Diego Molina 9:59 PM

so I believe we can focus on this topic a bit more when we feel close to beta 4 release?

Titus Fortner 10:01 PM

or RC :slightly_smiling_face:

Simon Stewart 10:03 PM

We are close to the b4 release :slightly_smiling_face:

@titusfortner getting the leg-rc package working properly again is on my list

Diego Molina 10:04 PM

I think we should find a way to document releases sooner than later because I imagine we will need to iterate faster when RC1 happens

Titus Fortner 10:04 PM

I meant release candidate version vs beta 4, not the RC package, but sure :wink:

Simon Stewart 10:04 PM

@barancev and I both have the keys for java releases

Diego Molina 10:11 PM

ok, I guess the idea would be to simply record those sessions

Sri Harsha 10:11 PM

Coming to Selenium-ide, I have the production build from V3 branch.

At the time of release i can change the build version, build, zip it and pass it over to someone who has access for release

Titus Fortner 10:11 PM

:thumbsup:

Diego Molina 10:12 PM

but I think we can chat more about this when we are actually going to release beta 4?

10:13 PM

Good idea to jump into the next topic :slightly_smiling_face:

Selenium IDE

  • Who knows what the release process is? What is needed?
  • Who can help reviewing pull requests

so releasing it is as easy as uploading the zip somewhere? to the browser stores?

Todd Tarsi 10:16 PM

I can help review pull requests, but I don’t have any permissions around that stuff. Would reviewing PRs stil lhelp?

Diego Molina 10:17 PM

that would definitely help

Todd Tarsi 10:17 PM

Sounds good, I’ll take up a more active role reviewing PRs then.

Diego Molina 10:18 PM

I can help with merging if needed :slightly_smiling_face:

but we really need to figure out how to release

Todd Tarsi 10:18 PM

The release process seems like something that shouldn’t be that complicated. We build for edge, firefox, and chrome and then upload the zip files to the stores, right?

Sri Harsha 10:18 PM

Yes @diemol. Uplaoding the zip in webstore who has release access

Diego Molina 10:18 PM

I will try to ping Dave and Tomer privately

Simon Stewart 10:18 PM

Thank you @Todd Tarsi Helping to review things would be really helpful

There’s a chance I have access to the release account

Sri Harsha 10:19 PM

i asked @corevo . He said @simonstewart may have access to webstore to publish

Simon Stewart 10:19 PM

At least for Firefox, and maybe Chrome

Diego Molina 10:20 PM

sounds good, that would help a lot

Simon Stewart 10:22 PM

Will check tomorrow

IRC channels are moving to Libera.chat

Moving to Libera.Chat

Yesterday, 19 May 2021, all the staff of Freenode, the IRC network, collectively resigned as staff because of what they felt was a hostile takeover.

Freenode has always been seen as the home of Free and Open Software, so it was natural that you could find us on the #selenium channel there. To maintain this openness, and inclusivity, we are moving our IRC Channel over to Libera.chat. It is has been created by the team that previously maintained Freenode.

We are in the process of moving our Slack-to-IRC bridge over and hopefully the matrix bridge will be created soon so that we can have a free and inclusive project on the new IRC Servers. There may be a few hiccups so if you could bear with us.

If you have any questions please feel free to reach out to me on twitter or on one of the chat protocols we support.

Finally, thank you to “Milen from Bulgaria” for helping secure the channel for us on Libera.chat.

Public Project Meeting - May 20, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on May 20, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Simon Stewart 9:00 PM

@AutomatedTester, @p0deje @titusfortner, @harsha509 @Puja Jagani @barancev @jimevans @Todd Tarsi and anyone else who’s interested, come on down!

9:00 PM

Any agenda items?

Diego Molina 9:00 PM

I can paste the ongoing agenda and leave you to it :slightly_smiling_face:

Simon Stewart 9:00 PM

Yes please!

Diego Molina 9:01 PM

Pending work for the 4th Beta?

  • Server - Grid
  • Pipe VNC connectors through the WebSocket plumbing for live video
  • Unify new Session Queue
  • Stress test the new Grid on AWS or similar with >50 simultaneous tests
  • Check that the Redis/JDBC backed services actually function
  • Distributor follows spec when allocating new sessions
  • More than 1 IE session per Node? https://github.com/SeleniumHQ/selenium/issues/9388

Language bindings

  • “se:cdpVersion” is missing in C# and JS
  • Can all bindings do CDP over Grid?
  • What are the features present in Selenium 4?
  • Do all bindings implement them?
  • Selenium IDE
  • Who knows what the release process is?
  • What is needed?
  • Who can help reviewing pull requests?

9388 Grid 4 doesn’t allow more than 1 session for Internet Explorer

:boom: Regression Report

We used Selenium Grid 2 and 3 to run multiple IE sessions in parallel without issues for many years. But now Selenium 4 restrict the number of IE sessions to only 1 without any way to override the restriction.

Last working Selenium version

Worked up to version: 3.141.59

Stopped working in version: 4.0.0-alpha

To Reproduce

  1. Start the hub using java -jar selenium-server-4.0.0-beta-3.jar hub
  2. Start the IE node using java -Dwebdriver.ie.driver=IEDriverServer-3.150.1.exe -jar selenium-server-4.0.0-beta-3.jar node –max-sessions 7 –override-max-sessions true Expected behavior A grid node that allows up to 7 tests that use IE to run in parallel. Environment OS: Windows
    Browser: IE
    Bro… Show more Labels C-grid https://github.com/SeleniumHQ/selenium|SeleniumHQ/seleniumSeleniumHQ/selenium | Apr 17th | Added by GitHub

Simon Stewart 9:01 PM

Thank you!

9:01 PM

I’ll add: What do we want in RC1?

9:01 PM

Anyone want to add anything else?

Diego Molina 9:02 PM

Also

General project statistics

  • Previous meeting: 157 open issues, 25 open pull requests Currently: 161 open issues, 25 open pull requests

9:02 PM

(so, I cannot run the meeting, but I am around :slightly_smiling_face:)

Simon Stewart 9:02 PM

It’s much appreciated. Thank you, @diemol

9:03 PM

I’m guessing silence means that there’s nothing else to add?

In that case: Pending work for beta 4

Simon Stewart 9:04 PM

I saw that @Puja Jagani has got tracing working again, which I’d love to see in b4.

Puja Jagani

Will be landed tomorrow!

Simon Stewart

Woohoo!

Simon Stewart

Thank you :slightly_smiling_face:

Simon Stewart 9:04 PM

And @diemol posted a video of the Grid scaling up to 50 clients

9:04 PM

I’ve done some perf work to get better utilisation

9:05 PM

And we’ve unified the session queue too

9:05 PM

That is, I think Grid is good to go for b4 once the tracing work is landed

9:05 PM

Anyone (@harsha509 @AutomatedTester) know about se:cdpVersion in the JS bindings?

David Burns 9:07 PM

I’ve not done it

Simon Stewart 9:07 PM

(I see that @harsha509 is typing….)

Sri Harsha 9:07 PM

cdp version check is not implememted on js.

Simon Stewart 9:07 PM

OK. Do we need it for beta 4, or should we punt it to rc1?

David Burns 9:08 PM

We can punt it

Simon Stewart 9:08 PM

Great. Let’s punt it to rc 1

David Burns 9:08 PM

No one has noticed how it works and no bug reports so…

Simon Stewart 9:08 PM

What about CDP over the Grid?

If you’re using se:cdp for the websocket endpoint, it’ll work

9:09 PM

(@titusfortner and @p0deje I’m curious about the ruby bindings and CDP-over-Grid too)

David Burns 9:09 PM

That is there already

Titus Fortner 9:11 PM

yeah, for Remote, Ruby gets the version from se:cdpVersion

9:12 PM

We run the tests for both local and via the Grid, and everything is passing

Simon Stewart 9:12 PM

Do the Ruby bindings use se:cdpVersion too?

I guess you lean into the typing less than Java and .Net, so maybe it doesn’t matter so much

Titus Fortner 9:13 PM

https://github.com/SeleniumHQ/selenium/blob/411b883645023d1e1a629a3197d3552253b93f2f/rb/lib/selenium/webdriver/remote/driver.rb#L54 driver.rb

capabilities[‘se:cdpVersion’].split(’.’).first

https://github.com/SeleniumHQ/selenium|SeleniumHQ/seleniumSeleniumHQ/selenium | Added by GitHub

Simon Stewart 9:13 PM

Perfect :slightly_smiling_face:

9:14 PM

waits for @titusfortner to type

Titus Fortner 9:14 PM

no need, I’m not saying anything useful

9:14 PM

but Ruby & devtools things I think we’re good

Simon Stewart 9:15 PM

Great. Moving on, then!

9:15 PM

I get the feeling that if anyone had the time and energy, @jimevans would appreciate a hand with the .Net bindings

9:16 PM

I know that last status meeting, he mentioned that there were some features he wanted in there before beta4

David Burns 9:17 PM

@Puja Jagani has done some .Net stuff. If Jim tells us what needs doing we can help

Simon Stewart 9:18 PM

I think it’s probably CDP-over-Grid, and maybe the CDP version stuff

9:18 PM

But, obviously, @jimevans knows waaaay more than I do about that

David Burns 9:18 PM

I need to do the multiple options handling to capabilities work in the python code

9:19 PM

If I had deprecated some of the code in 3.14 it would be Waaaaaaay easier

Simon Stewart 9:20 PM

We can have a discussion about what you’re thinking of breaking later

9:20 PM

It may just be that we do the simple thing, though

As far as I’m concerned, then, the thing we’re waiting for is @jimevans to give us the green light for the .Net stuff being ready for beta4

Titus Fortner 9:21 PM

I did just notice that Ruby hasn’t implemented Full Page screenshot support for Firefox, yet; I’ll get that added today.

And on that vein, I need to create some examples of browser specific features being used with Remote drivers in each language, because I know not everything is working in every binding, yet

Simon Stewart 9:21 PM

What do other people think?

David Burns 9:21 PM

Nothing will break promise

Simon Stewart 9:21 PM

@titusfortner I think we can set “feature parity between bindings” as an rc1 goal

Titus Fortner 9:21 PM

yup, makes sense

9:22 PM

I"ll get the Firefox screenshot thing in before beta4

Simon Stewart 9:22 PM

As long as the broad features are there in beta4 (notably, the CDP-related infrastructure, if not the nicer APIs built on top)

Titus Fortner 9:22 PM

Very excited about how close we are :slightly_smiling_face:

Simon Stewart 9:22 PM

Which neatly brings us on to What do we want in RC1?

Titus Fortner 9:23 PM

ensure feature parity :slightly_smiling_face:

Simon Stewart 9:23 PM

  • Feature parity between languages
  • Updated CDP versions for current browsers
  • More Grid stress testing

Titus Fortner 9:23 PM

or at least document it

Simon Stewart 9:23 PM

Documentation :slightly_smiling_face:

Titus Fortner 9:23 PM

while we’re here, the JUnit 5 dev doesn’t have any ideas for how to fix the issue:

Comment on #2273 Parallelism value ignored for the fixed strategy

I’m all ears if anyone has a proposal how to resolve this. The only thing I’ve come up with would be to wrap the execution of each test in another, non-ForkJoinPool thread but that would double the number of required threads and have performance implications. https://github.com/junit-team/junit5|junit-team/junit5junit-team/junit5 | May 13th | Added by GitHub

9:24 PM

it’s definitely a JUnit thing, but it’s going to affect our users :disappointed: :disappointed:

Simon Stewart 9:24 PM

Why they don’t just maintain an AtomicInteger of the number of running threads is beyond me

Titus Fortner 9:25 PM

Can you suggest that?

9:25 PM

I am so far out of my depth with threading that I will get in the way more than help

Simon Stewart 9:25 PM

We can get this sorted :slightly_smiling_face:

Titus Fortner 9:26 PM

:thumbsup:

Simon Stewart 9:26 PM

Does anyone have anything else that they want to see in rc1?

9:26 PM

Or, to rephrase, if we ship rc1 and nothing major blows up, what would stop us making the release after that 4.0?

9:28 PM

(I’m going to take silence here to mean that everyone is really busy right now)

Titus Fortner 9:29 PM

Your list looks good to me…

Simon Stewart 9:30 PM

OK.

9:31 PM

So, let’s move on to Selenium IDE

I think that there’s a small core of us who could release the IDE

9:32 PM

But @corevo and DaveH would know the process best

9:33 PM

To recap:

  • Selenium IDE
  • Who knows what the release process is?
  • What is needed?
  • Who can help reviewing pull requests?

Todd Tarsi 9:33 PM

@simonstewart - I would love to help in any capacity that I can, including reviewing PRs.

Simon Stewart 9:34 PM

That’s great news :slightly_smiling_face:

9:34 PM

Thank you

9:34 PM

Again, it feels like we’re not going to make much progress today on this.

Titus Fortner 9:35 PM PM

I think we need to hear back from former owners to make progress on it

Simon Stewart 9:35 PM

Can I suggest that we set up a call or email chain with @corevo, DaveH, @harsha509 and whoever else is interested to move that forwards?

Titus Fortner 9:35 PM

can we reach out to them not-on-slack since they don’t seem to be paying attention here?

yes, that :slightly_smiling_face:

Simon Stewart 9:35 PM

nods

@harsha509, would you be okay arranging that?

If we can get you email addresses….

Sri Harsha 9:36 PM

I can take inputs from @corevo on how to release and document it.

9:37 PM

Sure @simonstewart

Simon Stewart 9:37 PM

Brilliant. Thank you. I’ll be happy to help move things along if I can

Sri Harsha 9:37 PM

:bow:

Simon Stewart 9:37 PM

@Todd Tarsi I bet it’d be interesting to hear how the electron work was going

Todd Tarsi 9:38 PM

@simonstewart - It will be better with a PR as a point of discussion, so I’ll put one out later tonight.

Simon Stewart 9:38 PM

Oh yeah. Definitely a PR discussion :slightly_smiling_face:

9:39 PM

Alright then, folks. I think we’ve romped through the agenda.

9:39 PM

Is there anything else people would like to talk about?

Titus Fortner 9:39 PM

What is the current status of BiDi?

Luis Correia 9:40 PM

Documentation :slightly_smiling_face:

Titus Fortner 9:40 PM

I think we closed the issue that was listing what we were going to implement, presumably because we’ve implemented the things we deemed essential

Simon Stewart 9:41 PM

Status of Bidi? The w3c spec, or the use cases we planned to support?

Titus Fortner 9:41 PM

the latter

and the former to the extent that it might be what is driving the latter?

Simon Stewart 9:41 PM

@Luis Correia Acknowledged. We’ll talk about docs after the bidi stuff

The w3c spec won’t be finished before we ship 4.0, so let’s set that aside

Titus Fortner 9:42 PM

oh yes, I waited until after we were done talking about betas and RCs to bring this up :slightly_smiling_face:

this is future roadmap things

Simon Stewart 9:42 PM

So, the use cases from the issue were:

  • Listen for DOM events
  • Log what’s going on in the browser including console and JS errors
  • Fail fast on any JS error
  • Intercept network requests allowing to mock backend requests
  • Record traffic (Alex: Allow replaying it?)
  • Authenticate on secure pages
  • Bootstrap scripts (for example, execute JavaScript snippet on every page load)

9:43 PM

Recording traffic can be done by the same code that does network interception

I think bootstrap scripts are probably the most poorly supported thing right now

9:44 PM

Technically, Java has code for it, but I have zero confidence it’s robust. Or, indeed, that I actually landed it

The w3c spec started with a discussion of use cases too, and there’s a lot of overlap (surprise!)

9:45 PM

I’d love to get script pinning using CDP in place. That’ll exercise bootstrap scripts sufficiently

Titus Fortner 9:46 PM

So maybe I need to better understand how the spec and selenium code are supporting each other. Do we need to make sure the features we are adding are documented in the spec?

(i.e. is one driving the other, or is this like before where geckodriver & w3c drove each other)

Simon Stewart 9:47 PM

The spec is currently putting in place a lot of the groundwork to start doing useful things, so it’s not covering the use cases yet

9:48 PM

I suspect that Selenium 4 utilisation will help steer the spec as we find out the subset of the CDP that’s actually useful for testing and automation

Titus Fortner 9:48 PM

perfect, thanks

Simon Stewart 9:48 PM

It’s something of a chicken-and-egg problem right now.

9:49 PM

Once we ship 4, I’m planning to switch my focus to the spec

Titus Fortner 9:49 PM

always is with specs, right? :slightly_smiling_face:

Simon Stewart 9:49 PM

Always :slightly_smiling_face:

We have 10 minutes left! Shall we move on to Documentation?

Titus Fortner 9:49 PM

@diemol are we moving / have we moved to a different theme?

for docs

Simon Stewart 9:49 PM

@Luis Correia could you please expand on what you meant?

Luis Correia 9:50 PM

about single port grid or documentation?

Simon Stewart 9:51 PM

Documentation, please

Luis Correia 9:52 PM

ok, it is my understanding that current docs are too surgical, explaining one thing but maybe not with full context Specifically in the grid 4 docs

Simon Stewart 9:52 PM

How would you like that to change?

Luis Correia 9:53 PM

in the website there isn’t a section with all available options and switches, one has to delve into code

9:53 PM

note: it’s not a blocker for release but rather a nice to have feature

9:55 PM

this is a good starting link

https://www.selenium.dev/documentation/en/grid/grid_4/

selenium.dev

Grid 4 :: Documentation for Selenium Documentation for Selenium

Simon Stewart 9:55 PM

OK, so a better description than you get from selenium -h?

Titus Fortner 9:55 PM

https://www.selenium.dev/documentation/en/grid/grid_4/configuring_components/config_help/

selenium.dev

Config help :: Documentation for Selenium

Documentation for Selenium

Luis Correia 9:55 PM

I would be happy with that on a webpage

Simon Stewart 9:56 PM

OK. Would you please leave a comment on https://github.com/SeleniumHQ/selenium/issues/8165?

8165 Update user docs with new Selenium 4 features :rocket: Feature Proposal Selenium 4 brings a set of all-new features and https://www.selenium.dev/documentation/en/ needs to be updated to contain the related docs for them. Motivation

It’d be nice to have the following new features covered in the docs: • Relative locators • CDP integration • New Grid 4.0 Example … Labels C-docs, Selenium-4-Beta Comments 2 https://github.com/SeleniumHQ/selenium|SeleniumHQ/seleniumSeleniumHQ/selenium | Apr 7th, 2020 | Added by GitHub

Titus Fortner 9:56 PM

looks like the page I linked there shows the commands but not the output?

Luis Correia 9:56 PM

@titusfortner or even why, that’s proper context

9:57 PM

i will @simonstewart

Titus Fortner 9:57 PM

providing context for it would definitely be useful

Simon Stewart 9:57 PM

Much appreciated. That’s the tracking issue for improving the docs, so adding comments there will be helpful

Titus Fortner 9:58 PM

Or you can PR the changes you think would provide the context; docs are all in a public repo.

I’m struggling a bit with Sauce documentation right now. I’m good at making sure the info is “correct,” but finding I’m not so great on explaining why it matters to people, and that part is important

Simon Stewart 9:59 PM

@titusfortner I guess you’ve seen https://developers.google.com/tech-writing?

Titus Fortner 9:59 PM

It’s like I have “presentation” mode and “documentation” mode and I can’t get them to work together :smile:

Simon Stewart 9:59 PM

Ah yeah. It’s hard to get the narrative right

Titus Fortner 10:00 PM

well, it also helps to have people at Sauce whose actual career is organizing info so people can understand it

10:00

I hadn’t seen the tech-writing page, that looks interesting

Simon Stewart 10:01 PM

Shall we wrap up? I think we covered most of the things we needed to

10:02 PM

The major decision was to wait for @jimevans to give us the green light for shipping beta 4.

I’m totally fine waiting as long as necessary for that, but I also heard @AutomatedTester suggest that maybe @Puja Jagani could help with that

Titus Fortner 10:06 PM

sounds great, thanks @simonstewart!

Public Project Meeting - May 06, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on May 06, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Simon Stewart 9:01 PM

Alright then. It’s time

9:02

@AutomatedTester, @titusfortner @p0deje, @jimevans, @harsha509, @barancev, @Puja Jagani, and @diemol (plus anyone else who’s interested)

Let’s get the show on the road

9:02 PM

I think we can wait for @diemol to be back for the stats for the past couple of weeks

Any agenda items?

9:03 PM

  • Stats
  • What do we want in Beta 4?
  • When do we ship Beta 4?

Diego Molina 9:03 PM

Here, quick meeting with my manager done

David Burns 9:04 PM

Managers are the worst…

Simon Stewart 9:04 PM

hands over meeting reigns to @diemol

Diego Molina 9:04 PM

Stats from previous meeting:

  • 157 open issues,
  • 25 open pull requests
  • Current: 163 open issues, 30 open pull requests

Data taken from this link[https://www.diemol.com/github-repo-stats/seleniumhq_selenium/index.html]

David Burns 9:05 PM

A lot of those are from @Puja Jagani

9:05 PM

she has been busy

Simon Stewart 9:06 PM

She’s been rocking it

Diego Molina 9:06 PM

the issues or the PRs?

9:07

Right, work that we want for the next beta (4)

(I could not contribute that much during the last two weeks :confused:)

9:08 PM

These are items from the last meeting:

  • Pipe VNC connectors through the WebSocket plumbing for live video
  • Investigate: Grid gets stuck when screenshot is taken in a terminated session
  • Investigate: Grid gets stuck when the browser driver process cannot be killed
  • Investigate: Router request timeouts when forwarding command to Node
  • Unify new Session Queue
  • Stress test the new Grid on AWS or similar with >50 simultaneous tests
  • Check that the Redis/JDBC backed services actually function
  • More than 1 IE session per Node? https://github.com/SeleniumHQ/selenium/issues/9388

Maybe only this one got done? “Unify new Session Queue”

Simon Stewart 9:08 PM

I’d like to add:

  • Distributor follows spec when allocating new sessions

David Burns 9:08 PM

Do we have issues/docs on the investigate stuff?

Simon Stewart 9:08 PM

Yeah. We unified the new session queue

9:09 PM

I’ve a PR in the works for the “follow the spec” bit

David Burns 9:09 PM

for the last item about IE… we can allow that to happen but it seems like a major footgun

Diego Molina 9:10 PM

There are issues for the investigation items, and maybe there is a PR from @Puja Jagani solving the “browser driver process cannot be killed” one

I will double check that all items have a GitHub issue, and if not, I will create one

David Burns 9:12 PM

thank you

Diego Molina 9:14 PM

For language bindings we had this:

Language bindings

  • “se:cdpVersion” is missing in C#, Java and JS
  • Can all bindings do CDP over Grid
  • Document features and double check all bindings implement all features

Saksham Gupta 9:14 PM

Hello all, been a year since I started my internship. Thought I’ll drop by to say hi.

Simon Stewart 9:15 PM

Java should be doing se:cdpVersion now

David Burns 9:15 PM

@harsha509 do you need a hand with the cdpVersion stuff for JS?

Simon Stewart 9:16 PM

I think we need to review what’s in the python bindings that’s not elsewhere: my impression is that there’s been a few things added

David Burns 9:17 PM

@simonstewart only 1 thing which is mobile options

Simon Stewart 9:17 PM

kk

Sri Harsha 9:17 PM

Yes @AutomatedTester, i have been busy with paid work, didnt got a chance to look into it

Diego Molina 9:17 PM

what are mobile options?

David Burns 9:17 PM

@diemol the ability to set android* config better

you could do it before but I made it a little nicer after a request from whimboo

9:18 PM

I actually want to change it to support iOS better

Diego Molina 9:18 PM

Nice!

David Burns 9:19 PM

but it means you can create a normal chrome/firefox options and pass it through to the driver to connect to said browser on android :+1: 1

9:20 PM

you could before if you knew the magic for it

Diego Molina 9:20 PM

Something else we need to figure out is how to release the IDE, given that @Todd Tarsi is helping us and contributing to it

9:20 PM

does anyone know about it?

Simon Stewart 9:20 PM

Who did the last release? @corevo, I thought

9:20 PM

?

David Burns 9:21 PM

I think it was him. I will email him and Dave for guidance here

Diego Molina 9:21 PM

great, thank you

and I have one last thing from my side

I have spoken to @Puja Jagani and asked her if she is interested in becoming a committer Therefore, I have created this PR https://github.com/SeleniumHQ/seleniumhq.github.io/pull/679 Folks, please go an check it out

I think she has done so much great work and without her we would not have moved at the speed we are currently moving :slightly_smiling_face:

Puja Jagani

Thank you David, Diego and Simon for the constant support and help :relaxed: Very happy working with the Selenium TLC folks!

Simon Stewart 9:25 PM

I’m onboard with this

Diego Molina 9:25 PM

(there is probably a shorter way to say what I said, but my English is no bueno sometimes)

David Burns 9:26 PM

+1 but I am biased :smile:

Diego Molina 9:26 PM

We simply need PR approvals :slightly_smiling_face:

Titus Fortner 9:27 PM

Sorry, I’m showing up late. :slightly_smiling_face:

Did we get the blockers for beta 4?

Have a couple bug fixes that would be nice to get released

Simon Stewart 9:27 PM

@diemol’s in charge here

Diego Molina 9:28 PM

No @titusfortner, sorry. I think we need to improve with PR reviews in the next days so we can get closer to beta 4

9:28 PM

I believe you are talking about the JUnit issue?

Sri Harsha 9:29 PM

i will update few things in ide stuff, electron version bump and updating rules_nodejs

Titus Fortner 9:29 PM

No, that’s a different issue :slightly_smiling_face:

Diego Molina 9:30 PM

Which issues did you have in time?

9:30 PM

in mind*

Titus Fortner 9:32 PM

some fixes in Ruby code

9:32 PM

just wanted to get stuff out there sooner if that’s an option

Simon Stewart 9:33 PM

We’ve yet to agree when we want to ship beta4, so there’s probably time

9:34 PM

Unless you want the fixes to be blockers

Titus Fortner 9:35 PM

I mean, Alex changed something that was blocking someone and I’m wondering when we can get it released to him :smile:

Simon Stewart 9:36 PM

Ah! So you want the release sooner :slightly_smiling_face:

Titus Fortner 9:36 PM

9:36 PM

apparently there is a project that refuses to look at firstMatch values

Sri Harsha 9:36 PM

For JS i want to:

  • Implement “se:cdpVersion”
  • API documentation for beta 4

Simon Stewart 9:37 PM

@titusfortner I have no idea how a project not following the spec is a reason for us to ship sooner, but I assume there’s context I’m missing….

David Burns 9:37 PM

is this appium?

Titus Fortner 9:40 PM

A Watir user is using aerokube/ggr

Ruby code defaults to F/M, but the project doesn’t accept it (https://github.com/aerokube/ggr/issues/314)

He asked the devs and their private reply: Ggr does not support “sophisticated” selenium “match” rules and we do not plan to implement that, because it is ambiguous

So Ruby changed default implementation to be A/M since it *shouldn’t matter but apparently does

just trying to help the user

Simon Stewart 9:41 PM

It’s the exact opposite of ambiguous

Titus Fortner 9:41 PM

oh, I know

9:41 PM

if this had been a public response i’d have been all over it

Simon Stewart 9:41 PM

WE should probably have a chat with the Aerokube folks

9:42 PM

Because Se4 will break them a lot

Titus Fortner 9:42 PM

The suggestion I got is either to try their new product: aerokube.com/moon or do not use ggr and go with selenium.

Simon Stewart 9:43 PM

So moon supports the w3c payload but not ggr?

Titus Fortner 9:44 PM

that’s what it sounds like

David Burns 9:44 PM

Aerokube… the group that bad mouths selenium… that aerokube?

Titus Fortner 9:44 PM

I don’t know what ggr vs moon is, didn’t get too deep into it

Simon Stewart 9:45 PM

Moon is their paid-for product.

Titus Fortner 9:45 PM

ah of course it is

you want fancy, you pay the money!

s/fancy/sophisticated

Simon Stewart 9:45 PM

A perfectly valid business model

David Burns 9:45 PM

In which they they tell everyone that selenium grid is useless

9:46 PM

I’m happy to help those that don’t bad mouth us

Difference of opinion is also fine

9:47 PM

But… *channels his inner @jimevans *

Titus Fortner 9:47 PM

I don’t remember off hand which bindings default to A/M and which to F/M

9:47 PM

I was going to run some tests

Diego Molina 9:50 PM

I think we should not hurry for a project that does not support standards

Titus Fortner 9:51 PM

I don’t care about them

9:51 PM

I care about a user who needs to change because of them

Diego Molina 9:51 PM

Anyway, I think those were all the topics we had :slightly_smiling_face:

Observability in Selenium 4

Diagnosing problems when the Selenium server isn’t working has never been easy.

Diagnosing problems when the Selenium server isn’t working has never been easy. With Selenium 4, we have integrated OpenTelemetry to help you troubleshoot issues, optimize performance, and provide visibility into the system. By making the Selenium server observable, we are putting more power into your hands.

Need for Observability

Selenium server enables distributed testing. Instead of running the browsers for tests locally, the tests use a remote browser driver that points to a server. The server makes “smart” decisions to run tests on different remote servers. Every such remote server is capable of hosting different types of browsers and browser versions.

Selenium 3 uses Hub as the coordinator. It receives new session requests and directs them to the appropriate Node. The Node is the remote end where the browser itself runs.

Selenium 4 extends this to provide users with a way to set up a full-blown distributed system. Essentially, Selenium 4 splits the Hub into different components with additional enhancements. However, the Node’s role remains the same. To ensure the backward compatibility and simplicity of setting up Grid, standalone and hub-node mode are also available in the new Selenium server.

Now picture running a full-blown distributed Selenium Grid with hundreds of Nodes with different browsers and browser versions. Testing at scale in such an infrastructure will involve large volumes of requests. How can one keep track of these requests? Enter Selenium Observability!

How Does Selenium Provide Observability?

Selenium uses OpenTelemetry to instrument tracing and event logs. Tracing keeps track of a request’s lifecycle. As a request moves through the distributed system, the trace of the request will contain all the information of its crucial operations performed along the way. Such operations are known as spans. A span can record timed logs called events, which ideally encapsulate the current state of the system. These are event logs.

By default, the Selenium server enables tracing. Selenium server can run in different modes:

Tracing and event logs are available for all the modes. The simplest way to see traces is in the form of console logs. By default, the Selenium server prints logs at the INFO level and above. To pass a logging level of choice while running a Selenium Grid use the log-level flag. Setting the log-level to FINE will display traces and event logs as console logs.

For a large scale system, consuming traces as logs might not be efficient. Visualizing and querying traces will quickly help troubleshoot a request failure easily. Jaeger seamlessly integrates with OpenTelemetry to provide a rich experience of querying, visualizing and collecting request traces.

Run java -jar selenium-server-<selenium-version>.jar info tracing.

It provides detailed and updated instructions to set up Jaeger with the Selenium server. Visualizing the traces makes it easy to interpret a trace and understand request flow. Now Grid users can effortlessly trace a request, drill down into an error or query them to observe what is happening.

Trace example

Refer to Selenium Observability for details.

Full-Stack Tracing

The Java client binding supports tracing. Full-stack tracing allows tracing a request from the client to the server and back. Though the client is a single component, the client trace will contain spans that help build the request. It is easier to locate a client-side problem and fix the test if needed.

We already saw how the server supports tracing and how to leverage it. For the client-side, add the Opentelemetry dependency to your project setup and add the necessary system properties to export the traces to Jaeger. Refer to RemoteWebdriver client for detailed instructions.

Leveraging Traces and Event Logs

The key to fixing a problem lies in knowing the error. For a known error situation, the event logs have you covered. It provides detailed error information and stack traces. Query the collected traces for a time range by the error code to identify the frequency of the error. It will help determine if the error is transient or not and accordingly take action.

Error event log example

Observe the request latency to identify potential bottlenecks. Each trace will also contain time taken by each span. The issue could be in the underlying infrastructure setup, the network latency, or the code itself. Irrespective of the cause, it is easier to identify the problem area.

Observability is slowly becoming a must-have property of a system. Selenium is now observable! Go ahead try it out. Let us know if you find anything that requires improvement on our end.

Public Project Meeting - April 22, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on April 22, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:02 PM

pinging @simonstewart @AutomatedTester @harsha509 @Puja Jagani @jimevans @barancev @manoj9788 @mmerrell @titusfortner @p0deje

Simon Stewart 9:02 PM

I’m going to be at SauceCon

9:02 PM

Things I want for beta 4:

Diego Molina 9:02 PM

and whoever else is around :slightly_smiling_face:

9:03 PM

General project statistics

  • Previous meeting: 163 open issues, 24 open pull requests
  • Currently: 157 open issues, 25 open pull requests

Simon Stewart 9:03 PM

Things I want for beta 4:

  • Refresh the NewSessionQueue
  • Stress test the new Grid on AWS or similar with >50 simultaneous tests
  • Check that the Redis/JDBC backed services actually function

Diego Molina 9:06 PM

Next topic:

  • Pending work for the 4th Beta?
  • Server - Grid
  • Pipe VNC connectors through the WebSocket plumbing for live video
  • Investigate: Grid gets stuck when screenshot is taken in a terminated session
  • Investigate: Grid gets stuck when the browser driver process cannot be killed
  • Investigate: Router request timeouts when forwarding command to Node
  • Unify new Session Queue
  • Stress test the new Grid on AWS or similar with >50 simultaneous tests
  • Check that the Redis/JDBC backed services actually function
  • More than 1 IE session per Node? https://github.com/SeleniumHQ/selenium/issues/9388

Language bindings

  • “se:cdpVersion” is missing in C#, Java and JS
  • Can all bindings do CDP over Grid?
  • What are the features present in Selenium 4?
  • Do all bindings implement them?

Simon Stewart 9:06 PM

The “unify new session queue” is mostly done, I think

9:07 pm

(Famous last words)

Diego Molina 9:07 PM

That is the PR you sent, which we will work with @Puja Jagani, I believe

Luke Hill 9:07 PM

Someone (In fact a couple), were asking me about the alphas / betas. And they were asking more along the lines of are we expecting a whole host of them like we had for v3.

9:08 PM

I gave them the whole spiel - We don’t do release timelines e.t.c. But figured I’d ask here if anyone has a finger in air idea.

Diego Molina 9:08 PM

For the Grid work, I am taking the items related to “investigate”

9:09 PM

But I wanted to ask folks here, what do you think about “More than 1 IE session per Node? https://github.com/SeleniumHQ/selenium/issues/9388

Titus Fortner 9:10 PM

@luke tell them it doesn’t matter and if they are only using the bindings they should already have updated. The only stuff really being worked on at this point is grid functionality and adding in the various new features from w3c spec, etc There is no technological advantage to sticking with 3.x at this point

Luke Hill 9:10 PM

That went against all advice and articles published that explicitly stated “Do not use more than 1 IE session per node” @diemol

David Burns 9:10 PM

re: se:cdpVersion, it’s easy to add but I noticed we never use the versions, we seem to use the latest one

Diego Molina 9:10 PM

Some people are complaining they cannot run more than one test per Node, which we recommend against Because they have been able to do it. The code change is small, and I believe we should let them, with the caveat of “you are on your own here”

Luke Hill 9:11 PM

Do we know when/where this restriction came in? With an accompanying PR?

Diego Molina 9:11 PM

IE restriction? Since the moment zero Grid 4 was built

Simon Stewart 9:12 PM

@AutomatedTester the java bindings should be using the version

David Burns 9:12 PM

@simonstewart sorry, meant JS

JS bindings only use latest…

David Burns 9:12 PM

@simonstewart sorry, meant JS

9:13 PM

JS bindings only use latest…

Diego Molina 9:14 PM

@AutomatedTester I believe it has not been implemented in C# and JS (I need to double check Java)

David Burns 9:14 PM

JS doesn’t need it… yet without a bit of rearchitecting

I, or @Puja Jagani since she has been dabbling in .NET, can do the c# ones

or @jimevans obvs

Diego Molina 9:15 PM

I believe the idea is to use the “right” CDP version depending on the browser version, so it’d be nice if JS has it

David Burns 9:16 PM

maybe @harsha509 has time to look into it

Sri Harsha 9:17 PM

it requires rewriting the CDP in JS. i will look into it then.

Diego Molina 9:17 PM

that’d be amazing

cool, so I believe we need to work a bit on the pending items and see where we are in two weeks :slightly_smiling_face:

Titus Fortner 9:18 PM

From a bugs standpoint, #9359 is an absolute blocker for Sauce users to move to Selenium 4, but @Puja Jagani is helping confirm it.

Would be nice to at least know what is going on before next release

Diego Molina 9:20 PM

I think we have enough time to figure that one out

Simon Stewart 9:20 PM

The reproducible test case is helpful

Titus Fortner 9:20 PM

yeah, should have done that from the start

Diego Molina 9:20 PM

I wonder if someone asked @titusfortner for a reproducible test case :smile:

Titus Fortner 9:21 PM

tbf I did put exactly what needed to go into the POM

9:21 PM

I just didn’t create a whole project that can be cloned to see the issue

Diego Molina 9:21 PM

anyway, we could move to the last topic for today, the IDE

9:21 PM

Selenium IDE

  • Who knows what the release process is?
  • What is needed?
  • Who can help reviewing pull requests?

Sri Harsha 9:22 PM

By beta 4, i will be resolving JS api docs too. May be i can pass it to @diemol for review and upload

Diego Molina 9:22 PM

What is needed for a release*

Diego Molina 9:23 PM

@Todd Tarsi is here and they want to contribute, so it would be nice to give them a hand

David Burns 9:23 PM

if @corevo or @tourdedave have documented the release process I think I have some of the keys to do it

Diego Molina 9:23 PM

I can check if it is documented, else reach out to them

Todd Tarsi 9:23 PM

Hi all, yep if I can help in any way, please let me. I’ve been doing selenium ide stuff since it was UI with zanarkand (is that the right name?) back in the day

Diego Molina 9:24 PM

We need the keys for the 3 stores, right? Edge, Chrome and Firefox

9:25 PM

we should also update the docs to mention it is available in Edge

Todd Tarsi 9:27 PM

I can PR simple docs changes if we want.

Diego Molina 9:27 PM

cool

so we will check what is needed to properly test and release the IDE, and we will post here in #selenium-tlc

thanks for showing interest, @Todd Tarsi

ok, I think that is all for today, right?

does anyone have an extra topic?

seems not, thank you everyone!

(and thanks @harsha509 for publishing the notes to our blog :slightly_smiling_face:)

Public Project Meeting - April 08, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on April 08, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 8:59 PM

Ok, proposed agenda is:

  • General project statistics
  • Stuff implemented/fixed in the last two weeks
  • Pending work that needs to be done for the third Beta?
  • PRs that need to be reviewed

please feel free to add any other topics

pinging @titusfortner @manoj9788 @mmerrell @simonstewart @barancev @Puja Jagani @AutomatedTester @harsha509 @jimevans

Alright, let’s start with today’s public meeting :slightly_smiling_face:

9:02 PM

General project statistics

  • Previous meeting: 178 open issues, 23 open PRs
  • Current: 163, 24 PRs

Marcus Merrell 9:03 PM

no news to report from me–still working on the CoC with Karen, and working on either booking the Chicago venue for a 2022 conference, or getting our $40,000 back

Diego Molina 9:04 PM

thanks for sharing @mmerrell

Simon Stewart 9:04 PM

Presumably we’re looking at late 2022 for the in-person conference?

Diego Molina 9:05 PM

I hope so

are there any thoughts around a virtual conference this year?

Simon Stewart 9:06 PM

I’m lukewarm about virtual conferences. It’s hard to sit and watch YouTube videos all day

Diego Molina 9:06 PM

me too, but as a project we should consider that alternative

David Burns 9:06 PM

having just done one for work there is a “we’ve had enough” vibe going

9:07 PM

it was a success but I don’t think we could have done it later this year

Simon Stewart 9:07 PM

I’d love to do some short videos on topics, though

Things like relative locators, shadow DOM, CDP, etc

And we can do a “q&a” one with committers and a host

We should ask folks if they’d like to do something, and then maybe post one or two a month?

Diego Molina 9:08 PM right, a mini conference would be nice

Simon Stewart 9:08 PM

Provided we pay for someone to help make the videos and edit them

Titus Fortner 9:08 PM

less “talks” and more “video tutorials with Q&A?” :)

Diego Molina 9:08 PM

perhaps one day of workshops and one day of short talks

Simon Stewart 9:09 PM

Workshops are a really good thing to do

David Burns 9:09 PM

I would like to think on it more before committing either way

Simon Stewart 9:09 PM

Not even sure about “one day of short talks”. Just posting things regularly on the YT channel

Titus Fortner 9:09 PM

I really like it when there is a “time” that a video is shown, and the author can chat with people about it in whatever room, and then answer questions at the end

9:10 PM

then everything can be posted in whatever channel for people to watch

Simon Stewart 9:10 PM

I can see that

Diego Molina 9:10 PM

well, there we have a whole topic to think about :slightly_smiling_face:

Simon Stewart 9:10 PM

Ha! :slightly_smiling_face:

Titus Fortner 9:10 PM

but I do like the idea of a series of shorts on different pertinent selenium topics

9:11 PM

less “why testing is like a toaster oven” and more practical on how to get the most out of new Selenium 4, etc :-D

Simon Stewart 9:11 PM

Right

Diego Molina 9:12 PM

ok, I am a bit short of time today, so I suggest to go back to the agenda and if there is time, we can circle back to ideas about a “conference”

Titus Fortner 9:12 PM

:thumbsup:

Diego Molina 9:12 PM

Next topic:

  • Stuff implemented/fixed in the last two weeks

I have a short list of things I know they were done, so I will paste it here

  • CDP url for Firefox
  • Platform matching but when platform is Windows
  • noVNC added to docker-selenium

Simon Stewart 9:12 PM

Been quiet from me, but I have landed the bits to plumb through se:cdpVersion and have started on a unified New Session Queue

Diego Molina 9:13 PM

(there was a bug when matching Windows as a platform)

9:14 PM

yeah, if you try the Grid right now, CDP for Firefox should work also (but there are some CI tests failing for Firefox)

I also added noVNC to the docker containers, that bring us closer to have the live view in the Grid UI

Simon Stewart 9:15 PM

That’s very cool

Diego Molina 9:15 PM

Ok, so now having said what we have done during the last two weeks, we can now talk about what is left for beta 3:

Pending work that needs to be done for the third Beta?

I will paste the things that come from the previous meeting, but please add/remove as you wish

Simon Stewart 9:16 PM

Thank you

Diego Molina 9:16 PM

Server changes:

  • Enable retries of commands where necessary using failsafe
  • Pipe VNC connectors through the websocket plumbing for live video
  • Investigate: Grid gets stuck when screenshot is taken in a terminated session
  • Investigate: Router request timeouts when forwarding command to Node

Things left in Java, Python, JS, Ruby, C#?

  • “se:cdpVersion”?
  • Can all bindings do CDP over Grid?

Marcus Merrell 9:16 PM

(just to close out the 2022 conference idea–yes, Fall of 2022 in Chicago)

Simon Stewart 9:16 PM

Adding: unify the new session queue

Diego Molina 9:18 PM

We had this comment from the last meeting:

Here’s the plan, then. We’ll ship beta3 when two of these conditions are met:

  • The .net bindings support CDP over Grid
  • We send se:cdpVersion in Capabilities and that’s also handled by Grid

is this still valid? what do you all think?

Simon Stewart 9:18 PM

Time has elapsed. I’m not convinced we’re using se:cdpVersion properly on the local end yet

Titus Fortner 9:19 PM

looks like Java is the only one using it

Simon Stewart 9:19 PM

@jimevans can tell us whether the .Net bindings work

David Burns 9:19 PM

I will look at the Python/JS stuff for that tomorrow

Titus Fortner 9:20 PM

There are several Ruby bugs that we fixed, so I’m for releasing beta 3 even without cdpversion implemented

9:21 PM

I would like to get v90 & v91 devtools support added

Diego Molina 9:21 PM

Grid is now returning se:cdpVersion properly, and the Java bindings (when running locally) are also returning it properly

Titus Fortner 9:21 PM

or at least v90

David Burns 9:21 PM

that seems simple then…

Diego Molina 9:21 PM

but I wonder if the other bindings also create and manage se:cdpVersion when running locally (not over Grid)

Titus Fortner 9:22 PM

wait is Firefox using CDP 85 or 86?

Simon Stewart 9:22 PM

@titusfortner I can help you land the CDP v90 stuff

Diego Molina 9:22 PM

86

Titus Fortner 9:23 PM

I think I followed the guid and have the pdl files for the latest v90

Simon Stewart 9:23 PM

@diemol I’m not sure the java bindings use se:cdpVersion properly

David Burns 9:23 PM

firefox is 85 unless they changed it

Titus Fortner 9:23 PM

Well, if we aren’t hard coding it to 85, then I need to figure out how we want to approach that going forward :slightly_smiling_face:

I just see that trunk has FirefoxDriver set to use 86

(in Java)

which I didn’t think was correct

David Burns 9:24 PM

Java is wrong then

Simon Stewart 9:24 PM

Easy fix

David Burns 9:24 PM

r-

9:24

:stuck_out_tongue:

Diego Molina 9:25 PM

Seems we need to create a GitHub issue to track that

I’ll do that now

Simon Stewart 9:26 PM

Thanks

Jim Evans 9:27 PM

.NET still doesn’t proxy CDP across RemoteWebDriver yet.

is jumping through corporate IT/security/legal hoops right now.

Titus Fortner 9:29 PM

that sounds joyful

Diego Molina 9:30 PM

ok, created this to track it https://github.com/SeleniumHQ/selenium/issues/9365

please feel free to add more details

(if needed)

9:32 PM

So, IMO, we should have se:cdpVersion working and all bindings doing CDP over Grid before beta 3, right?

what do you think?

Simon Stewart 9:32 PM

I’m letting @jimevans call it

Jim Evans 9:33 PM

let’s not hold up beta3 for that. if i get to it before then, fine, but i’m swamped right now.

Titus Fortner 9:33 PM

I definitely don’t think we need cdpVersion

9:34 PM

doing CDP over grid doesn’t require that per se

Diego Molina 9:34 PM

no, it does not, they are two separate things

Titus Fortner 9:34 PM

Does Python & JS have CDP over grid working?

Simon Stewart 9:34 PM

I’d like to get the java bindings consuming se:cdpVersion properly.

Titus Fortner 9:35 PM

can we save that for beta4?

David Burns 9:35 PM

replied to a thread: Does Python & JS have CDP over grid working?

It should do

Diego Molina 9:35 PM

I know it would be ideal to get a beta 3 soon, but if we need to wait to have all bindings working with CDP, I am ok with that

Titus Fortner 9:35 PM

I generally don’t like putting off a release until Java gets something working, because that just means we wait for everyone else to implement it or Java is off from the rest of us. :smile:

Diego Molina 9:36 PM

I have seen issues asking “can we have in JS what it is already done in Java”, and similar

Titus Fortner 9:36 PM

Like I said, I have several bug fixes that would be nice to get into people’s hands sooner

I guess I can always do a beta 2.1 for ruby, but…

Simon Stewart 9:36 PM

Let’s aim for next Tuesday for beta 3

Diego Molina 9:37 PM

I am also ok with that

but I don’t want to reach RC without some degree of feature parity between bindings

even if it takes longer

Jim Evans 9:38 PM

i get my second vaccine dose on tuesday, so it’ll be in the afternoon

9:38 PM

(US eastern time)

Titus Fortner 9:38 PM

woo hoo!

Diego Molina 9:38 PM

oh, that’s amazing!

Simon Stewart 9:38 PM

RC should have feature parity

I’d like that one out for a few days, and then we ship 4.0.0

Titus Fortner 9:39 PM

oh, while we’re here, I think Java & .NET are the only ones who have implemented these? https://w3c.github.io/webdriver/#get-computed-role

9:40 PM

These new endpoints sneak up on me

Simon Stewart 9:40 PM

There are a few. The Shadow DOM ones are new as well

Titus Fortner 9:41 PM

oh no, python & java

Simon Stewart 9:41 PM

I think @AutomatedTester has snuck in a broader API than the rest of us since he actually reads specs

Titus Fortner 9:41 PM

sneaky

Simon Stewart 9:41 PM

Clever lad

David Burns 9:41 PM

none of the shadow dom stuff is done

9:42 PM

but I am adding it to Firefox

Sri Harsha 9:42 PM

JS bindings have it too, only left with shadow-dom

Jim Evans 9:42 PM

@titusfortner.NET does the get computed ones too

David Burns 9:42 PM

If you watched todays twitch you would have seen why… I am not sure of the API for things not Java/.NET

Titus Fortner 9:43 PM

so what everyone is saying is that it’s just Ruby slacking

Diego Molina 9:43 PM

ok, so we’ll aim beta 3 for next Tuesday :slightly_smiling_face:

David Burns 9:43 PM

@titusfortner not ruby… whistles :stuck_out_tongue_winking_eye:

Diego Molina 9:43 PM

last topic is:

  • PRs that need to be reviewed

9:44 PM

there are a few ones that could be an “easy” merge and ideally they do not need a lot of time for a review

I also see @Puja Jagani now contributing to the C# bindings, which is great!

I’ll list the PRs here:

C#

Python

David Burns

done

Diego Molina

thank you!

Diego Molina 9:47 PM

Java:

9:48 PM

in case you have some spare time, @AutomatedTester @jimevans @simonstewart

that’s all I had in the agenda :slightly_smiling_face:

Public Project Meeting - March 25, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on March 25, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:54 PM

Agenda for the public meeting:

  • General project statistics
  • Pending work that needs to be done for the third Beta?
  • CoC, next steps?

Please feel free to add any other topics

pinging @jimevans @barancev @simonstewart @AutomatedTester @titusfortner @harsha509 @luke @Puja Jagani and anyone else who wants to join

Simon Stewart 9:56 PM

Thanks for the ping :slightly_smiling_face:

Diego Molina 9:58 PM

forgot to ping @manoj9788 and @mmerrell

Marcus Merrell 10:00 PM

I haven’t heard back about the CoC work - last we left it, Karen was reaching out to Larissa

David Burns 10:00 PM

I will message Larissa now to see if that happened

Marcus Merrell 10:01 PM

thanks

10:01

I can make contact with her too, if you want to cut yourself out as the middle man I might be able to speed things up

around the conference, it sounds like the Holiday Inn in Chicago is undergoing an ownership change, and hasn’t gotten back to us about postponing to 2022 that’s as of last week

David Burns 10:02 PM

I’ve messaged her in the Mozilla Alumni slack

Marcus Merrell 10:03 PM

ok, thanks

Diego Molina 10:03 PM

Sounds good, so we covered one topic already :slightly_smiling_face:

So… General project statistics

  • Previous meeting: 202 open issues, 32 open PRs
  • Current: 178, 23 PRs

Simon Stewart 10:04 PM

That’s amazing work, folks

Diego Molina 10:04 PM

We are doing pretty well there, I went through many issues and asked if they are still valid. Depending on their reply we can close around 20 more in 2-3 weeks.

Most of the open issues are either feature requests, for the JS and C# bindings Perhaps we need to search for folks to give us a hand there

Simon Stewart 10:06 PM

We could absolutely do with more committers.

Diego Molina 10:07 PM

I will look for folks who have frameworks built on top of Selenium and see if they have time to give us a hand

Simon Stewart 10:08 PM

That’s a great idea

Diego Molina 10:08 PM

I’ve seen this one called Watir, maybe they can help us

Titus Fortner 10:09 PM

They have a slack channel I can ask

Diego Molina 10:09 PM

The original idea is from Titus actually :slightly_smiling_face:

Titus Fortner 10:09 PM

I mean, I cajoled Thomas from Capybara into helping :-D

we were down to one ruby labeled issue. This one we need some kind of decision on: https://github.com/SeleniumHQ/selenium/issues/8179

maybe it’s a wontfix and can be closed, or we can figure out the right thing and knock out the changes

Simon Stewart 10:11 PM

Send Keys in actions is really meant for individual key presses. But I guess we could decompose a more complicated set of inputs to individual key presses and releases

Diego Molina 10:14 PM

Would you like to dig deeper into the issue right now, @titusfortner?

Titus Fortner 10:14 PM

I was generally looking at the needs-discussion ones: https://github.com/SeleniumHQ/selenium/labels/A-needs%20decision

if we need a discussion to figure out what is the right thing, this seems like a good forum for that if we need more info we can push it back til next meeting, etc

Diego Molina 10:15 PM

Makes sense, I can definitely go over those issues and put them in the agenda for the next one, good idea

Titus Fortner 10:15 PM

but no, I don’t need anything specific from that one

right now just wanted to raise it since we haven’t discussed it before :)

if and when we get guidance I/others can implement it, but need to know what to implement :-D or I’ll make the Watir dev do it

Diego Molina 10:18 PM

ok, next topic

  • Pending work that needs to be done for the third Beta?

Things left in Java, Python, JS, Ruby, C#?

  • “se:cdpVersion”?
  • Can all bindings do CDP over Grid?

Anything else on the client side?

Simon Stewart 10:19 PM

I have local diffs with se:cdpVersion wired up properly in Firefox and Chromium-based browsers It’s a little funky, and I’d like a test around it before doing much more

Titus Fortner 10:20 PM

We have cdpVersion hard coded for Firefox and are getting browser version to automatically serve the right version to Chrome/Edge the endpoint would make a couple things easier :)

Simon Stewart 10:21 PM

I’m making the browsers return the cdp version and endpoint in the capabilities

se:cdpVersion and se:cdp respectively

Titus Fortner 10:21 PM

oh yes, capabilities not endpoint, I knew what I meant to say in my brain ;-)

Simon Stewart 10:22 PM

Ha! :slightly_smiling_face:

Diego Molina 10:23 PM

Ok now, Server side:

  • Enable retries of commands where necessary using failsafe
  • Pipe VNC connectors through the websocket plumbing for live video
  • Return CDP url by using the Grid url
  • CDP url for Firefox
  • Platform matching but when platform is Windows
  • Investigate: Grid gets stuck when screenshot is taken in a terminated session

this is what I have in my list, not sure if there is anything more

  • Platform matching bug when platform is Windows

Simon Stewart 10:25 PM

We should already be sending the CDP url for the Grid in Capabilities

And I’ve got the CDP url for Firefox in my local patches

Diego Molina 10:25 PM

ah, that is true

scratching that

Simon Stewart 10:26 PM

Hurrah! One step closer :slightly_smiling_face:

Diego Molina 10:27 PM

by looking at the download numbers and issues created after beta 2, which is not a lot… what is our overall feeling about beta 3?

let’s say, when most of features and bugfixes are done we release it or do we want to wait a bit more for feedback?

David Burns 10:28 PM

I think do the bug fixes and release

Diego Molina 10:28 PM

+1 to that

David Burns 10:28 PM

the “closer” we are to a full release the more our pool will increase

a “better” question… what do we need to get to a RC?

Jim Evans 10:29 PM

.NET doesn’t do CDP over grid right now. a refactor is required to make that possible. i have it in progress, but it’s not ready to get committe.

David Burns 10:29 PM

so we need ^ to get to RC what else?

Simon Stewart 10:29 PM

Oh. Yeah. RC backwards compat

David Burns 10:30 PM

I mean harder to get to points but wont stop beta releases

Simon Stewart 10:30 PM

I’d also like to properly clean up the java client code to strip out JWP support

David Burns 10:30 PM

and RC I mean release candidate

Simon Stewart 10:30 PM

But I think that’s going to be a hard thing to do

Diego Molina 10:30 PM

Simon using every chance to ship RC into Selenium 4 :smile: New

Simon Stewart 10:30 PM

We can do an RC once we think we’ve got all the features done

I suspect beta 3 may be our last beta, if @jimevans gets the time and support he needs for CDP over Grid

Diego Molina 10:32 PM

I am getting a new Windows machine, in part to see how I can help with C#, so expect questions @jimevans :slightly_smiling_face:

Simon Stewart 10:32 PM

Amazing! :slightly_smiling_face:

Jim Evans 10:33 PM

@diemol happy to collaborate.

Diego Molina 10:33 PM

I believe we covered all topics, unless someone has anything else?

Michael Mintz 10:34 PM

Full official release of Selenium 4 by year’s end?

Simon Stewart 10:34 PM

Even sooner

When shall we aim to ship beta3?

Titus Fortner 10:35 PM

I’m waiting for Simon to decide he has to rewrite the Java HTTP Client before we ship Se 4 ;-)

David Burns 10:35 PM

not next week as I am away but the week after maybe?

Diego Molina 10:37 PM

2-3 weeks from now would be realistic, I think

Simon Stewart 10:37 PM

Here’s the plan, then. We’ll ship beta3 when two of these conditions are met:

  • The .net bindings support CDP over Grid
  • We send se:cdpVersion in Capabilities and that’s also handled by Grid
  • Two weeks have passed

Sound good?

Diego Molina 10:38 PM

Sounds good to me

alright, that sounds like a wrap for today’s meeting… however, if anyone has a comment about what we discussed today, feel free to comment it here at any time

Titus Fortner 10:43 PM

Thanks @diemol!

Public Project Meeting - March 11, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on March 11, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:59 PM

Hopefully it will be a brief one :slightly_smiling_face: pinging folks for the public project meeting… @AutomatedTester @harsha509 @titusfortner @mmerrell @jimevans @simonstewart @barancev @luke

10:01

Agenda for today:

  • General project statistics
  • Anything new to report from the last PLC/SFC call?
  • CoC, next steps?
  • Pending work that needs to be done for the second Beta?

if you have any more topics, please feel free to add them

Titus Fortner 10:02 PM

:wave:

Sri Harsha 10:02 PM

:wave:

Diego Molina 10:03 PM

ok, let’s start slowly while people join… first topic is:

  • General project statistics

Previous meeting: 234 open issues, 32 open PRs Current: 202, 32 PRs

10:04

Again, really great work lowering the number of open issues!

Diego Molina 10:05 PM

What I see in the open issues, every now and then, is a few feature requests.

I think it’d be helpful to give some feedback on them at some point

Titus Fortner 10:05 PM

I need to remember not to add PRs until after the meeting :)

Diego Molina 10:06 PM

for now, I am closing a few feature requests because they are not aligned at all with Selenium or because no one has commented in over 1.5 years

10:07

ok, let’s move to the next topic Anything new to report from the last PLC/SFC call?

10:08

@mmerrell @barancev @simonstewart @manoj9788 @jimevans

Simon Stewart 10:08 PM

Nothing major. @mmerrell was going to chat with the SFC about the Coc

Diego Molina 10:08 PM

perfect, that was the next topic, CoC :slightly_smiling_face:

do we know what we can do to speed the process a bit? We had an incident in the past few days where a CoC would be helpful https://groups.google.com/g/selenium-users/c/bpeUO9vAa2A

10:10

Could we add the https://www.contributor-covenant.org/ as a start and then iterate on it when the SFC has time?

Marcus Merrell 10:10 PM

that chat happened, and Karen is supposed to reach out to the contractor - I haven’t pinged her in a week, but I can do that

Diego Molina 10:11 PM

thank you, @mmerrell!

David Burns 10:11 PM

I think we can just copy what Sage did from their repos

Diego Molina 10:11 PM

that is also a good idea to have a place to start

David Burns 10:11 PM

yea

10:11

and I think we can have the odd hour from Sage to process it since they work for the SFC now

Diego Molina 10:12 PM

I forgot about that, I’d say we can do that

10:13

what do the other folks think?

Simon Stewart 10:13 PM

I’m okay with that

Marcus Merrell 10:14 PM

I’m fine with it… I simply can’t believe it’s been a year

David Burns 10:16 PM

tbf… I could have pushed harder but since I am with ${employer} that can be hard to find time

Marcus Merrell 10:16 PM

I’m in the same boat, but it’s unreasonable that we have to push this hard as far as I know, we’re a top revenue driver for the SFC, and asking a lawyer to do an hour of lawyering does not seem unreasonable

but we aren’t in a position to make a big change here, so I’ll keep pressing where I can

Diego Molina 10:18 PM

absolutely, at least it feels that we can have a CoC soon by following this path

do you still have the docs Sage gave us, @AutomatedTester?

Marcus Merrell 10:19 PM

if we get that, do we still need to go through the SFC and everything?

David Burns 10:19 PM

I am sure I do

Diego Molina 10:19 PM

I think we still need an expert on the field to help us refine the edges so we are sure we have something good in place

Marcus Merrell 10:19 PM

ok, good

10:20

I just pinged KS

David Burns 10:20 PM

at worst I can take Sage’s repos and just cobble something together

Diego Molina 10:20 PM

perfect, that’d be great

ok, perhaps we can move to the next topic?

  • Pending work that needs to be done for the second Beta?

Titus Fortner 10:24 PM

we’re as good on grid as we’re going to get without changing the underlying http client, right?

Diego Molina 10:24 PM

ok, so this is what I have about that: Server changes:

  • Pipe VNC connectors through the websocket plumbing for live video (nice to have for Beta 2, not a must)
  • Return CDP url by using the Grid url (nice to have for Beta 2, not a must)
  • Allow timeout, cleanupCycle to be configured in Grid (this is about allowing users configure some timeouts, @Puja Jagani did a part of it already, the rest seems simple, but not a must for Beta 2)

Things left in Java, Python, JS, Ruby, C#?

  • Using se:cdpVersion

yes, about the http client, I’d say so, but we will know more after people use beta 2

Titus Fortner 10:25 PM

is there a reason we can’t release 2 right away and do the rest for 3?

there are a few things in the Ruby code I want to be able to start using

I’m assuming there have been enough improvements elsewhere to justify a new release?

Would be nice to have more smaller releases so long as code/tests are in a good shape

Diego Molina 10:27 PM

I also have the feeling that the major issue was the Grid memory usage, which we adjusted by having a single http client instance everything else seems to be small adjustments, some could happen for beta 2 and the rest for beta 3

Simon Stewart 10:27 PM

I think so

I’m fine with no getting the se:cdpVersion stuff in before we push the next beta

10:28

Also on my list before 4.0 is getting script pinning using CDP up and running

That feels somewhat gnarly

Diego Molina 10:30 PM

sounds good, so maybe let’s sync during the next days to see when we can release beta 2 (as in, when people are around to give their input as well)

David Burns 10:30 PM

It sounds like there is nothing left to do…

Diego Molina 10:30 PM

we need to fix the javadocs

David Burns 10:31 PM

yes!

Diego Molina 10:31 PM

(maybe that is the most important issue for now :slightly_smiling_face:)

David Burns 10:32 PM

definitely the most important issue

Diego Molina 10:33 PM

ok, I think that was the meeting for today, do we have anything else we’d like to discuss?

David Burns 10:33 PM

nope

Sri Harsha 10:33 PM

we need to update JS doc too

https://www.selenium.dev/selenium/docs/api/javascript/index.html

Diego Molina 10:34 PM

true, while checking old issues, there are 3-4 we could close by updating the docs

ok, so let’s wrap today’s meeting with that, thank you everyone!

Public Project Meeting - February 25, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on February 25, 2021,5:30 PM CET. (Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:54 PM

@titusfortner @barancev @harsha509 @luke @jimevans @simonstewart

Luke Hill 9:54 PM

Yip. I’m here if needed.

Diego Molina 9:55 PM

The only topic I have today, to make it a short meeting, is: “what is needed for beta 2” Feel free to add/propose any other topics

Luke Hill 9:59 PM

Alongside that, do we have a rough idea of what would enable us to release a 4.0.0 proper (i.e. what milestones we need to hit)

Diego Molina 10:01 PM

Let’s wait a few minutes to see if we have enough people to start the meeting

Titus Fortner 10:04 PM

I have a couple minor things I want to do before beta2, but the sooner the better for me :)

Simon Stewart 10:04 PM

I’m in a planning meeting, but I’ll follow along slowly

Titus Fortner 10:05 PM

(Element#dom_attribute is the main one I want to finish). I think Java, C# both have that one already

Diego Molina 10:05 PM

Ok, then let’s start with the ones who are around. Only one topic so far: “what is needed for beta 2”

What comes to my head: fixing the leak :slightly_smiling_face:

Simon Stewart 10:05 PM

Crush the leaks. Ensure CDP on Grid to a Docker instance works

Diego Molina 10:06 PM

Regarding the leak, after reading more about the AsyncHttpClient issues and their google group…

10:07

they mention that each AsyncHttpClient instance has its own pool

Diego Molina 10:07 PM

which is why they recommend to have one single instance of it

Puja Jagani

After you pointed out the potential problem area, I attempted to use single instance of the AsyncHttpClient today and still saw the leak :confused: Will try and dig deeper tomorrow. Let me know if you want me to try something in particular.

Diego Molina

One single instance for the whole distributor?

Puja Jagani

One single instance as we had earlier, similar to https://github.com/SeleniumHQ/selenium/blob/selenium-4.0.0-alpha-7/java/client/src/org/openqa/selenium/remote/http/netty/NettyClient.java#L41 java/client/src/org/openqa/selenium/remote/http/netty/NettyClient.java:41 private static final AsyncHttpClient httpClient = https://github.com/SeleniumHQ/selenium|SeleniumHQ/seleniumSeleniumHQ/selenium | Added by GitHub

Puja Jagani

This was just to narrow down the problem area. It was something I was trying to eliminate if creating a new instance is the problem or the way we handle the response (blocking bit you mentioned earlier)

Puja Jagani

Distributor heap with single instance :see_no_evil:

Diego Molina 10:08 PM

additionally you can limit the size of the pool

so I am planning to tweak the client configuration and see if that helps

10:09

sadly, the docs for AsyncHttpClient are inexistent, but it seems like a robust implementation it is used for Gatling

10:09

(a loat test tool)

10:10

load*

David Burns 10:12 PM

@simonstewart what’s left, assuming its everything, to “Ensure CDP on Grid to a Docker instance works”

Simon Stewart 10:12 PM

(In a meeting)

Titus Fortner 10:13 PM

each of the bindings need to be able to implement that part (getting debugger address from caps, etc)

David Burns 10:13 PM

@titusfortner it’s done?

10:14

it gets it from se:options

Titus Fortner 10:14 PM

I don’t think he’s done yet with the first part

he’s changing that

Simon Stewart 10:14 PM

se:cdp now I updated the bindings that use it

David Burns 10:14 PM

@simonstewart touched my code… filthy java person in my python code

Simon Stewart 10:14 PM

The “CDP in Grid” stuff will add se:cdpVersion

Luke Hill 10:14 PM

One of the new things I noticed in ruby (Not sure if it’s relevant across the board). Was the new chrome cdp stuff needs to be able to work in local/remote instances.

Simon Stewart 10:14 PM

“My precious….”

David Burns 10:14 PM

:stuck_out_tongue:

Simon Stewart 10:15 PM

@luke that’s what the se:cdp capability allows

Luke Hill 10:15 PM

One step ahead of me :smile:

Simon Stewart 10:15 PM

The Selenium Server knows how to forward CDP traffic

Titus Fortner 10:15 PM

yeah, Ruby code has never actually allowed users to benefit from browser specific functionality in Remote WebDriver because of subclassing blah blah

Luke Hill 10:15 PM

So check back again in beta2 is the answer basically.

Titus Fortner 10:15 PM

I have a PR to address it

Simon Stewart 10:15 PM

I’m going to make the local drivers also set se:cdp

Titus Fortner 10:16 PM

With that PR, the Ruby CDP code works with server only if it is on localhost, so we’ll also have to update to what Simon has done

Luke Hill 10:16 PM

We “know” what we need to do. Which is half the battle.

Titus Fortner 10:17 PM

With @p0deje been gone for a while and @twalpole being super busy it’s just a matter of bandwidth. :)

well, partly, I only know “ish”

Diego Molina 10:17 PM

it’s the chance for @luke to do some commits :slightly_smiling_face:

Luke Hill 10:18 PM

I can try help where possible. But I’m not quite on their standard.

Titus Fortner 10:18 PM

I’d also like to figure out how to do a different gem publishing for CDP versions

10:19

it’s more important that we be able to update the CDP versions to match the browser versions than Selenium methods to CDP methods, so I’d like to be able to release the artifacts independently, and let users toggle it somehow.

Luke Hill 10:19 PM

By Easter I will hopefully be in somewhere more stable again either renting or buying my first place. So yeh should be able to do more in evenings. This is going to be my fifth property move in just over 2 years

Titus Fortner 10:22 PM

How much work is there still in the leak investigation? (I ask because I literally have no idea what all is involved)

Diego Molina 10:23 PM

Not sure, I’ve invested this week and at least I’ve pinned it down to the Distributor

10:24

It eats memory over time when new tests are executed, and never returns it

I am now checking if the problem is really related to the AsyncHttpClient

10:25

well, more related to the way we use it

David Burns 10:25 PM

@diemol @Puja Jagani knows this is a priority so feel free to rope her in :slightly_smiling_face:

Diego Molina 10:26 PM

they recommend to have a single instance, and in the Distributor we have one instance per registered node, and one instance to do the health checks, and another one that I have not pinned down to see what it is

Simon Stewart 10:30 PM

Because each instance needs its own config

10:31

If we could change config per request, we’d be fine

Diego Molina 10:31 PM

they have a different base url, right?

Simon Stewart 10:31 PM

Right

10:32

And possibly time outs

Anything on the config object

Diego Molina 10:33 PM

I did not see different timeouts, but we will need them when we allow users to configure the timeout in Grid

Puja Jagani

I think the RequestBuilder allows to set timeouts per request.

Diego Molina 10:34 PM

so, hm, interesting… now sure what to do now :slightly_smiling_face:

Simon Stewart 10:35 PM

Once again, I shall mutter about writing our own http client based on netty, starting from the one we have for domain sockets

Selenium 4 Beta 1 Released

We’re very happy to announce the release of the first beta of Selenium 4.

We’re very happy to announce the release of the first beta of Selenium 4. We’re shipping this for Java, .Net, Python, Ruby, and JavaScript, so if you’re using any of those languages, go and grab it from your package manager of choice!

This has been the culmination of a lot of work by so many people, not only the project TLC, but also of literally hundreds of people: 205 since we released Selenium 3.141.59, at the last count. A big thank you to everybody who’s helped make this possible!

So, what’s changed since Selenium 3? The answer is both “not much” and also “almost everything”.

By “not much”, I mean that if your tests are working with Selenium 3 right now, you should be able to just upgrade your dependency to Selenium 4. You will find that things that were marked “deprecated” are now gone, but the advantage of the long time between the last Selenium 3 release and this is that you’ve had plenty of time to try and find alternatives.

If this doesn’t work, please let us know! We’ve worked hard to ensure compatibility between the releases, but it’s possible we may have missed some things.

One thing you may want to do to get ready for the update (which you can do before updating the dependency itself!) is to update the drivers you need. In particular, please update geckodriver to 0.29.0 or later.

By “almost everything”, I mean that under the covers there have been substantial changes. We’ve rewritten the Selenium server to allow it to work not only in the familiar “standalone” and “hub and node” modes, but also in a new “distributed” mode, which makes it signifcantly easier to deploy to something such as Kubernetes in a way that scales well.

The new server is also wired up with support for OpenTelemetry and exposes a GraphQL endpoint, so that figuring what’s going on in the Grid, and tracking down what’s gone wrong if something happens, is easier than ever.

Not all the changes are server-side. We recently wrote about the new features in Selenium 4 that you can use in your tests, but some of the main highlights are:

  • Relative locators, for finding elements using terms that make sense to us humans.
  • The ability to intercept network traffic
  • Authentication with basic or digest authentication.

We’ll be telling you more about these features in later blog posts, and as we improve our documentation.

If this sounds interesting, please download the beta from your favourite package manager (maven, nuget, npm, pip, or the gem), or directly from the Selenium site.

Public Project Meeting - February 11, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on February 11, 2021,5:30 PM CET. (Below times are on CET)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 5:31 PM

Agenda for today:

  • General project statistics (Previous meeting: 252 open issues, 35 open PRs, Current: 234, 32 PRs)
  • Anything new to report from the last PLC/SFC call?
  • Overall announcements? New people on committees, with the commit bit, etc?
  • Pending work that needs to be done for the first Beta?
  • CoC, next steps?

@simonstewart @barancev @titusfortner @AutomatedTester

feel free to add more topics

intentionally not pinging Jim, Jim is not able to join

@harsha509 @luke and others, feel free to join as well

Simon Stewart 5:34 PM

@titusfortner wants to add “Remove Edge HTML”

Titus Fortner 5:35 PM

maybe a discussion of the general plan for post beta since it looks like the release is imminent?

Diego Molina 5:35 PM

Alright, first thing to mention is… great job everyone dealing with open PRs and open GH issues!

I don’t remember when we had such a “low” number of issues and PRs

but we can keep making that number smaller :slightly_smiling_face:

first topic: Anything new to report from the last PLC/SFC call?

Alexei Barantsev 5:37 PM

I expect the number of bugreports to go up after beta 1 release date

people will download and try the new version

be prepared :slightly_smiling_face:

Titus Fortner 5:38 PM

hopefully. :)

Luke Hill 5:38 PM

ah right. When are these and “should” I be coming to them? Also is there some form of meeting request with link on e.t.c.

I only ask because the cucumber one which I go to i’ve stuck on my calendar so I don’t forget.

Simon Stewart 5:38 PM

@luke there’s a public calendar we share

There’s something every Thursday at 4:30 UK time

Diego Molina 5:39 PM

I believe this is the link to the calendar, Luke https://calendar.google.com/calendar/embed?src=7nmc82h5ok17obircmdu27sghs%40group.calendar.google.com&ctz=Europe%2FBerlin

Simon Stewart 5:39 PM

We announce here 30 minutes before things kick off

Diego Molina 5:39 PM

So, anything from our first topic?

Anything new to report from the last PLC/SFC call?

Luke Hill 5:40 PM

Rightio, is it just typed in here or is there a video call?

Diego Molina 5:40 PM

only typed

Simon Stewart 5:41 PM

Nothing much to report from the PLC/SFC call

Alexei Barantsev 5:41 PM

re: issues and PR, there is a new contributor to the JS part of the project, https://github.com/SeleniumHQ/selenium/pulls/potapovDim I think we should support him as much as possible, he seems to be motivated, I saw he streamed about official selenium JS binding to youtube

Simon Stewart 5:42 PM

We’re waiting for @mmerrell to report back: he was going to reach out to the SFC directly

@barancev +1 for supporting new folks. Anything we can do to help them?

Alexei Barantsev 5:42 PM

the JS part of the crew is traditionally underrepresented… so we should care about JS contributors very much

I’m trying to get into contact with potapovDim to get him more involved

David Burns 5:43 PM

I’ve been trying to make the JS bindings a first class citizen with bazel

I think I have that nearly done

Diego Molina 5:44 PM

ok, the next topic is:

Overall announcements? New people on committees, with the commit bit, etc?

Probably not so much?

Marcus Merrell 5:45 PM

I reached out to SFC about the CoC SOW - Karen responded that she’d look at it “tomorrow” which was last Wednesday. I’ll text her right now to see what she says

David Burns 5:45 PM

cool

our contact for the CoC is still free

Marcus Merrell 5:45 PM

you mean “available”?

David Burns 5:46 PM

No, she has been trying to get back to work but taking it slowly as she is shielding due to covid

Diego Molina 5:47 PM

ok, let’s jump to the main topic then

Pending work that needs to be done for the first Beta?

Simon Stewart 5:47 PM

There’s a few things on my list.

Primarily, the Options classes don’t serialise to a w3c-safe version automatically.

That won’t be hard to fix

David Burns 5:48 PM

My list has Firefox CDP in JS (nearly done)

Simon Stewart 5:48 PM

There’s been a team effort to get the Grid stable. It eats memory, but should work now (@barancev and @diemol can correct me on that)

Diego Molina 5:49 PM

I had these two items on the client side, are the still pending? Make relative locators return elements sorted by proximity Allow locator strategies to be pluggable Enable fallbacks for commands

Alexei Barantsev 5:49 PM

I think that the grid is ready to ship

Jim Evans 5:49 PM

my list is all post-beta1, mostly around refactoring to allow CDP in remote and to enable for firerfox.

Alexei Barantsev 5:49 PM

there is a memory leak, but it’s not critical for the beta

Simon Stewart 5:49 PM

@diemol both of those are done

Titus Fortner 5:50 PM

Firefox CDP shouldn’t need to hold up beta

do we need to fix Options to release beta?

hoping we can release more frequently after we get to beta, just want to know what has to be there for it to be a beta

Diego Molina 5:52 PM

when do we think we can have beta 1 released?

should we set a date for next week?

Titus Fortner 5:52 PM

tonight?

everything is green, so what feature do we need to hold up the release for?

can we do it all in future betas?

Diego Molina 5:53 PM

perhaps the only item is what @simonstewart mentioned?

Simon Stewart 5:53 PM

The Options thing is it, AFAIAC

Titus Fortner 5:54 PM

and we can’t release a beta without it? Is it a user facing change?

Simon Stewart 5:54 PM

It’s suboptimal to not be able to create webdriver instances in java

Titus Fortner 5:54 PM

I completely agree it’s needed

Simon Stewart 5:54 PM

It’s a user-facing change

Titus Fortner 5:54 PM

ok, then :) easy.

David Burns 5:54 PM

I mean… no one uses Java right

Simon Stewart 5:55 PM

Seldom touched.

It’s a niche thing

Jim Evans 5:55 PM

considers changing his name to “no one”

Titus Fortner 5:55 PM

I thought it was an sub-optimized thing that we fix in implementation

but if it changes what a user has to do, then great. Let’s set a date next week? :)

Simon Stewart 5:57 PM

We’ll ship when it’s ready.

But probably next week

Diego Molina 5:58 PM

could we set a tentative date?

So people have it in mind and, if possible, save some time for it

like, we target next Thursday and we touch base on Tuesday to see if we actually can make it, what do you think?

Titus Fortner 6:01 PM

Whatever makes sense to Simon. Ruby stuff should be ready to go on short notice

Simon Stewart 6:03 PM

I’m very time constrained.

But Monday and Tuesday should be selenium days for me

Alexei Barantsev 6:04 PM

let’s ship on Monday then

David Burns 6:04 PM

Python stuff is ready, changelog is already updated

Simon Stewart 6:05 PM

@barancev if everything works on Monday, we ship on Monday

Alexei Barantsev 6:06 PM

yes, if everything works

Titus Fortner 6:06 PM

sounds good to me

excited for it

David Burns 6:06 PM

Let’s not set a date, as much as I want a beta. People will focus on it too much

Diego Molina 6:06 PM

sounds good, my intention was just to drive this conversation :slightly_smiling_face:

Titus Fortner 6:08 PM

Are we ready to talk about removing EdgeHTML? :)

Diego Molina 6:08 PM

got for it

Titus Fortner 6:09 PM

who wants to keep it in Selenium4?

No one? Ok, let’s remove it.

:)

Simon Stewart 6:09 PM

I’m going to let @jimevans make the call

Titus Fortner 6:10 PM

seriously, though, it’ll be less confusing for calling “edge” methods in Se4 to represent the latest instead of having to require people to specify “edge_chrome” and “edge_html”, etc

Simon Stewart 6:10 PM

I’m fine with edge and edgehtml

Titus Fortner 6:10 PM

well “edge” used to be edgehtml

Simon Stewart 6:10 PM

Everyone who’s lazy will get the right thing by accident

Titus Fortner 6:10 PM

so it’s going to be a change either way

but I’m fine with whatever @jimevans decides on it

Jim Evans 6:11 PM

let me make the call regarding EdgeHTML?

Simon Stewart 6:11 PM

Yeah

Titus Fortner 6:12 PM

should we all ditch explicit support for it in Se 4 since MS is forcing people off of it… :)

Alexei Barantsev 6:12 PM

@titusfortner we provide support for IE :slightly_smiling_face:

Titus Fortner 6:13 PM

IE is and will remain special

Diego Molina 6:13 PM

this is about EdgeHTML, not IE, right?

David Burns 6:13 PM

Looks like bwalderman submitted a patch for python to remove it a while back

Titus Fortner 6:13 PM

I think MS can force upgrading from EdgeHTML to Edgium more easily than forcing people to upgrade IE

David Burns 6:13 PM

bwalderman of John Jansen’s team

Alexei Barantsev 6:13 PM

@diemol yes, EdgeHTML, not IE

Jim Evans 6:13 PM

given that they’re doing forced-upgrades of people on EdgeHTML, i’m inclined to remove support for it. sure as we do, you know people will still be like “how do i test against edgehtml, since i don’t give any reflection on what my users are actually using and don’t want to have to think critically.”

is quite cynical today.

David Burns 6:14 PM

so… that was my question really…

Simon Stewart 6:14 PM

I’m down with removing it from the java tree, then

David Burns 6:14 PM

is Sauce dropping support for it?

or magic “here is an old selenium to support it” type code

Titus Fortner 6:15 PM

if the decision were up to me, yes, but it isn’t, so ¯_(ツ)_/¯

Diego Molina 6:15 PM

to be honest, I don’t know how we are doing it

David Burns 6:16 PM

we could ask your product team especially since they are starting their day or … drop it with a big YOLO

Diego Molina 6:16 PM

but if it is browser that won’t be supported by MS starting on March(?), we will eventually drop it

Titus Fortner 6:16 PM

I can see valid use cases for IE, I don’t see valid use cases for old Edge, and yeah, it’s all complicated since things have changed since 3.141.59

Diego Molina 6:16 PM

goes and asks the team in charge

Titus Fortner 6:17 PM

Dude, we still support running Firefox 4 on Vista

David Burns 6:18 PM

screenshots this for that team if they come moaning…

Titus Fortner 6:18 PM

So, you can test EdgeHTML with MutableCapabilities if you need to

David Burns 6:19 PM

the python code treats them the same, just creates a different service

Titus Fortner 6:21 PM

Titus: supports Jim: inclined to support

anyone else with opinions on keeping it?

it’s really the force upgrades that is pushing me to be more drastic in the recommendation, plus the potential confusion over the method

David Burns 6:22 PM

I’m happy to drop

Diego Molina 6:22 PM

+1 to that

Titus Fortner 6:22 PM

@barancev?

Oh, missed Simon saying he’s good with it

whew, ok, I’ll stop banging on about it :)

thanks

Diego Molina 6:25 PM @titusfortner, maybe you can create a GitHub issue and add labels for each language binding? Then we can track it

Titus Fortner 6:25 PM

Another ask…

Can we create a list of the new features that the bindings need to implement so that we can make sure all the languages are supporting the same things?

Some of the stuff being done in Java I’m not sure if it is grid related or bindings related.

I know Ruby is missing a few things, and I’m not even sure I know which all of them are.

Diego Molina 6:28 PM

I think we would need to go through the changelogs and build that list

David Burns 6:30 PM

@titusfortner thanks for offering to make sure the docs are up to date

Titus Fortner 6:30 PM

Can we make a grid in an issue, or do we need to track it elsewhere

I legit tried to help with the docs, but Go kicked my butt and I threw in the towel

I’m sticking with Jekyll where the OO makes sense :)

Diego Molina 6:31 PM

an issue would be nice

David Burns 6:31 PM

What…

@titusfortner you should watch my twitch… the docs are easy

Diego Molina 6:32 PM

Can we make a grid in an issue, or do we need to track it elsewhere

I am replying to this

lol

David Burns 6:32 PM

The what was for Titus

Diego Molina 6:32 PM

ok, so the meeting time is up, thank you everyone!

New Tricks in Selenium 4

Selenium Grid: a mechanism that allows you to distribute your tests across a fleet of machines.

In the fourth and final post in his series, Simon Stewart continues talking about what’s coming in Selenium 4 and reviews what’s new in the Selenium Grid.

We’ve covered a lot of ground in the past few blog posts, including how to contribute to the project, and some details of what you can expect as a Selenium user. But there’s more to Selenium than just the APIs you use to write your tests, and one of the big features we’ve not covered yet is the refreshed Selenium Grid: a mechanism that allows you to distribute your tests across a fleet of machines.

Before going further, it’s always nice to acknowledge where we’ve come from, not only because it’s interesting, but also because it helps explain the “why” of the refreshed design.

Way back in the mists of time (2008), Jennifer Bevin and Jason Huggins worked on a system called the Selenium Farm at Google. This was a fleet of machines sitting in a cupboard somewhere that allowed you to run the original Selenium protocol. This was, of course, at Google scale, so there was more than one cupboard :)

This allowed people at Google to distribute their tests and scale out beyond their individual machines. This was such a great idea that when Jennifer talked about the Farm at a Selenium meetup, Philippe Haringou (then at ThoughtWorks) decided to write an Open Source implementation of the same thing, which he called “Selenium Grid”.

Selenium Grid was a lovely piece of technology, but it had one drawback: it only spoke the original Selenium RC protocol. That was fine, but WebDriver spoke a different wire protocol, which was called the JSON Wire Protocol, and folks wanted to be able to use both Selenium RC and WebDriver at the same time.

This is where Francois Reynaud enters the picture. He was working at eBay, reporting to Michael Palotas, and he had written something like the original Selenium Grid, but which also worked with the JSON Wire Protocol. They very kindly contributed that work to the Selenium project, and it formed the basis of the Selenium Grid 2. We decided at the time that the Selenium standalone server would effectively be a “grid of one”: it would have everything you needed in it to set up a Selenium Grid, as well as to work as a single standalone server. Merging the code and getting it stable took a while, but thanks to the efforts of Francois, Kristian Rosenvold, and many others, we merged Grid 2 into the main Selenium project and shipped Selenium 2 in 2011.

Even if 2011 doesn’t feel that long ago, the modern world has changed quite significantly. In 2011, we didn’t have Docker. We didn’t have Kubernetes, we didn’t really have AWS. So, the Selenium Grid didn’t know that those things were coming in, and wasn’t written to take advantage of them. Fortunately, we did have virtual machines back then, and the Grid 2 had been designed to be able to support them.

This was the hook that an excellent project called Zalenium. Developed by Diego Molina, Zalenium added a really nice UI and support for Docker and Kubernetes—all built on top of the Grid 2. This has allowed the Selenium Grid to continue to be relevant and useful to this day, which is an amazing achievement.

But, like I said, it took us time to stabilise Grid 2: about six months of hard work, largely led by Kristian. That’s because while Grid 2 was sophisticated, the code was hard to read and hard to maintain—and very few people could do that. Worse, the merging of the Grid 2 and the original Selenium server was pretty crude; effectively there were two separate servers shipped in the same binary. This led to problems occurring in the Grid but not when run in standalone mode, and vice versa.

With Selenium 4 we’ve decided to bite the bullet and address these three concerns. Firstly, we want something that was easier to work on and maintain. Secondly, we want to merge the servers into a single unit. Thirdly, we want something that will take advantage of the world of modern infrastructure we have available to us now, not just in the form of Docker and Kubernetes, but also to be able to use emerging technologies such as distributed tracing.

To do this, we looked at the functionality the Grid provided, and to model each piece as a component that we can either run “in memory” (allowing us to have a single standalone server), or in a more distributed way, allowing the “hub and node” architecture that we’re familiar with from the original Selenium Grid, to a fully distributed design.

The first component is the “router”. It serves as the entry point to the Grid. You can expose it to the internet and it directs requests to the Grid. It’s designed to be stateless, and so you can add more to Grid as you find you need to.

When the router sees a new session request, it places it on a “session queue.” The session queue is read by a component called the “distributor,” which maintains a model of all the places in the Grid where a session could be run: we call them “slots”. The slots are hosted by components called “nodes,” and each node can have one or more slots. When the distributor pulls a new session request from the queue, it identifies the most appropriate slot to use, and forwards the request to the node which owns the slot. Once the node has started the session, the distributor puts the session ID and the URL of the Node that is running the test into the “session map”—you can think of the session map as being a simple map of a session ID to URL—and the new session response is sent back to the waiting test.

Requests for running sessions (that is, for most webdriver calls!) are handled slightly differently. The router will use the session map to look up which node to forward the request to, avoiding the need to involve the distributor entirely. This means that you can just keep adding nodes to the Grid, and there are fewer bottlenecks in the architecture to slow your requests down.

Conceptually, there are these five moving pieces within the Grid. But there’s actually a sixth one, which is a message bus. The five Grid components communicate internally through the message bus, but the actual components that you need to think about when you’re thinking about the Grid are the Router, Session Queue, Distributor, and Nodes.

When you run Selenium Grid 4 in “standalone” mode, you actually get a “grid of one”. We wire up all these components in a single process, but they’re all still there.

You can also run it in the traditional Hub and Node approach that you’ve seen with Selenium Grid 2, where you fire up a Hub and a Node and it registers. If you’ve used Selenium Grid recently, that’s probably the architecture that you’re familiar with. In this case, most of the components (the router, session queue, and distributor) are running in the Hub, and the Nodes run the sessions themselves.

What’s new with Grid 4 is that you can go into a fully distributed mode if you want to. Typically, you would want to use something like Kubernetes for this, and some of the key components are designed to store data using a database or Redis for better reliability and scalability.

Something to note is that when running a distributed Grid, it becomes really difficult to figure out what is happening, particularly when something goes wrong. To alleviate that problem, we have adopted Open Telemetry to bring observability into the Grid. What do we mean by observability? It simply means that we want to be able to see everything that happens.

Finally, we’d like to expose information about the running Grid in meaningful and useful ways. The original Grid supported both JMX (a Java management API) and an HTML-based console. While nice, this didn’t make it easy to query specific areas of the Grid that you might be interested in that weren’t surfaced by the UI (for example, how many slots are available, or to find out which node a particular session is running on) To provide more flexibility, we’ve chosen to provide a GraphQL endpoint for the Grid. To ensure that GraphQL endpoint is sufficiently flexible, we’re building the new Grid console using it. That should allow you to also extract useful metrics and information from the Grid for your monitoring needs.

Those are some highlights of the new Selenium Grid. What are you the most excited about?

This was originally posted at https://saucelabs.com/blog/whats-coming-in-selenium-4-the-new-selenium-grid

Public Project Meeting - January 28, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on January 28, 2021,5:30 PM CET.(Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 9:17 PM

Yes, here is the short agenda:

  • General project statistics (Previous meeting: 262 open issues, 54 open PRs, Current: 252, 35 PRs)
  • Overall announcements? New people on committees, with the commit bit, etc?
  • Pending work that needs to be done for the first Beta?
  • CoC, next steps?

Alexei Barantsev 9:44 PM

can the Bot drop the meeting link to the chat, please, I always forget where to get it…

Diego Molina 9:53 PM

this is the written one

Alexei Barantsev 9:58 PM

awesome! I’m in yet I have nothing to add to the agenda

Diego Molina 10:01 PM

sounds good I’ll ping people around and we can wait a couple of minutes, Simon said he was going to be slightly late

10:02 PM

@titusfortner @jimevans @mmerrell @manoj9788 @AutomatedTester @harsha509 @luke

Jim Evans 10:03 PM

i’m not going to be able to make the video chat, but i can contribute here if people have questions. the only thing missing from .NET for beta1 is making CDP work via remote, which i don’t think needs to be in beta1 for .NET.

Diego Molina 10:06 PM

this is just the written one, the video chat is just to hangout, that one is next week

Marcus Merrell 10:06 PM

no status chance on the Chicago conference at this point - still looking at COVID numbers to determine whether or not it’s going to be feasible

David Burns 10:07 PM

here! sorry

Diego Molina 10:07 PM

Marcus are we still looking into an online event, Marcus?

Marcus Merrell 10:07 PM

we can look into that haven’t been to this point

Diego Molina 10:08 PM

I only ask because (I think) it was mentioned last time ok, perhaps we can start, the first topic is: Overall announcements? New people on committees, with the commit bit, etc?

10:10 PM

Aside from @luke joining recently, there are no more things to announce, right?

Sri Harsha 10:10 PM

I think luke joined recently!

Simon Stewart 10:10 PM

Nothing that I can think off

Alexei Barantsev 10:12 PM

I support @diemol’s appeal to focus attention to the issue tracker. let’s try to clean it up in view of the forthcoming v.4 release

10:13

close all outdated issues and PRs, apply everything that worth applying

Diego Molina 10:13 PM

the work done during the recent week on the issue tracker has been great, hopefully we keep that going

10:14 PM

we could jump into the next topic perhaps… Pending work that needs to be done for the first Beta? here is the list I have from the last meeting

10:15 PM

Client facing changes:

  • Make relative locators return elements sorted by proximity
  • Fix Java Module System problems (I think @simonstewart did this already)
  • Allow locator strategies to be pluggable Enable fallbacks for commands

Server changes:

  • Enable retries of commands where necessary using failsafe
  • Get the Grid UI looking nice, and returning useful data (@diemol is working on this)
  • Allow locator strategies to be pluggable
  • Pipe VNC connectors through the websocket plumbing for live video

Simon Stewart 10:15 PM

Relative locators now sort by proximity I think the Java Module stuff is working I’m working on fallbacks for locators

Alexei Barantsev 10:15 PM

I can confirm that java 9 modules are usable now

Simon Stewart 10:16 PM

Locator strategies are pluggable on the server side Once I get the locator strategies falling back on the local end, I’m fine with shipping the beta

Diego Molina 10:17 PM

we had some issue reports related to the Grid, in most of the cases it is a matter of showing the correct information on the UI and I am working on that

Simon Stewart 10:18 PM

Also there’s a nasty issue with starting a large number of sessions concurrently

Diego Molina 10:18 PM

yeah, I was going to point that one out, https://github.com/SeleniumHQ/selenium/issues/9112 I have not had time to research enough, but most of the results when googling point to: either we are creating too many Netty clients or something is wrong with the way the client is created

David Burns 10:20 PM

Feel free to pull in @Puja Jagani on the sessions one, I know she was looking at one about starting up a grid and things not working

10:20 PM

(can’t remember the issue #)

Diego Molina 10:20 PM

that’d be great, I can sync with @Puja Jagani later what do you all estimate for a beta release? 3-4 weeks?

Simon Stewart 10:21 PM

Maybe less

Diego Molina 10:23 PM

ok, I think we do not have more things pending for beta 1? the only topic left is the CoC New

Titus Fortner 10:24 PM

Is this a good time/forum to ask about wiki/docs?

Diego Molina 10:24 PM

always

Titus Fortner 10:25 PM

Diego pointed me at a couple issues @AutomatedTester created for docs & wiki cleanup things did we have an idea for what we want in the language specific wiki page vs in the docs; and user vs developer focused? The Ruby wiki stuff is way out of date, not even just Selenium 4 things :) just want to know where we should be cleaning it up to

Diego Molina 10:28 PM

are those two different things? language specific things and dev docs? (people who want to contribute to Selenium, what technical steps to follow?)

David Burns 10:28 PM

CoC is still waiting on SFC. New

Titus Fortner 10:29 PM

What we did with Watir was to make the wiki about things devs need to know about the project building/deploying, etc and everything user related went into the documentation oh, heh, looks like we ended up deleting the wiki and sending everything to the website

Diego Molina 10:32 PM

Why do we need a language bindings specific things on the user docs? Do they differ too much on how they work?

Titus Fortner 10:33 PM

So our current documentation has tabs to show the examples in each of the languages the wiki is currently just a big page of examples for using Ruby Selenium (https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings)

10:37

I guess I haven’t spent much time with the docs anyway, so maybe I should play around and see what makes sense. Didn’t know if anyone else had opinions on any of it. :) Guess not

Diego Molina 10:38 PM

ah ok, that Wiki seems to be duplicating the user docs but some parts of the Wiki could evolve to be part of the user docs

Titus Fortner 10:39 PM

yeah, it’s 2 approaches to organization as well; here’s everything in ruby, vs here’s everything, click the tab for each to see the ruby.

Diego Molina 10:39 PM

I think the 2nd could work well someone needs to take the time and take the contents of that Wiki and put them in the docs

Titus Fortner 10:39 PM

I’ll take a look at what might make sense since now that I no longer have any looming work pressing things for the first time in forever

Diego Molina 10:40 PM

cool thank you

I think that was it for today, right?

Thank you everyone!

Public Project Meeting - January 14, 2021

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on January 14, 2021,5:30 PM CET.(Below times are on IST)

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 10:02 PM

Alright, :wave: everyone, let me share the agenda

10:02 PM

  • Overall announcements? New people on committees, with the commit bit, etc?
  • Anything new to report from the last PLC/SFC call?
  • Pending work that needs to be done for the first Beta?
  • CoC, next steps?
  • Any other topics?

10:04 PM

pinging @titusfortner, @AutomatedTester, @mmerrell, @barancev

who else?

Simon Stewart 10:04 PM

@jimevans @p0deje @harsha509

Jim Evans 10:05 PM

i’m already in another meeting at the moment.

Sri Harsha 10:05 PM

m available

Diego Molina 10:05 PM

ok, let’s bring the first topic: Overall announcements? New people on committees, with the commit bit, etc?

David Burns 10:05 PM

here

Diego Molina 10:06 PM

So, I asked both to the TLC members about adding @luke as a committer, and I also reached out to Luke, both sides are happy with it.

David Burns 10:06 PM

cool!

Diego Molina 10:07 PM

Then, I will add Luke during the next couple of days and follow the steps we have in the Governance model

Simon Stewart 10:08 PM

Congratulations, @luke! :tada:

Diego Molina 10:09 PM

great! So, I think we have nothing else to add to this point?

Marcus Merrell 10:09 PM

I’ve got approval emails out to SFC to get the new contractor on the Code of Conduct. It’s time to poke again. We’ve tentatively selected dates for a Chicago SeConf (sometime in September, I believe). We’re still hopeful that with the vaccine, this will be possible. we’ll look to make a final decision, based on numbers, in ~April :parrot:

10:11 PM

We need to consider whether or not to run a virtual conference in the case that it doesn’t work out to have an irl conference

Simon Stewart 10:11 PM

Can that decision also be delayed until April?

Marcus Merrell 10:11 PM

I’m a little uncomfortable waiting that long–not for the hotel and the risk of losing the deposit $$, but because of marketing/CFP stuff let’s say “early April”

Diego Molina 10:12 PM

Great news about the CoC! ok, seems we covered also the “Anything new to report from the last PLC/SFC call?” topic as well, right?

Simon Stewart 10:14 PM

I think so

Diego Molina 10:15 PM

ok, so let’s jump to “Pending work that needs to be done for the first Beta?”

Simon Stewart 10:15 PM

There’s a few things

10:16 PM

I’ve a PR out for the new RemoteWebDriverBuilder, which is one piece. The other big bit for me is the pluggable locators, tying up the local and remote ends bits we already have. That’ll be easier with the RemoteWebDriverBuilder in place.

10:17 PM

(As it’s essentially creating new decorators of the CommandExecutor) I’d also like to ensure that things like the relative locators and script pinning work as advertised, but that’s a relatively slim tranche of work My next hacking days are Monday and Tuesday next week

Diego Molina 10:18 PM

here is a list from the previous status meeting: Client facing changes:

  • Make relative locators return elements sorted by proximity
  • Fix Java Module System problems
  • Allow locator strategies to be pluggable Enable fallbacks for commands
  • Server changes:
  • Enable retries of commands where necessary using failsafe
  • Get the Grid UI looking nice, and returning useful data
  • Allow locator strategies to be pluggable
  • Pipe VNC connectors through the websocket plumbing for live video

10:19 PM

I think this is (partly?) done “Allow locator strategies to be pluggable” and I remember @simonstewart did this “Make relative locators return elements sorted by proximity”

Simon Stewart 10:19 PM

I did The Java Module System thing is a good point, but not a huge amount of work

10:20 PM

Though it’s a little fiddly

Titus Fortner 10:20 PM

is the “pluggable” part a Java specific thing, or something new that the server is going to support that opens up new opportunities for dynamic languages?

David Burns 10:20 PM

@Puja Jagani could probably look at the Java Module work

Puja Jagani

Sure! I can take that up

Simon Stewart 10:20 PM

I can discuss the changes with her

10:21 PM

@titusfortner the remote end bits of the pluggable locators allow us to avoid sending large payloads across the wire for (eg) finding by react But it requires the local end to know in advance that it can use that mechanism Tying the pieces together with a fallback allows the local end to try the efficient way first and then fallback to the inefficient way

10:22 PM

It shouldn’t be a particularly challenging thing to do once the pieces are all nicely lined up, but getting the pieces lined up has taken time :slightly_smiling_face:

Diego Molina 10:24 PM

I am slowly getting more time to work on some open issues and getting some items from that list on the server done, like using failsafe for retries

Puja Jagani

I created a PR to get started on that front for transient errors, please have a look when time permits. I think that might serve as the starting point.

Diego Molina

perfect, will do

Simon Stewart 10:24 PM

I think the BrowserStack folks (particularly @rajendra?) are hacking on the Grid UI and can give an update on that I’m happy to punt the failsafe stuff for the beta, but it really should be in place for the 4.0 release

Diego Molina 10:24 PM

I saw one or two GH issues related to that, if I am faster than @rajendra I can tackle it and get familiar with the UI I would leave this one out as well Pipe VNC connectors through the websocket plumbing for live video

10:25 PM for beta 1 hopefully it could be there for the 4.0 release

Simon Stewart 10:25 PM

I think that’s just a case of adding the video URL to the se:options in the server Should be in the same place as we add the bit for cdp

David Burns 10:26 PM

I had a quick look at the grid-ui in a stream… my CSS sucksbut happy to pair up and fix

Diego Molina 10:26 PM

ah, so the scope is way smaller than what I was thinking

Simon Stewart 10:26 PM

The WebSocket forwarding either works or it doesn’t. If it doesn’t, CDP over the Grid is broken And I already got the CDP over Grid working :slightly_smiling_face:

David Burns 10:26 PM

@Puja Jagani is looking at adding a few more issues with graphql that we can surface

Diego Molina 10:27 PM

so we offer the WebSocket endpoint and the user can use it to stream

Simon Stewart 10:27 PM

Can we “drain” using GraphQL yet?

David Burns

I dont think so

David Burns

we can get the grid ui to call a normal url

Simon Stewart

The idea would be to use GraphQL for the entire UI….

David Burns

We can add it “soon” but since it works we don’t need to block a beta on it. Let’s have a stretch for it

Simon Stewart

But it doesn’t work if you have a distributed grid

Simon Stewart

It’s one of the “tracer bullets” of the graphql stuff, and really does need to be in

Simon Stewart

I want the beta as much as anyone, but there are some corners we should avoid cutting

Simon Stewart 10:27 PM

@diemol it’s a tiny bit more than that, but, yeah

Diego Molina 10:27 PM

I thought we wanted to put that in the Grid UI

Simon Stewart 10:27 PM

We do before 4.0

Diego Molina 10:27 PM

we would need to embed a VNC client in the UI for that

Simon Stewart 10:27 PM

But for the alpha, I’m happy with the endpoint being exposed and being able to wire up a vnc viewer locally that goes through the grid @diemol what did zalenium use?

Diego Molina 10:28 PM

noVNC, but that was something that you need to install on the host, IIRC

10:29 PM

ah, I think it also has a JS library, it “should” work there is also an alternative called “Guacamole”

Simon Stewart 10:29 PM

http://guacamole.apache.org might be useful Ha!

Diego Molina 10:30 PM

right, so I can look at that at some point

Simon Stewart 10:30 PM

Awesome. Thank you

Diego Molina 10:30 PM

coming back to pluggable locators, it is working in Java but we would need the other bindings to implement it, right?

Simon Stewart 10:31 PM

When it’s working in Java, yes :slightly_smiling_face: But I think it’s enough to get them in one binding for the beta, and the others can follow

Diego Molina 10:31 PM

Also, the reworked logic for relative locators has been implemented only in Java?

Simon Stewart 10:32 PM

The reworked logic was in the atom. Everyone has it Yay for the atoms!

10:32

:slightly_smiling_face:

Diego Molina 10:32 PM

That’s great! Do we have anything else? I will (for sure) this time create GitHub issues for the different items

Simon Stewart 10:34 PM

And add them to the project plan, please!

Diego Molina 10:34 PM

absolutely

Simon Stewart 10:35 PM

Thank you

Diego Molina 10:36 PM

Well, I think we do not have other topics, should we cut it short? New

Simon Stewart 10:38 PM

I’m down with that. Thanking for running this! Unless @jimevans has something to add? I see he’s typing

Jim Evans 10:38 PM

re pluggable locators: that’s just having findElement(s) call down the wire using the end point without validating the using and value params, yeah?

Simon Stewart 10:39 PM

That’s what the java code does at the moment

Jim Evans 10:39 PM

cool. .NET can do that too right now, i think (will have to confirm)

Simon Stewart 10:39 PM

I want to land a few more smarts

David Burns 10:39 PM

I expect the python and ruby code can do it to since monkey patching is easy and then add smarts too improve docs ftw

Diego Molina 10:43 PM

ok, seems we are done with the status meeting, thank you everyone!

Jim Evans 10:45 PM

re beta readiness: i have a refactor to .NET i want to do to make CDP via RemoteWebDriver easier/more correct, but it can wait until post-beta1

10:45

otherwise, i think .NET is ready for beta.

Results of the first ever selenium survey

Summary of the Selenium survey that was collected

Below is a summary of the Selenium survey that was collected.

Batteries included

Browser Management

Unsurprisingly, people find having to manage browsers a task they wish they didn’t have to do and wish that Selenium did this. 59.5% of respondents want Selenium to manage the browsers for them. This, though the question didn’t ask this, is to include the browser drivers.

Frameworks

The results show an interesting view into framework usage. 61% of users use a framework. When we look closer at some of the responses there could be a little language bias in there. Some responses in the “both” category are “depends on the language” or “depends on the project”. Frameworks, from a couple responses seem to be around JavaScript mostly.

How tests are run

One of the questions that was the most surprising was that people dislike running their tests in headless. 57% of people don’t want headless. This is surprising since puppeteer and playwright are up and coming tools that default to headless.

Browsers

People tend to favour evergreen, or the latest version from auto updating browsers, with over 55% of people wanting that. When we look at the data closer then people tend to do evergreen and then a specific version for IE.

People are also, overwhelmingly I should add, wanting to test on multiple browsers. 78% of people test with multiple browsers. This goes against the Chrome only support that we see on social media. The most used browsers for testing are (Percentage of respondents testing with browser):

  • Google Chrome (98%)

  • Firefox (67%)

  • Microsoft Edge (33%)

  • Safari (29%)

  • IE (13.5%)

One thing that is clear is that Testing against multiple browsers is hard. 51.6% say it’s hard and a further 27.3% being 3 out of 5. This is likely where some frameworks are becoming popular as it removes some of the need to understand the asynchronicity of browsers. This still has its problems in puppeteer and playwright as they add similar wait libraries to what Selenium has.

Mobile Browsers

One of the most surprising things to have come out of survey was the want to use mobile browsers more.

Of the 410 respondents 367 want to test on mobile. Interestingly, this goes well past just Chrome for Android and Safari for iOS.

Below is a list of browsers and percentage of users wanting to use it. Questions were designed for Android unless it said iOS. See note at the end of the section.

  • Firefox for Android: 38%

  • Chrome: 91%*

  • Microsoft Edge: 14%

  • Samsung Internet: 16.6%

  • Safari on iOS: 69%

*Note that the questionaire only mentioned Chrome so it could be a conflation between platforms here. 1 Person used the other field to add Chrome for iOS.

Language support

Language support is what one would suspect with most users using Java or python.

  • java: 67%

  • python: 31%

  • ruby: 6.1%

  • .NET: 17.6%

  • JavaScript: 21.4%

  • PHP: 1.5%

Improvements

After reviewing the “What one thing would you improve about Selenium I was able to narrow most of the responses down to similar types.

Below is a breakdown of the issues that people would like to see improved.

Breakdown of answers of areas needing improvement. Main 3 areas are flakiness, documentation, Browser Management, Shadow DOM

Happiness

Of the 410 respondents, 219 had something nice to say about Selenium and were thankful for the product being around.

Some of the main reasons are simplicity of APIs, good backwards compatibility, and it being open source

Blog Posts - 2020

New Tricks in Selenium 4

Today, we’ll cover some details about the new tricks and capabilities that Selenium 4 offers.

In the third post in his series, Simon Stewart continues talking about what’s coming in Selenium 4 and reviews some of the tricks in the new release.

In my last posts, we talked about how to contribute to Selenium, and why we’re bumping the version number to 4. That’s enough preamble! Today, we’ll cover some details about the new tricks and capabilities that Selenium 4 offers.

Finding Elements, and Relative Locators

You know, finding elements on a page can be really difficult. I’ve seen loads of people using very complicated XPATH expressions, and trying to figure out complex CSS selectors and things like that. There have been whole talks about the subject at SeleniumConf. Surely there must be a better way to do this?

Think about how we describe where an element is on the page. Think about how you’d do this over the phone. You’d never talk about the raw DOM, “Ah, find the fifth DIV element nested inside the SPAN with an ‘id’ of ‘foo’”. You’d just never say that! Instead, you’d say something like, “just find that thing above that image, and to the right of that link,” when talking about where things are located on the page.

A long time ago, a project called Sahi started to locate elements like this. Sahi had Relation APIs, which are a lovely way of finding elements, and it was very, very fluent and pleasant to use. When I was starting WebDriver years ago, I was talking with Narayan (creator of Sahi) and I promised him that I was going to hold off implementing this flagship feature of Sahi. It was something that was lovely, but it was also something Sahi was rightly proud of. However, there are now other tools, such as Tyco, that are implementing this style of API, so it seems like the time is right to do the same in Selenium. In Selenium 4 we call them “relative locators.” You may sometimes see us refer to them as “friendly locators,” since the initial implementation called them that, but “relative” better describes how they work. We have a handful of them: near, above, below, left of, right of. They allow you to talk in human language about where an element is on a page.

Looking at the future, we are also planning to enable users to add new types of locators, not only on the, on the client side, but also to the Selenium Server. For example, although JS UI frameworks come and go (anyone else remember using jquery?), it’d be nice to be able to add a custom locator for the current tools people like, such as React.

Authenticating to Web Sites

One feature that people have been asking for since we started the project has been the ability to authenticate to a web site. Previously, you could do this by crafting the URL the browser went to properly, but this leaks credentials to any man-in-the-middle and leaves them in server logs, so browsers have slowly removed this piece of functionality. That’s unfortunate, since it’s something that we know people frequently need to do in their tests. In Selenium 4, we now offer a mechanism to register a username and password that can be used to authenticate against these sites.

Intercepting Network Traffic

A common complaint of Selenium tests is that they’re slow and flaky. While the bindings to the browser are excellent, and fully described by the W3C WebDriver spec, it is true that any end-to-end test is likely to suffer more flakiness than a simple unit test—there are just more moving parts, and more possibilities for things to go wrong.

One way to resolve this issue is to stub out the backend of the application, intercepting network traffic in the test and returning pre-canned responses. Tools such as mountebank make this easy for API testing. Wouldn’t it be nice if there was a similar tool for Selenium?

With Selenium 4, we now provide a mechanism to do this, using the NetworkInterceptor (well, that’s what we call it in the Java bindings). Pass it your WebDriver instance, and it’ll be called every time the browser is about to make an HTTP request, allowing you to return almost anything you want

The Chrome Debugging Protocol

As I mentioned previously, one of the nice things about Selenium 4 is our work to ensure a stable and modern user-facing API. What does this mean? To start, we need to acknowledge that after a long time there’s now competition back in the browser automation space. Notably in the form of Puppeteer and Cypress, and taking a step back, what do they offer? They build upon the Chrome DevTools Protocol (CDP)>, which is a protocol developed to enable a debugger inside Chromium-based browsers.

Because of what it was designed to do, it is a chatty protocol, and not a user-facing API that allows you to introspect into the browser. Worse, introduce a network hop between the test and the browser, this chattiness leads to slower tests as the network latency increases. That is why tools such as Puppeteer want you to run on the local machine. That’s great for the speed of an individual test, but makes parallelisation harder, as you can’t use services such as Sauce Labs easily.

To complicate matters, because the CDP is designed as a debugging protocol, it can change with no notice between versions. That’s why Puppeteer and Cypress are tied to specific versions of browsers, and that causes a dilemma for you as a test author: how do you test on multiple versions of a browser? Updating the test API to get a different browser can lead to you no longer making valid API calls. Not doing so ties you to a potentially outdated version of a browser.

Despite this, using the CDP opens up a host of possibilities, and that’s why we’ve added support for it in Selenium 4. In fact, some of our new features are built on top of it (though we hide the details!)

But we’ve also gone further that just adding basic support. Selenium 4 can support multiple versions of the CDP at the same time, meaning you can test with both the current and beta versions of Chromium-based browsers without needing to rewrite tests. We do this by providing an “idealised CDP”, which is stable and covers the features we feel tests need. If that idealised view of the world isn’t enough for you, we also expose the raw CDP APIs too, giving you flexibility to choose what’s best for your tests.

We’re feeding this experience into the new W3C WebDriver Bidi specification, which is helping make that a better fit for testers.

I am leaving out of this post all the details related to another important trick in Selenium 4, the new Selenium Grid, which I will cover in the next post. Stay tuned!

This was originally posted at https://saucelabs.com/blog/new-tricks-in-selenium-4

Public Project Meeting - December 03, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on December 03, 2020,5:30 PM CET.

Meetings are held on the #selenium-tlc channel on Selenium Slack.


Diego Molina 5:32 PM

So, things from the previous meeting

General project statistics

  • Previous meeting: 280 open issues, 62 open PRs
  • Current: 278, 60 PRs

Diego Molina 5:35 PM

here are the topics that we initially cover today:

Overall announcements? New people on committees, with the commit bit, etc?

Anything new to report from the last PLC/SFC call?

Pending work that needs to be done for the first Beta?

are we all around to start?

Simon Stewart 5:38 PM

@titusfortner @jimevans @p0deje @barancev @AutomatedTester @harsha509

David Burns 5:39 PM

I’m here

Diego Molina 5:41 PM

The first topic is: Overall announcements? New people on committees, with the commit bit, etc? I believe there is not much about this, right?

Simon Stewart 5:41 PM

Nothing from me

David Burns 5:42 PM

nope

Diego Molina 5:43 PM

Maybe, just for awareness of the meeting minutes, for the ones who read them we are doing a survey that will help with the future of Selenium https://twitter.com/SeleniumHQ/status/1333830343368077319

David Burns 5:44 PM

We’ve had nearly 400 respondents

Diego Molina 5:44 PM

and Boni García replied to it with https://www.mdpi.com/2079-9292/9/7/1067 I have not read it yet

David Burns 5:44 PM

if you haven’t retweeted the survey, could you do that please?

Simon Stewart 5:44 PM

I hadn’t seen the reply

Diego Molina 5:46 PM

Boni is the creator of WebDriverManager and a JUnit 5 extension for Selenium I think he is a professor at a university in Madrid

Simon Stewart 5:47 PM

I’m glad WebDriverManager exists

Diego Molina 5:47 PM

Alright, maybe we should have a read at that document and report our findings :slightly_smiling_face:

So, probably we can move to the next topic: Anything new to report from the last PLC/SFC call?

I think there was one call a couple of days ago

David Burns 5:50 PM

Main question: did someone follow up on my CoC request?

I did email again

and mentioned it to @mmerrell

Simon Stewart 5:51 PM

Monday is my next Selenium day. If no-one has responded by then, I’ll chase

Diego Molina 5:52 PM

ok, probably we can move to the next topic and circle back to this one if someone has more information

Pending work that needs to be done for the first Beta?

This is what we wrote/discussed in the previous meeting:

Client facing changes:

  • Make relative locators return elements sorted by proximity
  • Fix Java Module System problems
  • Allow locator strategies to be pluggable
  • Enable fallbacks for commands

Server changes:

  • Enable retries of commands where necessary using failsafe
  • Get the Grid UI looking nice, and returning useful data
  • Allow locator strategies to be pluggable
  • Pipe VNC connectors through the websocket plumbing for live video

I have on me the task to map this list into GitHub issues in case they do not exist (I have not done it yet)

Simon Stewart 5:54 PM

I’ve made relative locators return elements sorted by proximity

Diego Molina 5:54 PM

is there something else to add? do we have an status update on any item?

Simon Stewart 5:55 PM

My plan on Monday is to look at pluggable locator strategies

Which will require fallbacks for commands

David Burns 5:55 PM

I’ve been working with the Mozilla folk to add bidi support for Firefox, there are bugs on their side that they are working on

Marcus Merrell 5:55 PM

I’m sorry, @AutomatedTester , I never received an email about it. I don’t know if there’s a list I’m not on, or if my address is wrong, or if it went to spam, but I don’t have it

I’ll be glad to follow up if I can get the info

David Burns 5:56 PM

@mmerrell I emailed selenium@sfc

Marcus Merrell 5:56 PM

Right… guess I need to verify that I’m on that

Simon Stewart 5:58 PM

You should be.

Diego Molina 5:59 PM

Which will require fallbacks for commands I am sorry I never found the time to check your branch and work on it

Marcus Merrell 5:59 PM

I haven’t seen any of the sponsor emails either… starting to think there’s a problem

Diego Molina 6:02 PM

ok, so I believe we don’t have any more comments for this?

Simon Stewart 6:02 PM

Not from me

(Looks like a short meeting today, he says. Jinxing it)

Alexei Barantsev 6:04 PM

as for the beta1, I’m going to add commands getAriaRole and getAccessibilityName and I call java api complete

Diego Molina 6:05 PM

perhaps the last thing to mention is that I have pending to fill out the table about who has access to the distribution engines (npmi, sonartype, etc…) so the idea is that I will make sure we all have access to all of them

Simon Stewart 6:05 PM

Speaking of which, we really do need to push a JS release

Anyone want to volunteer for that?

David Burns 6:05 PM

If it’s not done this evening I will do it

about to take youngest to ballet so will be out for a few hours

Alexei Barantsev 6:06 PM

I’ve enabled GitHub integration in sonarcube, so it should sync org members and provide access

Simon Stewart 6:07 PM

That’s nice

Thank you

Diego Molina 6:09 PM

well, so I think that’s it for this meeting, right?

Simon Stewart 6:10 PM

I think so

Diego Molina 6:11 PM

ok, then, thank you all!

Titus Fortner 6:49 PM

Sorry to miss; I was giving training. Also, I miss getting to travel for these; Zoom is just not the same…

Titus Fortner 7:02 PM

I haven’t looked, has the print pdf endpoint been added to all the bindings? I haven’t looked in past 2 weeks, but Ruby & .NET needs to implement FF Full Page screenshot, Java (.NET?) need to be able to tell Firefox to take a full Page Screenshot when using RemoteWebDriver Java & Ruby need to re-fix the STP browser name

Ruby stuff was on my to-do list, until my paid work job gave me a daunting task with a short timeline

Jim Evans 7:04 PM

.NET hasn’t added print-to-pdf yet.

nor full-page screenshot.

Titus Fortner 7:06 PM

on that note @barancev I couldn’t duplicate the Ruby Remote Firefox bug on Mac, and VirtualBox appears to be a disaster running on Mac because I can’t even get it to play nicely with a Linux install to test it there. NET read timeout is often a random network problem, but it looks like we’ve been seeing the error consistently, so I’m concerned about it being a real problem. @p0deje do you have a linux machine available to see if we can replicate locally?

Alex Rodionov 9:35 PM

@titusfortner Not really and frankly I don’t have spare time to set it up to investigate

Speaking of which, I’ll be leaving for a 1 month road trip next week and I won’t be able to do any Selenium work during that time. Likely till early February in fact. If there is anything I can do before that, please let me know.

Titus Fortner 9:39 PM

@p0deje when do you leave?

Alex Rodionov 9:40 PM

Next Wednesday

Titus Fortner 9:45 PM

oof, well I’ve been assigned to create and give 20+ hours of classroom training on Selenium for a client between now and EOY, and I have maybe half of that right now :) I should be more available in January to help, but I’ve spent more time with the Selenium java code than Ruby code recently, so I’m not sure how we have the DevTools stuff implemented. @twalpole what’s your availability this month? :-D

David Burns 9:49 PM do we have people to do releases for ruby with @p0deje away?

Alex Rodionov 9:50 PM

According to https://github.com/SeleniumHQ/selenium/issues/8168, a currently missing CDP stuff in Ruby is: Intercept network requests allowing to mock backend requests Bootstrap script Record traffic The first two I believe are implemented in Java so it should not be hard to redo it in Ruby. I might give it a shot this weekend. The latter I think is missing in all bindings. @titusfortner we can hop on pairing session and I’ll guide you through the code. Otherwise, it all lives in devtools directory

@AutomatedTester Yes, Titus can do releases

David Burns 9:52 PM

don’t forget that @rajendra can help, BS is a ruby shop so we can help

he’s been looking through the code for the devtools stuff and is working the print stuff

Titus Fortner 10:02 PM

I’ll have bandwidth to do a release, but not to dig through the implementations until January :)

Public Project Meeting - November 19, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on November 19, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on December 03, 2020,5:30 PM CET.


Simon Stewart 9:53 PM

@diemol are you running today’s status update?

Diego Molina 9:55 PM

I can do that I always forget because the event has no notifications

let me look for the agenda Some numbers before starting: Previous meeting: 281 open issues, 61 open PRs Current: 280, 62 PRs

Simon Stewart 9:58 PM

I’ve added a 30 minute reminder to the meeting in Google Calendar

Diego Molina 10:00 PM

From previous agendas, I believe these could be the topics:

  • Overall announcements? New people on committees, with the commit bit, etc?
  • Anything new to report from the last PLC/SFC call?
  • Pending work that needs to be done for the first Beta?
  • Users/passwords, access keys, etc… to distribution and release repositories.
  • CoC, next steps?

10:00

Feel free to add topics

10:01

Should we start? pinging @AutomatedTester @titusfortner @harsha509 @jimevans @manoj9788 @mmerrell @barancev @p0deje

Sri Harsha 10:04 PM

m in

Simon Stewart 10:04 PM

Here!

Diego Molina 10:05 PM

First topic: Overall announcements? New people on committees, with the commit bit, etc?

David Burns 10:05 PM

here

Simon Stewart 10:06 PM

We really need to agree an emoji for “I’ve nothing to say”

:shushing_face: maybe?

David Burns 10:06 PM :speak_no_evil:

Diego Molina 10:06 PM

:speak_no_evil:

Simon Stewart 10:06 PM

I like that We shipped 4a7 Nice work, everyone

Diego Molina 10:08 PM

ok, let’s move to the next topic :slightly_smiling_face:

2nd topic: Anything new to report from the last PLC/SFC call?

Simon Stewart 10:09 PM

I missed it

David Burns 10:10 PM

There were notes from @jimevans re: a meeting at the end of October, was that the last SFC?

https://seleniumhq.slack.com/archives/C013TSZD4P5/p1604415853013000

Diego Molina 10:12 PM

right, I remember that, probably that covers the topic then, next one :slightly_smiling_face: 3rd topic: Pending work that needs to be done for the first Beta?

Simon Stewart 10:13 PM

There’s a lot. Mostly in Java I think we should all get together at some point and figure out how closely our CDP-based functionality aligns I think it’s pretty close, but I know that there are few things that @jimevans did that I’d like “take inspiration” from

David Burns 10:14 PM

Can we get things documented since you can be a bottle neck due to life. How can we, being my team, help here?

Simon Stewart 10:14 PM

  • lient facing changes:
  • Make relative locators return elements sorted by proximity
  • Fix Java Module System problems
  • Allow locator strategies to be pluggable
  • Enable fallbacks for commands

10:16

Server changes:

  • Enable retries of commands where necessary using failsafe
  • Get the Grid UI looking nice, and returning useful data
  • Allow locator strategies to be pluggable
  • Pipe VNC connectors through the websocket plumbing for live video

@AutomatedTester ^^ I documented them :stuck_out_tongue: CDP for Firefox would be handy too

David Burns 10:17 PM I am going to start CDP for Firefox tomorrow

Simon Stewart 10:17 PM

Are there docs on how to find the ws address to use?

David Burns 10:17 PM

No… I will document it

Diego Molina 10:17 PM

we really need some sort of docs to have a decent feature parity across bindings

Titus Fortner 10:17 PM

does all the CDP stuff work for Edge as well right now? I haven’t tried anything but Chrome so far

David Burns 10:18 PM

I have a “try” build of geckodriver with it that I need to play with

Simon Stewart 10:18 PM

The Java stuff works for edge too

Titus Fortner 10:18 PM

I was doing a brief analysis of some things for a talk I was giving, and we implemented features in Selenium 3 at very different versions between the bindings. Kind of surprised me :)

Simon Stewart 10:18 PM

Heh. Jari was fast :slightly_smiling_face:

David Burns 10:19 PM

misses Jari

Diego Molina 10:20 PM

do we have GitHub issues for the items missing for beta?

Jim Evans 10:20 PM

those notes were from the 3 november call, which was the last PLC call (they only happen monthly)

Simon Stewart 10:20 PM

Most of those things are in the project plan, @diemol

Jim Evans 10:21 PM

so there’s a bug in .NET alpha7 that prevents the bindings from working with grid 4. (it’s fixed now)

Titus Fortner 10:21 PM

I mentioned recently that Java & Ruby don’t have the right STP name still in 4 alpha and .NET & Ruby both need to add support for full page screenshots in Firefox. Not sure what list that needs to get added to? (I’ll try to get to the Ruby stuff this weekend)

Jim Evans 10:22 PM

print-to-pdf end point?

Simon Stewart 10:22 PM

@jimevans I think the check in the java bindings may be a little too extreme, so we may need to loosen things there too @titusfortner good point. The STP thing is irksome. I need to dig into it

Jim Evans 10:23 PM

sorry i’m late to the party, btw. was spending a few minutes with P this morning before her first client.

Titus Fortner 10:23 PM

I tried to fix it in Java, but I was missing pieces. Someone who knows what they are doing, should be easy

Simon Stewart 10:23 PM

It’s not easy If it was, I’d have fixed it already :slightly_smiling_face: Or @barancev would have

Titus Fortner 10:23 PM

STP went from “Safari” to “Safari Technology Preview” back to “Safari” I changed Ruby to the longer version when I thought I was using the latest STP (I was not)

Simon Stewart 10:24 PM

I think I need to tease apart the two versions of the browser more

Titus Fortner 10:24 PM

I think we just need to support the latest version

Simon Stewart 10:24 PM

I’ll have a chat with folks here to figure out the Right Thing to do

Jim Evans 10:24 PM

i want .NET to undergo a radical refactor in its class structure before 4.0 releases. now that we have a web standard, the current class hierarchy is wrong.

Simon Stewart 10:24 PM

Yeah, just the latest version

Jim Evans 10:24 PM

well, not really “radical,” but definitely a change

Simon Stewart 10:25 PM

@jimevans we really need to find a way to get someone helping you with the .net stuff

Jim Evans 10:25 PM

nothing breaking, API-wise. with .NET 5 being out, it should be a fair sight easier.

Diego Molina 10:27 PM

We can spread the word about the help we need in the different bindings, either for refactoring or reaching feature parity if we have those changes described somewhere, ideally a GitHub issue. Then we could tweet or something, saying we need help with this issue.

David Burns 10:28 PM

Well… I have an idea I would like to share towards this but I can do that at another time unless now is a good time

Simon Stewart 10:28 PM

The Java module stuff is obvious if you use java modules

Jim Evans 10:28 PM

so, right now, the .NET class hierarchy is RemoteWebDriver (implements IWebDriver et al) -> all browser-specific drivers. what it should be is abstract class WebDriver (implements IWebDriver) -> RemoteWebDriver, and also abstract WebDriver -> browser specific drivers. if i’m clever about it, this will not be a breaking API change, because IWebDriver is still A Thing™.

Simon Stewart 10:28 PM

Just like the java 8 issue was

Diego Molina 10:29 PM

Please share, @AutomatedTester

Jim Evans 10:30 PM

my ${paidWork} project is approaching a bit of stability, so i should be able to devote some time between now and the end of the year, hopefully.

Jim Evans 10:30 PM

my ${paidWork} project is approaching a bit of stability, so i should be able to devote some time between now and the end of the year, hopefully.

David Burns 10:31 PM I would like to, with support of this group, see about creating a Yak Day. The idea is, and it requires a bit of upfront work, to get issues in place for this and then see if we can get contributors

Jim Evans 10:31 PM

the idea in Selenium 5 is to start phasing out the use of IWebDriver in favor of using the abstract base class.

David Burns 10:32 PM

it would also require that I, or others, do a “How to contribute” video to share before hand

Jim Evans 10:32 PM

(sorry for the parallel idea-spewing into the channel, but i’ve been thinking about this, and not really talked about it to anyone outside the multiple voices in my own head.)

David Burns 10:32 PM

and if we split it accordingly to language bindings and services we can see if we can try build out a bit more support for each langauge and may get us more contributors.

Simon Stewart 10:33 PM

There’ll be hoops I need to jump through, but I can jump through them to make that happen

David Burns 10:33 PM

I appreciate it can flood us with junk and we would need to work out to how to prevent that

Simon Stewart 10:33 PM

I’ve got some half-written docs for building with bazel for selenium.dev too

David Burns 10:33 PM

but the general gist is create tiny bits of work to build up contributors

Titus Fortner 10:34 PM

So, I don’t know what everything that is on the lists mentioned above entails, but I do want to put in a generic plug that we make sure things absolutely need to be in 4.0. If we can release something “good enough” to iterate on through 4.x releases, it’s going to be *much better than a super polished codebase that isn’t released for another 6 months.

Diego Molina 10:34 PM

that would be really great

David Burns 10:35 PM

I agree @titusfortner, while we are in alpha we have a limited usage group but we have finite resources so its a fine line to tread

Titus Fortner 10:36 PM

nope, totally understand; we’re all volunteers and such. just requesting we keep in mind that perfect is the enemy of releasing something that makes current users lives better

Simon Stewart 10:36 PM

After 4.0 ships, I’m going to be stepping away I’ll probably stay involved with WebDriver Bidi, but I won’t be cutting code

Diego Molina 10:37 PM

no no, you cannot leave us alone with bazel :smile:

Titus Fortner 10:37 PM

Yeah, I get that this is a factor for sure :)

David Burns 10:37 PM

Bazel isn’t that scary

Titus Fortner 10:38 PM

isn’t the point of bazel that we shouldn’t have much issue with it once everything transitions? :-D

Simon Stewart 10:38 PM

I’ll still be hacking on bazel

David Burns 10:38 PM

I’ve been contributing to that community recently… going to overtake @simonstewart knowledge soon :smile:

Simon Stewart 10:38 PM

One can only hope

Jim Evans 10:39 PM

bazel is fine… as long as your language and toolset’s opinions don’t conflict with bazel’s

David Burns 10:39 PM

@jimevans I’m finding that works with all languages… but that’s an aside

Simon Stewart 10:39 PM

@jimevans I want to see better .net support in bazel What I need is a) time, b) a Windows machine

Jim Evans 10:40 PM

well some languages’ tooling are more opinionated than others. (see: MSFT is all in on MSBuild, and any other build tool will always, always, always be a second-class citizen.)

Diego Molina 10:40 PM

Can the project buy you one?

Jim Evans 10:41 PM

@simonstewart i’ve had remarkably good luck using VMs and VMWare Fusion.

Simon Stewart 10:41 PM

My hard drive is currently stuffed with multiple versions of macOS.

Jim Evans 10:41 PM

like, that’s been my exclusive .NET dev environment for going on 8 years now.

Simon Stewart 10:42 PM

Once I get more storage, I can try a VM again

Diego Molina 10:42 PM

but ok, to the topic, which was Pending work that needs to be done for the first Beta? I believe we have commented the most of it

10:43

I will go through the meeting minutes and then create GitHub issues if I don’t find any for the items mentioned

Simon Stewart 10:43 PM

For me, “beta 1” means “this is what you’ll get in 4.0, but there are known issues”

Jim Evans 10:43 PM

.NET needs to add the “make CDP user scenarios easy” methods to be added.

Diego Molina 10:43 PM

and I will ping you to add details about it

Jim Evans 10:44 PM

yikes that’s atrocious grammar. but you get my meaning.

Diego Molina 10:44 PM

should we move to the last two topics? we have 16 minutes left

David Burns 10:44 PM

go for it :slightly_smiling_face:

Diego Molina 10:44 PM

4th topic: Users/passwords, access keys, etc… to distribution and release repositories. So, recently @AutomatedTester & me got access to the project to release Java, but in general, if we ever need to do a release and the key folks are missing we do not have access to this information

Jim Evans 10:45 PM anyone who wants access to the nuget repo, create a nuget.org account (requires a “microsoft account”), and let me know. i’ll add you to the organization for selenium.

Titus Fortner 10:46 PM

who owns email access to selenium.dev? I think we should get a project email/password for these things instead of each using our own?

Sri Harsha 10:46 PM

i got access to npm selenium-webdriver package

Diego Molina 10:46 PM

for example, we were able to get access to the npm org recently, so @harsha509 could do a JS release

David Burns 10:46 PM

and we got access for NPM :wink:

Diego Molina 10:46 PM

I thought we could be more proactive in this and not wait until we need the person to share the access.

Titus Fortner 10:47 PM

I mean, if people sign up for rubygems and send me their email, I can add them to the list of authorized users; but might scale better if there were a lastpass/onepass/whateverpass that stores universal credentials…

David Burns 10:47 PM

The only place I can think of is nuget python has a few people but we can add more. The other place is Google Storage, do we have enough people with access there?

Simon Stewart 10:49 PM

I’ve got Google Storage. @jimevans does too. I think Luke may still have the keys.

Diego Molina 10:51 PM

I believe it is a matter of someone doing the work and going one by one to give access to the TLC to all what we need. I can find some time to do that

10:52

ok, then the last topic 10:52 CoC, next steps?

David Burns 10:53 PM

CoC is waiting on SFC/PLC to reply to my message I should follow up I have found a contractor, ex-head of D&I from Mozilla, to help do the work

lukeis:indeed: 10:55 PM

yeah, i still have the google storage keys… tucked away in an archive i put in my personal google drive :grimacing:

Simon Stewart 10:55 PM

I’ve put together a quick Google Doc for folks to add their names to for access to release pathways.

David Burns 10:56 PM

thanks @simonstewart!

lukeis:indeed: 10:57 PM

we got rid of the google app-engine driving seleniumhq.org right?

Simon Stewart 10:58 PM

I can’t remember where we deploy selenium.dev to It may still be app engine

David Burns 10:58 PM

selenium.dev is on github pages

Diego Molina 10:58 PM

We use GitHub Pages

David Burns 10:58 PM

via Hugo

Simon Stewart 10:59 PM

https://github.com/SeleniumHQ/seleniumhq.github.io/blob/dev/.github/workflows/deploy.yml#L26 .github/workflows/deploy.yml:26 uses: peaceiris/actions-gh-pages@v3 https://github.com/SeleniumHQ/seleniumhq.github.io|SeleniumHQ/seleniumhq.github.ioSeleniumHQ/seleniumhq.github.io | Added by GitHub

lukeis:indeed: 11:00 PM

yeah, the sehq app engine still exists… and the dashboard seems like it’s still getting some kind of requests (very few) wonder if it’s still handling some redirects

Diego Molina 11:02 PM

it should be mostly redirects I need to leave, but thank you all for joining!

Titus Fortner 11:02 PM

Thanks @diemol!

What’s Coming in Selenium 4: Why The Major Version Bump?

Let’s start talking about Selenium 4 and what’s coming. One thing I think I should clear up is “why the major version number bump?”

In the second post in this series, Simon Stewart continues talking about what’s coming in Selenium 4 and why this release has a major version bump.

In my last post, I shared a bit about how the Selenium project works overall. Now, let’s start talking about Selenium 4 and what’s coming. One thing I think I should clear up is “why the major version number bump?”

Sometimes I joke that the major reason for the version number bump is that while the digits of Pi are infinite, when we went from 3.14 to 3.141, people got a little bit upset. Moving to 3.141.5 and then 3.141.59 was as far as we wanted to push that particular idea :)

More seriously, the first reason is that we have a revised Selenium IDE. Years ago, this used to be Firefox only because it used the XPI extension mechanism (which was specific to Firefox). It’s now a web component, and you can download it for Chrome, Firefox, and anything else that supports Web Components. There is currently work to rewrite it as an Electron app, which will allow us to make better use of the native OS the IDE is running on. That work was largely pushed forward by developers working at Applitools. They started from a base of the original Selenium IDE that had been migrated to use Web Components by a company called SideX. It’s been a fantastic example of the community working together well.

Secondly, we have fully adopted the W3C WebDriver protocol, and have dropped support for the original home-grown wire protocol. The way that Selenium communicates with a web browser is via a wire protocol that’s effectively just JSON over HTTP. Originally this grew organically as we figured things out, and we tried to make browsers do what we needed them to. That original protocol is known as the JSON wire protocol because it spoke JSON over the wire (and we’re not great at coming up with very original names).

That original protocol was the base for the W3C WebDriver protocol, which smoothed some of the rough edges, and brought some much needed consistency to the protocol. The two major areas the standardised protocol improved on included session creation, where we removed considerable ambiguity, and by providing a far richer API for specifying user actions.

So what does this adoption of the W3C protocol mean for you? I’ll be honest: it probably doesn’t mean much to you at all. If you’re using a modern browser (released over the past couple of years), you will find that actually you already speak the W3C protocol with Selenium 3.

So who does care about the protocol dialects? When we talk about companies like Sauce Labs who provide Selenium as a service—they care about it. The ecosystem is ready for this next step, because the technical folks at these companies have ensured that they understand and comply with the W3C protocol, and folks from the Selenium project have been there offering help and advice as needed.

One of the other nice things about Selenium 4 is that we’ve done our best to ensure a stable user-facing API. That means when you upgrade your project from Selenium 3 to Selenium 4, it should be a drop-in upgrade. You just change the version number, recompile and you should be done.

There are a few caveats that you should be aware of, however! The major one is that if in the last version of Selenium 3 a method was deprecated, it’s now probably gone. We’ve taken the opportunity of a major version bump to delete them and clean up the behind-the-scenes internals people don’t normally get to see. If you’re a software developer, you may recognise this as us paying off some of our technical debt :)

Stay tuned for the next post, where I’ll go over some new tricks in Selenium 4.

This was originally posted at https://saucelabs.com/blog/whats-coming-in-selenium-4-why-the-major-version-bump

What’s Coming in Selenium 4: How Can I Contribute?

As the lead of the Selenium project, I wanted to kick off a new blog series leading up to the release of Selenium 4.

In this new blog series all about the upcoming release of Selenium 4, Simon Stewart will cover how the Selenium project works, who is involved, how you can get involved, and a sneak peek at what’s new in Selenium 4.

As the lead of the Selenium project, I wanted to kick off a new blog series leading up to the release of Selenium 4. During this series, I’ll talk all about how the Selenium project works, who is involved, how you—yes, you!—can get involved, and we’ll get a sneak peek at what’s new in Selenium 4. I’ve been speaking about this off and on for a while, but now the 4.0 release is looming I wanted to start sharing in more depth.

In this first post, we’ll start off with a brief discussion about how the Selenium project itself runs and who does what, because that’s a really helpful piece to understand how and why things happen the way they do on the project. In future posts, we’ll look at the new IDE, and then we’ll talk about Selenium 4 in more depth, including the fact that it should be a drop-in replacement for you. I’ll also review some new features that we’ve added to Selenium 4, and talk a bit about the modernized Selenium Grid. So let’s get started!

About the Selenium Project

Selenium is an Open Source project. It’s run under the aegis of the Software Freedom Conservancy (SFC). The SFC is a group dedicated to pushing forward Free and Open Source software. Besides Selenium, they have a handful of projects you may have heard of, including Samba, Mercurial and Git. The SFC allows us to focus on writing code and fixing bugs by handling all the legal and financial stuff we’re not good at. They’re the ones that help us negotiate contracts for when we want to run SeleniumConf, for example.

Acting as a bridge between the project and the SFC is the Project Leadership Committee (PLC). Currently, it’s made up of Jim Evans, Alexei Barantsev, Marcus Merrell, Manoj Kumar, and myself. What do we do? Effectively, the PLC is about providing a smaller group of people for the SFC to talk to when decisions need to be made about funding a conference, or how best to respond to sponsorship agreements. Because we like to do as much work in the open as possible, you can find us on the #selenium-plc Slack channel, and almost every conversation and topic is discussed here.

One of the key qualifications for being on the PLC is a demonstrated commitment to helping the Selenium project improve and succeed, and we recognise that the project is more than just “code.” It’s a community, and the make up of the PLC reflects that.

The Technical Leadership Committee (TLC) includes the people who set the technical direction for the project. If you come over to the Selenium Slack, you can find the #selenium-tlc channel, which is where a lot of the technical conversations happen for the project. The TLC includes Jim Evans, Alexei Barantsev, David Burns, Diego Molina, Titus Fortner, and me.

How do you get on the TLC? Although the project governance document goes into more detail, it can be summed up as simply as someone who’s demonstrated technical leadership on the project, over an extended period of time. Just as with the PLC, being on the TLC doesn’t give someone more authority, but they’re the ones who can merge PRs, and who can (if need be) commit directly to the tree.

Again, the TLC tries to do as much work as possible in the open. If you’re ever interested in watching the design discussions, or asking why a bit of the Selenium code base is structured the way it is, then come and join us in the #selenium-tlc Slack channel. There’s normally someone from the project there who’ll be able to answer your questions!

I wanted to share how the project works for one simple reason: to highlight one of the really important things with Open Source, which is that anyone can contribute! You don’t need to be throwing code around in order to be contributing, and you don’t need to be special in order to contribute your time and effort.

So obviously there’s the people running the projects and writing code, but we couldn’t do that all on our own. Every release includes contributions from a variety of people, not just the core development team. Also, we’re always happy to accept patches. If you’re not quite sure where to start, I recommend you head to our GitHub page and take a look at the project tab. That’s where you can see the things that need to be done and what we’re working on.

The other way to get involved is the way that everyone used to get involved with Open Source, which is by what’s known as “scratching your own itch”. It’s if there’s something about the project, something about the product you think could be a little bit better, download the source, edit it, and then send us a PR.

We encourage you to get involved and contribute! On the Selenium website, there is a page that outlines in detail the steps to join the Selenium team. Join the Selenium Slack channel to interact with us and ask questions. If you want to discuss something, or if you don’t understand why the code is written the way it is, feel free to come on to that Slack channel and talk to us. Also, if you’d like to see how the decision making is made, then please do feel free to come on to the #selenium-tlc or the #selenium-plc channels to see those groups. Because we’re Open Source, we try and do everything in the open.

If you’d like to put faces to people’s Slack or IRC handles, then please note that there’s a regular team meeting every other Thursday on Google Meet at 4:30pm (UK time!) We tend to just chat and discuss everything from the project to the weather, but that’s a great way to get to know people a little better! :)

Finally, if you’re having trouble getting to grips with the Selenium code base, then please do come and ask us for help. We’ve done our best to make the on-ramp as easy to take as possible, but the project can seem complicated and daunting when you’re getting started. We’re here to help!

I hope you enjoyed this intro to the Selenium project. Next week, we’ll talk about why the major version bump to Selenium 4. Stay tuned!

This was originally posted at https://saucelabs.com/blog/whats-coming-in-selenium-4-how-can-i-contribute

Browser Testing and Tools WG Meeting @ TPAC 2020

Browser Testing and Tools WG Meeting @ TPAC 2020

It’s that time of the year where working groups from the W3C meet up to discuss the various standards that are being worked on.

Within the Browser Testing and Tools Working Group, there are 2 different standards.

We have:

The first is what is commonly supported by the Selenium Project and has support from Apple, Mozilla, Microsoft, and Google in their browsers. It is also supported by various Selenium in the cloud providers like Sauce Labs and BrowserStack.

As the world has moved on we have felt the need to add new APIs and move Selenium to be more event-driven. This is where we are learning, and collaborating, with projects like Puppeteer to make sure that we can improve the Browser Automation space. This is where the WebDriver-Bidi Specification comes in. It has broad support from the browser vendors so you can use official browsers and not be limited by the JavaScript sandbox. Some of the newer frameworks can’t guarantee that.

If you’re curious about we discussed this week, feel free to read it up on the W3 Wiki.

This post was originally shared on David Burns’ Blog

Public Project Meeting - October 08, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on October 08, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on October 22, 2020,5:30 PM CET.


Diego Molina 9:03 PM

Perhaps the main topics to discuss are these ones: Anything new to report from the last PLC/SFC call? Pending work that needs to be done for Alpha 7?

9:03

anything else that we need to talk about?

Simon Stewart 9:04 PM

Also paging @mmerrell and @manoj9788

9:05

Not much to share from the PLC call this week

9:05

Tentative thoughts about where we might be able to host SeConf next year, and puzzling out whether we can meet in person

Marcus Merrell 9:05 PM

here now

Simon Stewart 9:06 PM

@mmerrell can give more of an update

Marcus Merrell 9:06 PM

if I understand it correctly, we have ~$40,000 tied up with the Chicago venue, and it would be the path of least resistance to hold it there

9:08

we’ll start meeting around the first of November to start planning something there… I’d much rather hold it in the EU, but with the loss of White October, we’d need to a) find an organizing entity, and b) be prepared to pay ~double what we paid WOE, and only have a conference of half the size (i.e. we’d likely lose $$). We’ll need to decide whether or not it’d be worth it

Diego Molina 9:12 PM

if we plan ahead of time, and things are ok in terms of covid, it can happen in the EU, we have contacts here. We could ask orgs that have conferences like Agile Testing Days to give us a hand. Just throwing ideas here.

9:13

Or the folks at MoT

9:13

Next topic?

Simon Stewart 9:14 PM

Sure

9:14 Alpha 7 talk?

Diego Molina 9:14 PM

Yes

Simon Stewart 9:15 PM

@jimevans is working on the CDP stuff for .Net

9:15

I’m busy implementing some of the nice features we’ve wanted for a while (including things like script pinning)

9:15

I know that @AutomatedTester has mostly wrangled Python into shape with the CDP stuff

Diego Molina 9:15 PM

We have the PRs for the queue, which I reviewed but it’d be nice if you have a look again, Simon

9:16

(grid)

Simon Stewart 9:16 PM

But I don’t know if it supports multiple versions

9:16

I can have a look at them tomorrow

Diego Molina 9:16 PM

Specially 8754, not sure about using two concurrent arrays there

9:17

Aside from what you mentioned, and the PRs for the queue, I think we are good for Alpha 7

Simon Stewart 9:18 PM

Aye

Diego Molina 9:19 PM

sooo, I think we are done with the meeting?

Simon Stewart 9:27 PM

I think so

9:27

Unless there’s anything else people want to talk about ?

Diego Molina 9:36 PM

Doesn’t seem like that Thank you everyone!

SeleniumConf Virtual 2020 Recap

Quick recap of the recent Selenium Conference held virtually

This year the Selenium Conference was held virtually, and despite that, the conference was again that exciting place where the Selenium community meets every year to share and learn about the most popular browser automation tool in the world. The conference offered talks about improved testing practices, new tools to simplify the setup of automated tests, the future of Selenium, and lots of learnings from speakers who shared their use cases and practical advice for how they use Selenium at work.

Here are some takeaways and interesting talks from this year’s conference:

Selenium: State of the Union

A peek at the upcoming Selenium 4 release was possible thanks to the demo Simon Stewart gave during this traditional talk that happens in every Selenium conference. Selenium 4 is shaping up nicely and will leave the Alpha state soon. We are all looking forward to the betas, and a candidate release shortly after that. The talk also invited other members of the Selenium team to share the organizational work they have been doing in the project, including diversity, governance and welcoming contributors.

Build a responsive typescript wdio framework

Varuna Srivastava gave a talk together with Wim Selles that showed how to build a robust and scalable framework for UI testing, based on WebdriverIO. It showed concepts that are important when getting started with JavaScript, NodeJS, and the NPM ecosystem. Furthermore, there was a broad overview of WebdriverIO and its shiny features, as well as a demo on how to use TypeScript for testing. This is a recommended talk for anyone who wants to get started on testing with JavaScript.

To Test and monitor one website is not that hard, but what if you need to do it to over 40 websites?

This was an interesting talk from Jesus Sanchez, where in order to avoid having the QA department as a bottleneck for the growing team of developers, they took the approach of building tools and resources for developers and enabling them to write tests for their over 40 websites. It is an interesting take on how the QA role becomes a facilitator and an enabler for the rest of the organization, while coaching everyone on how to write automated tests and the value of testing the right thing.

Careers in Testing – Identify your SuperPower

Smita Mishra gave a captivating talk where she invited all testers to think what alternative paths could be present in their careers, given that some organizations value testing more than others. Smita showed that if you understand what you enjoy the most, and find a way to combine that with your current and future skills, it could show you how to grow your career by finding and following a path of the least resistance.

Developing Selenium tests with JUnit 5

JUnit 5 is the new iteration of this popular testing framework, and it implements a new programming and extension model named Jupiter. Boni García presents in this talk a JUnit 5 extension called Selenium-Jupiter, the demos showed illustrate how useful this extension is because it simplifies the test configuration and reduces the boilerplate code that needs to be written in order to have a test running. Have a look at it because it is well maintained and documented, and it will help you by reducing the time needed to set up your tests.

I’m Not Special

One of the keynotes in the conference was done by Jim Evans, where he relates a personal journey through his career and how clearly “not special” he considers himself. One of the key takeaways is the fact that you become a major contributor and you do not need to be special to do that. No review will make enough justice to highlight how heartwarming and encouraging this talk was, it is a must watch for anyone who wants to become a contributor.

Closing keynote

The final session of the conference was the keynote where the project committers do an open Q&A with the community. Different opinions were shared around the question of the challenges the Selenium project sees by the growing number of browser automation tools. In addition, all project contributors made an open invitation to the community to get involved in the project, if you are interested in that, please check the project’s governance document. This is another recommended session to watch, lots of insights about how the project and its individuals work that will help the community understand the project better.

This was originally posted at https://opensource.saucelabs.com/blog/selenium_conf_2020_recap/

Public Project Meeting - September 24, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on September 24, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on October 09, 2020, 4:30 PM CET.


Diego Molina 9:00 PM

So this is the proposed agenda, and @AutomatedTester has some more topics: General project statistics

  • Previous meeting: 334 open issues, 63 open PRs
  • Current: 281, 61 PRs Overall announcements? New people on committees, with the commit bit, etc?
  • Anything new to report from the last PLC/SFC call?
  • Pending work that needs to be done for Alpha 7?
  • Pending work that needs to be done for the first Beta?

David Burns 9:00 PM

I dont have more topic, I want to discuss some of those topics

Diego Molina 9:01 PM

I need to improve reading skill :slightly_smiling_face:

9:01 PM

OK, let’s start

Simon Stewart 9:01 PM

settles in

Diego Molina 9:02 PM

General project statistics Previous meeting: 334 open issues, 63 open PRs Current: 281, 61 PRs We are slowly cleaning the list of issues, more cleaning to come :slightly_smiling_face:

Simon Stewart 9:02 PM

Another 32 weeks, and we’ll be done (Well, PRs)

David Burns 9:03 PM

I think we should pat ourselves on the back. In February we had over 600 issues

Diego Molina 9:03 PM

Absolutely

9:04

Ok, next topic Overall announcements? New people on committees, with the commit bit, etc? I am not aware of any announcements…

Simon Stewart 9:04 PM

Not that I’m aware of

Diego Molina 9:04 PM

Ok, so probably the next topic won’t have any updates either Anything new to report from the last PLC/SFC call?

Simon Stewart 9:05 PM

Not from me

Diego Molina 9:06 PM

Perfect, so let’s jump to the next one Pending work that needs to be done for Alpha 7?

Jim Evans:black_medium_square: 9:06 PM .NET needs a fair bit of refactor for CDP i’m planning on taking all day tomorrow to look at that.

David Burns 9:07 PM

Oh that’s awesome

Simon Stewart 9:07 PM

The java code is in a releasable state, I think Though I broke a test in the distributor, so I may want to fix that before landing

Rajendra Kadam 9:07 PM

I am working on js cdp stuff

David Burns 9:07 PM

The python code for here is just me putting in the work to make the API not suck

Jim Evans:black_medium_square: 9:07 PM

once i get CDP generation redone for C#, i’ll be pretty happy with the state of the .NET code base.

Simon Stewart 9:07 PM

There’s the session queue PR that it’d be nice to land, but I don’t think it’s essential

David Burns 9:07 PM

@p0deje has the Ruby stuff done

Diego Molina 9:07 PM

I am reviewing @Puja Jagani’s PR about the session queue, it’d be nice to have it for the alpha

Simon Stewart 9:07 PM

@jimevans this is good news :slightly_smiling_face:

Jim Evans:black_medium_square: 9:08 PM

i do need to think about a “version independent API for CDP” for .NET

Titus Fortner 9:08 PM

Do we need cdp for alpha 7? There are a number of bug fixes from 6 to get out there

Simon Stewart 9:08 PM

I’d like us to have a fairly unified approach between (at least) java and .net for the unified CDP. Happy to make changes to the java tree to make that happen

David Burns 9:08 PM

The queueing stuff I think needs to be in the alpha so we can get it to nightly users

and then improve in the betas

Jim Evans:black_medium_square: 9:09 PM

@titusfortner i at least need to get that version-independent api done before alpha7. .NET skipped alpha6 altogether, because i suck.

Simon Stewart 9:09 PM

@titusfortner in the java tree, the new CDP stuff has allowed us to hook in a bunch of APIs. It’d be nice if those were in other languages too

David Burns 9:10 PM

but… feature wise after that we’re done right? I’m itching to get us out of alpha we’re not getting enough usage

Simon Stewart 9:10 PM

I think we’re basically there once it’s done How’s the UI looking?

Diego Molina 9:11 PM

Sounds like it, for Alpha 7, to summarise: CDP working across bindings Session queue in Grid

David Burns 9:11 PM

the UI is there, I think. We’ve fixed the main UI issues

Jim Evans:black_medium_square: 9:11 PM

i agree with that assessment. once CDP work for .NET is done, i’m considering it feature-complete for 4.x.

David Burns 9:11 PM

and that’s all in trunk

Diego Molina 9:13 PM

Great, I am not sure if there is anything else to add to the topic

Simon Stewart 9:13 PM

Other than a proposed date to release a7?

David Burns 9:13 PM

next week (no pressure everyone)

Jim Evans:black_medium_square: 9:14 PM

wednesday or after of next week. i’m sure i’m not going to get it all done in one day.

David Burns 9:14 PM

Thursday and Fridays are our normal release dates so that sounds good

Simon Stewart 9:14 PM

I’m going to make a decision to gate the release on @jimevans saying that .Net is ready to roll

Jim Evans:black_medium_square: 9:14 PM

to quote @AutomatedTester “no pressure” :slightly_smiling_face: we’re putting a stake in the ground saying a7 is our last alpha?

Simon Stewart 9:15 PM

With a hard stop-date of 2020-10-07 For java, yes And I think we have the most moving parts

Jim Evans:black_medium_square: 9:15 PM

(agreed as a7 being last alpha for .NET too)

Diego Molina 9:17 PM

Any comments from other bindings? @AutomatedTester @titusfortner @rajendra @harsha509?

David Burns 9:17 PM

I want us out of alpha so…

Simon Stewart 9:17 PM

@AutomatedTester we all want to be out of alpha

Rajendra Kadam 9:17 PM

working out for js, some tests issues, trying to fix those

Simon Stewart 9:17 PM

But we also don’t want to move “just because”

Sri Harsha 9:18 PM

JS is already in alpha 7, can we release JS npm with like alpha7-patch1 with CDP ?

Simon Stewart 9:18 PM

Bump JS to alpha8 Keep it simple :slightly_smiling_face:

Sri Harsha 9:19 PM

ok, Thank you @simonstewart

Diego Molina 9:21 PM

Does it make sense to discuss the next topic? “Betas”

Simon Stewart 9:22 PM

We can move on from “alphas” :slightly_smiling_face:

Diego Molina 9:22 PM

Like, having a timeline or something like that for Betas?

David Burns 9:22 PM

There are a number of issues that are “assigned” in the “in Progress” part of https://github.com/SeleniumHQ/selenium/projects/2 I think understanding which of those features are needed for use to move through the betas is important

Simon Stewart 9:23 PM

I have a pile of branches locally with changes If it’s in the 4.0 roadmap, that kind of suggests it’s needed before release If it’s not in the roadmap, we don’t need to worry about it (For the release itself) (We do need to worry about it)

David Burns 9:24 PM

so… I guess my request is, if you’re doing it, what can we do to get it sorted (like hand off to someone else) or if you’ve not started can you unassign yourself I think it would be good to get a clearer picture of where people can help

Simon Stewart 9:25 PM

I’m not actually assigned to that much

David Burns 9:25 PM

this is a comment to all of us really

Simon Stewart 9:25 PM

One code review, one “add support for retries to handlers” I’ve a local change that has the skeleton of retries written, as well as fallback URLs for commands

Diego Molina 9:27 PM

I’ve seen that one and wanted to check, but time hasn’t been on my side lately

Simon Stewart 9:27 PM

Join the club :slightly_smiling_face:

David Burns 9:28 PM

so part of my request really is knowing where I can help without having to badger you all I being me and my team

Simon Stewart 9:29 PM

Getting Grid rock solid would be really helpful I suspect we’re not really using ZMQ properly And if that falls over, we’re in trouble

David Burns 9:31 PM

we’ve engaged @adamgoucher and he seems Ok, but this is where I want to get more usage from betas and the grid is pretty solid we’ve fixed the main issues from browserstack at least

Simon Stewart 9:32 PM

One thing I’d quite like is a way to hook in SaaS providers to the Grid

David Burns 9:32 PM

and I would love to get a new alpha out so we can start using Jaegar more

Simon Stewart 9:33 PM

The Docker support also needs some work Firebase support and XRay would be nice for use in GCP and AWS Our HTTP client needs work: I don’t think reactor is really going to work for us

9:34

Every time I try and switch to it, there’s Yet Another Weird Failure

David Burns 9:35 PM

I am happy to get Puja involved here

Simon Stewart 9:36 PM

I think one thing we’d really love to demo is “deploying Grid to EKS” and seeing it start outputting information @Puja Jagani’s help would be amazing

Puja Jagani 9:36 PM

Would love to help!

Simon Stewart 9:36 PM

Awesomeness :slightly_smiling_face:

Diego Molina 9:36 PM

we can do that, it should not be hard :slightly_smiling_face:

Simon Stewart 9:37 PM

Getting a Kafka version of EventBus would allow folks to use other hosted infra, but I think that may be too much for 4.0

Diego Molina 9:39 PM

I prefer to see the Gird being rock solid at its core, and when that is the case, add the other things

David Burns 9:39 PM

augementing things like that is a definite post 4.0 item

Diego Molina 9:39 PM

for example, I would say we can tackle the redis backed distributor after the release

Simon Stewart 9:40 PM

I’m working on some changes to make the state of the distributor serializable Once those are done, I’ll be a lot happier with it

Diego Molina 9:43 PM

Great, I think those are the topics for today, is there something else?

Simon Stewart 9:44 PM

Not from me

David Burns 9:44 PM

I’m done

Diego Molina 9:45 PM

Thanks everyone!

Simon Stewart 9:45 PM Thank you, @diemol!

How to delete your master branch

How to move away from master as the default branch

At the Selenium project we practice trunk based development, in which trunk is the usual name of the default git branch of the repository. However, when the project was moved to GitHub, the repository followed the traditional use of master as a name for the default git branch.

With the intention of making the Selenium project an even more inclusive place where everyone is welcome, a decision was made to use trunk as the default git branch and, after the switch, delete the master branch. This change created a few challenges. This blog post will point out a few things you should watch out if you want to make the same change in your GitHub repository.

It is common to link specific parts of the code in the documentation, and that link normally contains the branch name. Double-check your documentation for links pointing to files living on the master branch, as they could end up as broken links after the change.

Mentions to the branch name

Similarly, the branch name gets mentioned in different parts of the repository, such as code comments, contribution instructions, issue and pull request templates, and the readme. Don’t forget to check these places.

GitHub repository badges

We all like to show off how our GitHub repository is doing by adding as many badges as we can. In many cases, those badges report a build status that depends on the branch where the build was executed. Make sure your Travis/CircleCI/GitHub Actions badge is pointing to the new branch.

Continuous Integration setups

A good practice in open source is to have a continuous integration setup to run the builds, execute tests and potentially do automated releases. Nowadays, the CI configuration is done in files (e.g. .travis.yml for Travis), and one important piece of that configuration is the name of the branch where the build should be executed. Similar to the previous point, double check that your new branch name is property configured in your CI integration.

Build scripts

At the Selenium project, we have a few custom build scripts that get executed through the continuous integration setup. An example is the script that generates the docs for the Java, Ruby and Python bindings. This script needs to know the code’s branch name to generate the docs. If you have scripts with similar purposes, check them after changing the branch name.

Open pull requests

All of the tasks above could probably be achieved with a text editor and a massive, but careful, “search and replace” across all the files in the repository. In short, the process we followed to move to the new branch trunk was:

  1. Create a new branch called trunk, based on the master branch.
  2. Do all the items described in the previous points.
  3. Commit and push those changes.
  4. Delete the master branch.

Nevertheless, one thing happened that we did not expect: after deleting the master branch, all the open pull requests got closed. This made sense, since they were all targeting the master branch. Therefore, before deleting your master branch, double check and, if needed, edit the open pull requests so they target the new branch.

It goes without saying that the name of your new branch can be any name that works well for your context and environment. For example, the repository that has the contents of the Selenium website uses now dev as the branch with the website source files and publish as the branch with the generated static website that gets published.

These are our lessons learned during the process of deleting the master branch in all the major repositories under the SeleniumHQ GitHub organization. I hope they are helpful if you decide to move from master as a name for your default branch.

This was originally posted at https://opensource.saucelabs.com/blog/how_to_delete_your_master_branch/

Public Project Meeting - August 13, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on August 13, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on August 27, 2020, 4:30 PM CET.


Diego Molina 7:58 PM :wave:

  • Here is the agenda for today
  • General project statistics (Previous meeting: 338 open issues, 73 open PRs)
  • Overall announcements? New people on committees, with the commit bit, etc?
  • Improving workflow (Reviewing PRs, Improving design requirements)
  • Selenium Conf website in GitHub org? (README is pending)
  • IDE to the main repo?
  • Users/passwords, access keys, etc… to distribution and release repositories.
  • Anything new to report from the last PLC/SFC call?
  • Conferences. Status for SeConf India & SeConf Chicago?
  • Pending work that needs to be done for Alpha 7?
  • Pending work that needs to be done for the first Beta?
  • Selenium Branding guide
  • Selenium marketing strategy (e.g: Webpack)
  • CoC, next steps?
  • Did anyone talk to Miki about the go bindings? (This topic has been skipped in the previous meetings but it is good to keep it on the agenda so we act on it when we have more bandwidth)

8:00 PM

Let’s start with the 1st item General project statistics (Previous meeting: 338 open issues, 73 open PRs)

8:01 PM

Current statistics 334 open issues, 63 open PRs Next item Overall announcements? New people on committees, with the commit bit, etc? Not that I am aware, anyone else?

David Burns 8:02 PM

No, but I would like to propose to create a new team on github for my team to at least have triage ability on bugs

8:03 PM

I can’t assign bugs unless they are somehow associated to the org

Diego Molina 8:03 PM

That is a good idea, I had the thought of creating a triage team and add people who are helping already in the #selenium channel, like @Salmon Mode :+1:

Simon Stewart 8:03 PM

+1 for a triage team

Diego Molina 8:04 PM

We should add that to the governance model

David Burns 8:04 PM

we can always discuss commit bit for my team at a later stage but I want them in the org

Diego Molina 8:04 PM

as a way to be part of the team without the need of explicitly be a committer

8:05 PM

who wants to take that task? add this to the governance model?

David Burns 8:05 PM

I can

Diego Molina 8:05 PM

:thumbsup:

8:06 PM

next topic? Improving workflow (Reviewing PRs, Improving design requirements)

David Burns 8:06 PM

that’s mine

8:07 PM

I would like to see if there is a way we can get designs for what people want descrribed better in issues I have noticed people misinterpretting requests in bugs that my team are working on

8:08 PM

and I dont know if it’s tribal knowledge that is missing or general experience or what can we get more definitive process for this

Simon Stewart 8:08 PM

“misinterpreting”?

David Burns 8:09 PM

well, we started down the observability issue and there are cases where work was done based on what their intrepretation was and it turned out to be different they didnt have the same context and motivation behind the changes

Simon Stewart 8:10 PM

It really helped when we had a conversation about the event stuff And since I’d planned to do that work myself, it seemed more lightweight not to fully describe everything in the issue

David Burns 8:10 PM

I agree, and I want to see if there are times we can front load that in to the issue rather than go down, write code , it’s wrong, try again

Simon Stewart 8:10 PM

Maybe if we make clear that they’re a placeholder for a conversation and identify who to speak to?

Diego Molina 8:11 PM

what I am missing in general about this, is that the decisions made through conversations in Slack are not being written in the GitHub issues or in the PRs, which makes things hard to review and move on

David Burns 8:11 PM

there is that too

8:12 PM

but having a converrsation requires the person that needs to be spoken to being free which isnt always a realistic expectation due to numerrous factors

Simon Stewart 8:13 PM

True, but front-loading all the design work is also impractical

David Burns 8:13 PM

I guess if we add more context and motivation that would be a good halfway point

8:13 PM

motivation being the main one for me.

Diego Molina 8:13 PM

what we also need to realise is that we did not have something that looked like a roadmap before, Simon helped with his brain dump that turned into the GitHub issues we have for the Selenium 4 release project so we are in a better place than the one we were but I agree that more detail on what is intended in the issues is needed, a natural next step in the iteration :+1:

David Burns 8:14 PM

agreed

8:15 PM

because, and this is my next item, if we can have some more info in issues it’s easierr to review there are changes that I can review and I go for correctness in the java server but it might be the wrong idea and we have PRs that sit, again due to people having lives and can’t always be here

Diego Molina 8:16 PM

do you think we should back to the open issues and find ways to extend them and make them more clear?

Simon Stewart 8:17 PM

Select the subset that are needing clarification and ask?

David Burns 8:17 PM

I have started doing that with some of the next load of work that I want my team to work on my goal, like everyone, is to ship se4

Simon Stewart 8:17 PM

Agreed And I want to help make that happen

8:18 PM

But I’m under some weird time constraints

David Burns 8:18 PM

I know, I am not blaming anyone

Simon Stewart 8:18 PM

I know :slightly_smiling_face:

David Burns 8:18 PM

I just want to make your life easier and my team’s and you’re kinda in both

8:19 PM

so… since code is mutable… can we go with I review for correctness, if it’s wrong and we spot then a new issue is raised with more context/motivation? and I will put it on my team’s stack?

8:20 PM

I feel this issue could raise it’s head with Sauce if they expand their team

Diego Molina 8:20 PM

uh, I need the simple English translation for that phrase

David Burns 8:21 PM

heh… sorry since I can review code, and make sure we have tests. If I feel it’s ok to merge I will, after a few days

8:22 PM

if others in this group disagree with the change, let me know, I will add it to our work and will get it sorted The issue of missing context and motivation could happen to anyone joining this group e.g. Sauce expanding their OSS team

Diego Molina 8:24 PM

got it, thanks for the translation I don’t see any issue with that, I think it makes sense in the end we can always improve things after merging code

David Burns 8:24 PM

cool. there are a few PRs from my team that have been sitting for a while

8:25 PM

and didn’t feel I could merge as I didnt have confidence in the serverr (give me a browser any day)

Diego Molina 8:26 PM

I am finding ways to help a bit more there, but we should follow your suggestion, I would appreciate a comment in the PR before merging it, like “hey, this has been sitting for while, it looks correct to me, I’ll merge it tomorrow unless someone has something against” :+1:

David Burns 8:27 PM

deal and we can get to a stage where my team can review each other which would be even better

Diego Molina 8:27 PM

:thumbsup:

8:28 PM

Next topic? Selenium Conf website in GitHub org? (README is pending)

8:29 PM

Quick update here, Andrew gave me an intro on how to make changes, the setup is more complex than I thought. We are in the process of documenting it. We should in the near future formalise a team in the governance model for the Selenium conference, there is a lot of work happening there that should be more recognised :+1:

8:30 PM

Next topic IDE to the main repo?

8:30 PM

I’ve seen @AutomatedTester and @rajendra moving the IDE repo into bazel, right?

David Burns 8:31 PM

bazel work is hand once that is done we can move it over wholesale I think the bazel work is 40% of packages. Tests still need doing but we’re touch the rough edges of bazel here

8:32 PM

we’ve both been chatting to people on the bazel slack

Diego Molina 8:32 PM

thanks for the update next topic?

8:33 PM

Users/passwords, access keys, etc… to distribution and release repositories. I added this one

8:34 PM

A few weeks ago I changed the way docker-selenium is released, moved it to GitHub actions, since I did not know the password used to push the images to Docker Hub, I had to reset the password and use it there

8:35 PM

which means that I am the only one who has the password now, and I believe this is the case for many other things we have (npm, python and ruby stuff, stores for Google/Firefox etc..) is there a way the ones in the TLC can have access to this information?

Simon Stewart 8:35 PM

We have some of the passwords stored in LastPass

Diego Molina 8:35 PM

and also consolidate it?

Simon Stewart 8:36 PM

We can share out individual credentials as needed

Diego Molina 8:36 PM

the thing is that the “as needed” moment usually comes when the one who has the credentials is not available

Simon Stewart 8:37 PM

That’s why we share them on LastPass :slightly_smiling_face:

Titus Fortner 8:37 PM

We could create a selenium account for Rubygems and share the password, right now it is giving individual accounts permission manually

Diego Molina 8:38 PM

Who has access to LastPass and can give access to all the TLC members?

Simon Stewart 8:38 PM

I do. Everyone in the PLC should have it too

Diego Molina 8:38 PM

I am only referring to credentials needed for releases and so on do we want to have different types of credentials mixed?

Simon Stewart 8:38 PM

(Sinking into a meeting where I need to talk at work. Dropping out of here)

Diego Molina 8:39 PM

Ok, then we can touch this topic again in the next meeting, but we already started it :slightly_smiling_face: Next topic: Anything new to report from the last PLC/SFC call?

8:40 PM

Seems not :slightly_smiling_face: Next topic: Conferences. Status for SeConf India & SeConf Chicago?

David Burns 8:42 PM

@mmerrell or @manoj9788 ?

Diego Molina 8:42 PM

I know India is virtual and there is a schedule already, I think they are figuring out if workshops will be done :+1::skin-tone-4:

Diego Molina 8:43 PM

and I saw that Chicago is officially postponed to 2021

David Burns 8:43 PM

in that case, move this topic to just india and then post that conference drop it from the agenda for a while

Diego Molina 8:44 PM

ok, makes sense next topic: Pending work that needs to be done for Alpha 7? Pending work that needs to be done for the first Beta? I am not sure if there are many updates here

8:44 PM

I think we need to land those PRs that are sitting to move to the last alpha

Marcus Merrell 8:46 PM

Yeah–we’ve moved out all SeConf Chicago meetings until November. We’re working to choose a new date with the venue for next year, and working on language in the contract that will allow us “ultimate cancel ability” if this thing continues to be a problem. We can move that off of the agenda for the time being :+1:

8:47 PM

I don’t have any new information about India - as far as I know there are no changes to the plan

Diego Molina 8:48 PM

thanks Marcus!

8:49 PM

So, I know that the 4 remaining topics in the agenda have no updates, so I suggest we skip them and we end the meeting early what do you think?

David Burns 8:49 PM

fine @mmerrell hey… friendly poke about that draining PR

Diego Molina 8:51 PM

ok, thanks everyone for your time!

Public Project Meeting - July 02, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on July 02, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on July 16, 2020, 4:30 PM CET.


Diego Molina 8:00 PM

Hi all, who is in for the Public Project meeting?

8:01 PM

  • Here is the overall agenda:
  • Overall announcements? New people on committees, with the commit bit, etc?
  • Anything new to report from the last PLC/SFC call?
  • Did anyone talk to Miki about the go bindings?
  • This topic has been skipped in the previous meetings but it is good to keep it on the agenda so we act on it when we have more bandwidth
  • Pending work that needs to be done for Alpha 7?
  • Pending work that needs to be done for the first Beta?
  • Conferences. Status for SeConf India & SeConf Chicago?
  • Selenium Conf website in GitHub org?
  • IDE to the main repo?
  • CoC, next steps?
  • Selenium Branding guide
  • Selenium marketing strategy (e.g: Webpack) (if anyone wants to add something, feel free to do it)

8:02 PM

First, some project health: General project statistics Previous meeting: 343 open issues, 72 open PRs Now: 338 open issues, 73 open PRs

David Burns 8:03 PM

looks like healthy movement as I know I’ve handled a few issues and PRs personally

Diego Molina 8:03 PM

Next topic: Overall announcements? New people on committees, with the commit bit, etc?

Simon Stewart 8:04 PM

WebDriver BiDi meeting was yesterday. There’s some spec prose

David Burns 8:04 PM

@tourdedave is stepping back from the tlc, for a while at least unless I have misunderstood

Manoj Kumar Kumar 8:05 PM

@AutomatedTester stepping into TLC

Simon Stewart 8:05 PM

I thought he did that a while ago, but we failed to update everything

David Burns 8:05 PM

its more official :)

Diego Molina 8:05 PM

do we want to remove him from the list explicitly? does it make a difference?

Simon Stewart 8:05 PM

And @AutomatedTester should have been in the TLC from the start :man-facepalming::skin-tone-2:

“The list”? On the governance part of the site?

Yes

Diego Molina 8:05 PM

I thought @AutomatedTester was there, it just my mistake :slightly_smiling_face:

Simon Stewart 8:06 PM

Unofficial draft of the bidi spec: https://w3c.github.io/webdriver-bidi/ There’s a way to go yet

Diego Molina 8:06 PM

ok, I will create a PR to do that (removing @tourdedave)

David Burns 8:06 PM

As retribution for not being on the TLC officially you all owe me cake :cake:

8:06 :P as for the webdriver bidi, as @simonstewart said, there is prose.

8:07

yesterday’s meeting notes are in https://www.w3.org/2020/07/01-webdriver-minutes.html The spec is being driven by Mozilla and Google mostly atm

Diego Molina 8:08 PM

thanks for the updates next topic? Anything new to report from the last PLC/SFC call?

Luke Hill 8:08 PM

I’m just being nosy, nothing to see here.

Manoj Kumar Kumar 8:09 PM

Nothing specific from the last PLC/SFC call. We’ve caught up on conference updates, which we will cover shortly.

Diego Molina 8:10 PM

ok, sounds good next topic is: Did anyone talk to Miki about the go bindings?

  • This topic has been skipped in the previous meetings but it is good to keep it on the agenda so we act on it when we have more bandwidth there is no need to comment or discuss if no one has updates though

Simon Stewart 8:10 PM

Nothing from me

Diego Molina 8:11 PM

ok the next topic is: Pending work that needs to be done for Alpha 7?

Simon Stewart 8:11 PM

I’d really like us to get the new UI in place for alpha 7 Even if it’s just a skeleton

David Burns 8:12 PM

That is in flight now, hope to get a demo on Monday and see what needs to be improved before we move into the repo :tada:

Simon Stewart 8:12 PM

Great news :slightly_smiling_face: Lemme check the project plan

Diego Molina 8:12 PM

I have seen CDP in Python and JS are almost there

David Burns 8:12 PM

we already have some of the parts required in master and the rest are being worked on CDP in python has landed

Simon Stewart 8:13 PM

https://github.com/SeleniumHQ/selenium/projects/2

Manoj Kumar Kumar 8:13 PM

And GraphQL is nearing completion, I guess.

Simon Stewart 8:13 PM

Things on my list are the new features based on CDP usage Pluggable locators

8:14

And CDP/WebDriver interop (mostly at the element and window level) Those will let us call alpha 7 the final alpha :tada: And we can make a start on the betas as we’ll be feature complete IMO Anything else that folks can think of?

Diego Molina 8:15 PM

nothing else from my side

David Burns 8:15 PM

we do have the beta list at https://github.com/SeleniumHQ/selenium/issues?q=is%3Aopen+is%3Aissue+label%3ASelenium-4-Beta

8:16

do we need to move more things there?

Simon Stewart 8:16 PM

Are those “bugs to fix in the betas” or “bugs to fix before we can cut a beta”?

David Burns 8:16 PM or remove yes

Simon Stewart 8:16 PM

Logically correct, but not an actual answer :slightly_smiling_face:

David Burns 8:16 PM

it’s a list of things @diemol thought we needed and I mostly agree

Diego Molina 8:17 PM

they come from the Google Doc we went through in London in February with Simon

Simon Stewart 8:17 PM

I shall ruthlessly reprioritise Those are things that we mostly need in place before release

8:18

But I think we can go into the betas with “the features are there, but they’re known to be unstable” The alphas are “the features aren’t even there yet”

Diego Molina 8:18 PM

I would expect to have a few things being unstable in the betas

Simon Stewart 8:19 PM

“A few things” will definitely be unstable

David Burns 8:19 PM

I would like to get things that may have got sorted but the bug list is out of date sorted as well from our lists

Simon Stewart 8:20 PM

That list seems mostly up to date

David Burns 8:20 PM

but things like Ruby on bazel and ide in the mono repo I dont think are Se4 dependent

Simon Stewart 8:20 PM

I don’t see things that are already fixed in it

David Burns 8:20 PM

my comment was general so people checked :D

Diego Molina 8:20 PM

indeed, I usually keep an eye on the issues, and I believe is up to date btw, we are already covering the next topic in the agenda Pending work that needs to be done for the first Beta? :+1::skin-tone-4:

David Burns 8:21 PM

yes and no… Can we get PRs in flight finished if they are just waiting on reviews on fixing review comments I meant

Simon Stewart 8:22 PM

Which ones in particular?

David Burns 8:22 PM

The draining one and the redis one (not picking on people) come to mind

Simon Stewart 8:22 PM

I’m not happy landing the Redis one since it leaves a broken RedisBackedDistributor in the tree, and that’s suboptimal

8:23

I need to re-review the draining one

David Burns 8:23 PM

I am not saying we need to fix it but we need people to finish them off :)

Simon Stewart 8:23 PM

Indeed.

Diego Molina 8:25 PM

so, is there anything else to add before moving to the next one?

Manoj Kumar Kumar 8:25 PM

Selenium IDE work is a separate topic? Unsure if @corevo is here? I meant on the Electron piece of work.

David Burns 8:25 PM

I can field that…

Manoj Kumar Kumar 8:25 PM

great!

David Burns 8:26 PM

Selenium IDE is now in the Edge store :tada: that’s the extension version

8:27

As for the electron version, that’s slightly on hold atm but hopefully we can start that up soon :+1::skin-tone-4:

Manoj Kumar Kumar 8:27 PM

https://microsoftedge.microsoft.com/addons/detail/selenium-ide/ajdpfmkffanmkhejnopjppegokpogffp Link to MS Edge store

David Burns 8:27 PM

I would like it to be a thing as we work on core “fit and finish” pieces

Diego Molina 8:28 PM

sounds good should we move to the next topic?

Manoj Kumar Kumar 8:28 PM

yes

Diego Molina 8:28 PM

Conferences. Status for SeConf India & SeConf Chicago?

Manoj Kumar Kumar 8:29 PM

SeConf Chicago - Postponed to 2021 - we are working on new dates and Hotels.

8:30

SeConf India - It was supposed to held on June - we’ve moved it to September, but it seems hard and the Indian borders won’t open up for any travels in and out.

8:31

Final decision is yet to be made, it will get postponed or we may have a shortened(online event)

Diego Molina 8:32 PM thanks for the updates :slightly_smiling_face:

Manoj Kumar Kumar 8:32 PM

@mmerrell Please fill in, if I’ve missed anything!

Diego Molina 8:32 PM

next topic is: Selenium Conf website in GitHub org? @andrewmkrug did a great job in revamping the site weeks ago, and now the code is in a private repo under the SeleniumHQ GitHub org he’ll add some instructions to the README on how to develop on it and deploy it :clap::skin-tone-4:

8:34

the repo is private just to keep information about future conferences confidential :slightly_smiling_face: next topic: IDE to the main repo?

David Burns 8:35 PM

No change on this. I hope to get to it soon, I have a branch doing the Bazel work

Diego Molina 8:35 PM

ok, sounds good next topic: CoC, next steps?

David Burns 8:36 PM

Last week @diemol and I met with Sage Sharp and had a productive meeting

We have given them a bunch of details and they hoped to get back to use end of this week or beginning of next week with a draft

Diego Molina 8:37 PM

yeah, it was a great session, and I think the CoC is on a good path

Marcus Merrell 8:38 PM

The only conference-related note is that we’re looking at a potential opportunity to host an online-only conference sometime in September/October, but we don’t have details or info on the $$ piece yet

Diego Molina 8:39 PM

thanks @mmerrell

8:40

should we move to the next topic?

David Burns 8:40 PM

regarding online confs I would like people to speak to their respective marketing companies and see if it’s being over done

Marcus Merrell 8:40 PM

that’s my #1 concern

David Burns 8:40 PM

there are so many atm…

Marcus Merrell 8:40 PM

how’s Breakpoint looking, btw?

David Burns 8:41 PM

It’s good so far but I know marketing team don’t really want anything past that

Marcus Merrell 8:41 PM

right… not surprising

David Burns 8:41 PM but that may change

Marcus Merrell 8:42 PM

@simonstewart was talking about potentially having a webinar series instead of a 6-hour block of content, and I’m kind of interested in anything that will keep the zoom fatigue to a minimum

unfortunately, online conferences are not my thing, as an organizer or a participant… this might make me an ideal candidate to create an event that won’t over-do it

David Burns 8:42 PM

heheh

Diego Molina 8:43 PM

ok, seems we can move to the next topic

Selenium Branding guide

Manoj Kumar Kumar 8:44 PM

We’ve always get many requests on usage of Selenium Logo for multiple purposes, PLC usually respond to those requests with the help of SFC folks.

And there is also an issue to track : https://github.com/SeleniumHQ/seleniumhq.github.io/issues/81 This has been long pending and finally we’ve started with it…

8:45

Selenium Branding guide is in-progress. Its on a private Google doc shared with the PLC and TLC members. The legal rep from the SFC team has reviewed and shared feedback and recommendations. And right now its with our Selenium team (PLC, TLC(may not be all of TLC) to look at it and see if we need more clarifications.

8:46

@simonstewart @diemol @AutomatedTester and others When you get a moment, pls take a look and share your feedback

Diego Molina 8:47 PM

I think it makes sense to have something like that, it is easy to see the Selenium logo / name misused in many places

that’s a good initiative @manoj9788!

David Burns 8:47 PM

What does this mean when people use our brand incorrectly. Like there is a linkedin group that charges for people making specific posts there.

8:48

(from what I am told) do we have recourse to challenge them?

Manoj Kumar Kumar 8:49 PM

That reminds of another questions,What are social media accounts that are handled by SeleniumHQ team?

Marcus Merrell 8:49 PM

using it to promote “Selenium Certification” is the example I see most often I believe we’ve done it before (before I joined the PLC) “done it” == “challenged them”

Manoj Kumar Kumar 8:50 PM

AFAIK, Twitter: SeleniumHQ, SeleniumConference are handled by SeleniumHQ team. LinkedIn: Is there one? Facebook: I think there is one, but don’t think anyone from SeleniumHQ team is handling that.

Marcus Merrell 8:51 PM

we should hire a tween to manage our insta (and TikTok) only half-kidding

Diego Molina 8:51 PM

there is this https://www.linkedin.com/company/selenium/about/ and this https://www.linkedin.com/company/selenium/about/

Marcus Merrell 8:51 PM

especially considering how many tweens use Selenium to do fortnite/roblox stuff

Manoj Kumar Kumar 8:51 PM

TikTok is officially banned in India :slightly_smiling_face:

Marcus Merrell 8:51 PM

lol

Diego Molina 8:52 PM

sorry, the 2nd link was meant to be this one https://www.linkedin.com/groups/961927/ (edited)

Manoj Kumar Kumar 8:52 PM

ok, no politics here. No idea, who owns that.

Diego Molina 8:54 PM

I feel this topic overlaps with the last one in the agenda: Selenium marketing strategy (e.g: Webpack)

Manoj Kumar Kumar 8:55 PM

Diego you could share some insights on the example you gave on Webpack

Diego Molina 8:56 PM

yeah, I was trying to find some info while Googling

8:57

the idea I heard, is that webpack was not having a good moment in terms of users and reputation and revamping their image (docs, social media, and of course improving the project code) helped them enormously so this point is just to have a conversation starter and see if you think something similar makes sense for Selenium

Simon Stewart 8:58 PM

It’s useful. I think we should also take a look at the things that people like about Cypress and make it clear how to surface the same thing in Selenium :+1::skin-tone-4:

Manoj Kumar Kumar 8:59 PM

Agreed! I think it makes sense @diemol

David Burns 8:59 PM

I would love for us to do something here. @simonstewart and I have previously discussed this as “fit and finish”

9:00

these are the things that people like about puppeteer/cypress and we’ve not done a good job of explaining similar things

Simon Stewart 9:01 PM

Indeed. TBH, I thought we’d be done with Se4 at this point And well into the fit-and-finish bit that could be Se5 But I agree with @diemol that part of that is a nice site with excellent docs

Diego Molina 9:02 PM

nice, so it seems there is a general feeling that we should be doing something like that I can try to do something about it and give an update for the next meeting

Simon Stewart 9:02 PM

Just one piece isn’t good enough to solve the problems That’d be fantastic, @diemol

Manoj Kumar Kumar 9:02 PM

Happy to pair on that @diemol

Diego Molina 9:02 PM

sounds good!

9:03

well, that was the last topic in the agenda, and we are 3 minutes past the end of the meeting thank you everyone!

David Burns 9:03 PM

yay

Manoj Kumar Kumar 9:03 PM

And we’ve moved from Master to Trunk Thanks @AutomatedTester

David Burns 9:03 PM

yes, and it was an important move

Manoj Kumar Kumar 9:04 PM

Thanks @diemol @simonstewart @AutomatedTester and everyone!

Moving to Trunk

Why we are getting rid of master branch in favour of trunk

Since the project started we have been following trunk based development. This was a very natural fit when we were using SVN over a decade ago on Google Code.

As Google Code shut down we moved to GitHub and the git model of doing things. We moved there mostly due to the gravity that GitHub had created in Open Source projects.

This meant that we followed the standard use of master as our trunk to work off. Now that GitHub, and services that use GitHub, have improved support for non-master branches as default we are moving our default branch to trunk. It describes how we, as a project, work and is a more inclusive term.

If you have pull requests based on master we will see about moving that over to the trunk branch ourselves. If we can’t, we may ask you to help with the rebasing.

We, as a project, want to make our community inclusive and this is just one step in making sure we are. Other steps we taking are improving our Code of Conduct and Community Guidelines.

Join us on Slack or IRC if you wish to discuss this further.

How Selenium Works: Episode 1 - Transportation

A series describing how Selenium works under the hood

After an interaction on the last weekend of January 2020, on a Selenium Issue where someone said “why can’t you just…” after I explained the issue I thought that I would start explaining commands in Selenium WebDriver and why we landed on the design that we have today.

I will repeat this on every page of the series but a lot, an annoying amount sometimes, of thinking goes into how every little bit of Selenium works.

Why?

Selenium, by chance and being good at what it does, is used by millions of people around the world as well. It’s how companies from Microsoft and Google to the small startup make sure that their site works in every browser.

How Does Selenium talk to the browser?

Selenium, over the years, decided that we were going to use HTTP to speak to the browser. We built a REST-ish API that every client binding could use and hopefully get the same results.

HTTP and REST-ish? Really?

Yea…

Let’s start with the HTTP part. When we started we had to have a unique way to speak for each browser based on the best way to speak to them. So for Internet Explorer we wrote COM code. It was fine, it worked but gave us nightmares. For Firefox we wrote a monstrocity that read line by line and, thankfully, due to Mozilla’s “make the browser yours” attitude we could do a lot. Opera allowed us to go in via the DevTools protocol.

Now, it meant that, especially in the early days of WebDriver, we would need to maintain N: M bindings where N is the language bindings and M is the browsers we support. This is not a road to a good product. We decided that we need something that every language would understand. We also needed something that would be pretty robust. HTTP was chosen and we set about building the JSONWireProtocol.

The JSONWireProtocol is where we built a REST-ish interface that would speak JSON. I say REST-ish because it didn’t follow all the principles of REST but enough to make it powerful for our needs.

How does it relate to things now?

The Web, the internet, and the world has moved on. Why hasn’t Selenium?

This is a good question and the thing is we are trying to move things on. Unfortunately the web has a state where it is broken unless it is working. HTTP is pretty robust as a protocol. It can also allow people to build up clusters for testing without having to worry too much about how the multiplexing would work. This is the reason why Selenium Grid was created and is still a pretty good choice when it comes to farming out your testing to multiple devices and multiple machines.

But Some automation Framework that uses Chrome Debug Protocol is more like the web, be like them.

So… There are tools that use Chrome’s Debug Protocol to drive the browser and some of the things they do better than Selenium are down to their choice of how they speak to the speak to the browser. Unfortunately it’s a Chrome proprietary protocol and Google is not interested in working with other browsers on making it not.

Also, ignoring the interesting design choices from the the Google team, there is the problem that we have to have a permenantly open connection. In this case it uses WebSockets but if you remember my comment earlier about the internet is down until it’s up. WebSockets would be constantly re-establishing the connection. There is also the problem of how much traffic would be going up and down that pipe.

This is fine for puppeteer where you are only speaking to something on your local machine but if you are combining a CI service, like Circle CI or TravisCI and something like AWS Device Farm, Sauce Labs, or BrowserStack you suddenly have a lot of internet inbetween you and your runner and that data needs to get somewhere.

The W3C Browser Testing and Tools Working group, which is made up of browser vendors and Selenium folk, are trying to design what this will look like to make sure that we can make it cross browser from the start without having to do weird hacky patches to browsers and ship those browsers ourselves.

Want to read more?

This was originally posted to https://www.theautomatedtester.co.uk/

Public Project Meeting - June 04, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on June 04, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on June 18, 2020, 4:30 PM CET.


Diego Molina 8:05 PM

the agenda will be:

  • anything people want to add in the next 2 minutes
  • me looking to previous agendas and adding those items here

Simon Stewart 8:06 PM

Hahaha

Agenda item: path to betas

8:07 I’d like to hear about the work that @AutomatedTester has in mind for his interns, and how (as a project) we’ll support them

Diego Molina 8:08 PM

Agenda:

  • general project statistics
  • any overall announcements? new people on committees, have the commit bit, etc?
  • so do we want/need to wait for that work to be done before doing Alpha 7?
  • Work to be done before beta? (Path to betas)
  • when is the next SFC call? (if its happened in the last two weeks, anything to report)
  • Did anyone pick up the ball to talk to Miki about the go bindings?
  • SeConf India SeConf Chicago
  • Selenium Conf website in GitHub org?
  • IDE to main repo?
  • CoC

Let’s start

8:09 general project statistics: two weeks ago: 391 open issues, open pull request: 68 now: 343 open issues, open pull request: 72

8:10 looking better, let’s keep the pace! 1

next item:; any overall announcements? new people on committees, have the commit bit, etc?

Simon Stewart 8:11 PM

Just a quick note that @Bongosway has landed a few patches recently. I’m hoping that we find a way to help him into the fold a little more

And a high five to @rajendra for his work on the JDBC stuff 1 reply 4 days ago View thread

Diego Molina 8:12 PM

absolutely, thanks for contributing!

anything else or should we move to the next item in the agenda?

8:13 ok, next item: what do we need to be done before doing Alpha 7?

Simon Stewart 8:15 PM

Things I’d like to see:

  • Switch to the reactor client for http
  • Land a basic replacement for the UI
  • Straw-man proposals for the functionality that might rely on CDP

Of which that last is in my court

David Burns 8:16 PM

  1. I am working on

as for my interns, one of which in here so say hi to @Saksham Gupta

Simon Stewart 8:17 PM

waves to @Saksham Gupta! 1

David Burns 8:17 PM

They will be extending the GraphQL system with in grid (@Saksham Gupta )

and Phani, when he joins, will be building out the Grid UI and modernising it

Diego Molina 8:18 PM

that sounds great!

Marcus Merrell 8:18 PM

welcome, @Saksham Gupta! 1

David Burns 8:18 PM

The goal of the work is to add most, if not all, the features we want in this area

8:19

both @Saksham Gupta and Phani will be supported by me and @rajendra

8:20

and next week we have another member joining our team who we can get to support both interns to make sure we don’t have any performance hits with the work they add and guide them through perf profiling. etc

Simon Stewart 8:20 PM

@Saksham Gupta you might find this useful: https://docs.google.com/document/d/1aFMmmMhBg1PgfTPmyaXaEJAhsh0lf3p0VpV7kfHIstI/edit

Diego Molina 8:20 PM

anything else pending from the non-Java stuff?

I know CDP is not working with JS yet, not sure about Python

David Burns 8:20 PM

Non-java we need to add CDP to python and JS which my team will be doing

Simon Stewart 8:21 PM

One thing i’m keen on is steering users away from raw CDP

David Burns 8:21 PM

agreed

Simon Stewart 8:21 PM

When we get WebDriver BiDi in place, we’d like to use that where possible

CDP is ugly, hard to use, and deeply fragile

Diego Molina 8:22 PM

that is a good point, because we don’t want GitHub issues reporting bugs merely due to something failing in CDP

Simon Stewart 8:23 PM

Something will fail with the CDP stuff

I may have to version it independently of the rest of the java pieces.

Diego Molina 8:23 PM

is the idea to have CDP in JS and Python for Alpha 7?

Marcus Merrell 8:23 PM

has the chromium team talked at all about CDP becoming a standard, or publishing a roadmap? (I’m off to put this exact question into google)

Simon Stewart 8:24 PM

They’re involved with the webdriver bidi stuff

I think there’s a lot of value separating “automation” from “debugging APIs”

Marcus Merrell 8:24 PM

yeah

David Burns 8:24 PM

the spec is being worked on right now

I have been reviewing it this week

Marcus Merrell 8:24 PM

I saw the transcript from last week, good stuff

David Burns 8:25 PM

CDP is not going to be the standard

Diego Molina 8:25 PM

asking again to stay in the topic, is the idea to have CDP in JS and Python for Alpha 7?

Simon Stewart 8:25 PM

Yes

David Burns 8:25 PM

@diemol maybe.. hopefully

Simon Stewart 8:25 PM

We need all languages to have that in place before we can move to betas

Diego Molina 8:27 PM

I have seen a few PRs from https://github.com/seanpoulter, he seems keen to help in JS he already asked how he can implement relative locators in JS we should try to give him quick feedback

Sean Poulter Location Ottawa, Canada Repositories 22 Followers 17 @seanpoulter | Oct 18th, 2012 | Added by GitHub

Simon Stewart 8:28 PM

@harsha509 would you like to help with that? Or @corevo?

And

David Burns 8:28 PM

JS relative locators is in there, might need some TLC

Sri Harsha 8:28 PM

i need a week to hack into js things. currently busy in paid work

Simon Stewart 8:28 PM

NP.

8:29 These paid jobs are what allow us to have the luxury of working on OSS. Focusing on them makes a lot of sense

Diego Molina 8:29 PM

in any case, let’s try to give feedback, we are in the look for JS maintainers and who knows if he could be “the one”

ok, next item?

Simon Stewart 8:30 PM

Have we finished the beta discussion?

I don’t think we’ve got more items to add to it

Diego Molina 8:31 PM

no, that is next

Work to be done before beta? (Path to betas)

Simon Stewart 8:31 PM

The things for alpha-7 are the blockers for beta

8:32 After that, I think the changes are incremental rather than entirely new features

8:33 (other than (maybe) pluggable locators0

Marcus Merrell 8:33 PM

also my “drain” feature

I’m negotiating a couple days with my paid work to get back on that

Simon Stewart 8:33 PM

That’d be nice to get into a7

I suspect that the graphql stuff will cause some changes to have to happen

Marcus Merrell 8:33 PM

can we set up a time to pair for an hour or so?

Sri Harsha 8:33 PM

I will take over maintaining JS bindings for sure in future

Simon Stewart 8:33 PM

@mmerrell sure

8:34 I’m around monday and tuesday next week

@harsha509 WOOHOO!

That’d be awesome

Marcus Merrell 8:34 PM

perfect–I’ve just blocked out most of the day for it

I know what I need to do, but would like a bit of validation on the approach, and then I need to test it

Diego Molina 8:36 PM

ok, seems the betas part has been mostly discussed in the Alpha 7 part and these previous lines

if everyone is ok with it, next topic 2

when is the next SFC call? (if its happened in the last two weeks, anything to report)

Marcus Merrell 8:36 PM

it happened Tuesday, and I believe we primarily discussed the conference

Diego Molina 8:38 PM

ah perfect, there is an item in the agenda for “SeConf India SeConf Chicago”

Simon Stewart 8:38 PM

@manoj9788 will know the most about that

Marcus Merrell 8:40 PM

yep

Diego Molina 8:40 PM

is there something else to comment from SFC or conferences? or should we move to the next item?

Marcus Merrell 8:40 PM

I can speak for Chicago

I don’t think we talked about anything else… the SFC wasn’t present on the call

Diego Molina 8:41 PM

would you like to say something about the Chicago conference?'

Marcus Merrell 8:41 PM

yeah–we’re negotiating with the hotel to take our contract and move it to 2021, around the same time of year

8:42

we’re waiting to hear back from them with a selection of dates in the Sep-Oct-Nov range

hoping not to have it the week before Thanksgiving, but also hoping to keep the room rates low

8:43

as to this year, we’re talking about holding a very sane, relatively small virtual conference, or a series of webinars spread over a couple months

we’re also discussing having another group help us out with planning and execution, someone with experience at promoting and running virtual conferences

8:44

the first discussion will happen today, and if we decide to explore further, I will probably feel more comfortable talking about who we’re considering

there is a lot to consider for a virtual conference, and we want to make sure we are thoughtful and careful

Rajendra Kadam 8:44 PM

replied to a thread: And a high five to @rajendra for his work on the JDBC stuff Thanks @simonstewart. . It wouldn’t have been complete without your help. 1

Diego Molina 8:44 PM

all that is already a lot of info, thanks for sharing!

Marcus Merrell 8:45 PM

for SeConf India, I don’t know if @manoj9788 is on and would like to share. If not, I can at least say a little about what they’re considering, I just don’t want it to be incomplete

Diego Molina 8:46 PM

up to you I would say

Marcus Merrell 8:48 PM

it appears that there’s no way they’re going to be able to put on a conference in September in Bangalore. The borders and COVID caseload aren’t adequately under control, and much like the US conference, there are too many variables that would need to be under control right now for Naresh to feel confident about having an in-person conference a scant 3 months from now 1

(by “borders” I mean “international travel & quarantine procedures”)

Diego Molina 8:48 PM

that makes a lot of sense

Marcus Merrell 8:50 PM

so we are discussing whether or not we can essentially combine the notion of a virtual conference. That troubles me because I know that all parties involved want to see revenue, but the Selenium project doesn’t want to charge for admission. I’m concerned there would be too many hands in the pot for any one of them to receive enough $$ to make it worth their while

but that’s my own concern–not meant to represent the opinion of the planning committee. We’re looking for data, not opinions–so we’re reaching out to people who have been through this in recent weeks to find out what’s possible

8:51 we hope to report in a couple weeks on any progress, both with planning the virtual conference, and with whether or not we can expect to fund our coffers in the near future

Diego Molina 8:51 PM

ok, then we can follow up in the next meeting, thanks! 1

8:52 next topic: Did anyone pick up the ball to talk to Miki about the go bindings?

Simon Stewart 8:52 PM

Not me

Diego Molina 8:52 PM

I think no one did but we should keep the topic around, and try to get to it when we have Se 4 released or close to be released

8:53 adding one more binding now would be too distracting which does not mean that we cannot reach out to him

Simon Stewart 8:54 PM

Agreed

Diego Molina 8:55 PM

ok, let’s move to the next one since we only have a few minutes left

Selenium Conf website in GitHub org?

I see the site was revamped, so great job @andrewmkrug

8:56 but I am not sure if @andrewmkrug is having problems to push the code to the org I can reach out to him

Simon Stewart 8:56 PM

Thank you 1

Diego Molina 8:56 PM

next topic: IDE to main repo?

8:57

I guess we should focus more on the bindings and the Grid for now?

Simon Stewart 8:58 PM

I think @AutomatedTester has already done a chunk of the heavy lifting

9:00

Got to go. Meeting time

Diego Molina 9:00 PM

last topic was CoC, but we can take it next time

well, we covered everything (almost), thank you everyone! 1

Marcus Merrell 9:01 PM

thank YOU, @diemol 1

Selenium 4.0 Alpha 6 is out!

We are very pleased to announce the release of Selenium 4.0 Alpha 6

We are very pleased to announce the release of Selenium 4.0 Alpha 6.

All the information can be seen in different tweets from the project contributors, here they are all in one place:

Happy hacking!

Public Project Meeting - May 07, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on May 07, 2020 (times are on IST).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on May 21, 2020, 4:30 PM CET.


adamgoucher 8:00 PM

alright. welcome back. time for another fortnightly chat about the project.

Simon Stewart 8:01 PM

:wave:

Diego Molina 8:01 PM

:wave:

Sri Harsha 8:01 PM

:wave:

adamgoucher 8:02 PM

some general project statistics; open issues: 391 open pull request: 68 (which is the lowest i think ive seen either of those numbers before)

8:03

agenda wise, this is going to be more loosey-goosey than normal as i’m swamped with day job so ignoring things. we’ll see is that is a good thing or not.

8:03

any overall announcements? new people on committees, have the commit bit, etc?

Simon Stewart 8:04 PM

I’ve landed the update to OpenTracing, which unblocks me

8:04

Next step is to wire the tracing into the Docker support And then pick up the websocket forwarding

8:05

(Which, to be fair, is “mostly done”)

adamgoucher 8:05 PM

heh. the last 20% takes the other 80% of the time :slightly_smiling_face:

Simon Stewart 8:05 PM

The Pareto Principle in action

8:06

I’d be happy pushing a6 before the next meeting

adamgoucher 8:06 PM

what do we think is missing from a6 now?

Simon Stewart 8:06 PM

It’s been a while since we did a release, and there’s progress in there

8:07

I’d dearly love the websocket forwarding, but I can live without it @diemol landed the first work with Fail Safe for some more robustness in the Grid

8:08

I think @barancev is also making some progress switching the underlying HTTP engine again

adamgoucher 8:08 PM

looks like there was a bunch of plumbing / dependencies updated in the last week especially with .net and python

Simon Stewart 8:08 PM

@jimevans and @AutomatedTester know more than I do

Jim Evans 8:10 PM

yes, the .NET bindings build using bazel should now work cross-platform. you should be able to run .NET tests using bazel test (with caveats, which i’ve yet to fully document). it kinda works within VS code, but one can for certain develop using Visual Studio 2019 on Windows, and Visual Studio for Mac on MacOS.

adamgoucher 8:11 PM (still breaks my head to write .net code on mac)

8:11

what more was needed for the http engine stuff? i thought there was a flag in there already?

8:12

or did we change it again, again

Simon Stewart 8:13 PM

The underlying library didn’t support http/2 or unix domain sockets, despite it being possible

adamgoucher 8:14 PM

so do we want/need to wait for that work to be done-ish before doing a6? so far that sounds like the only thing that will be confusing to release partially implemented

Simon Stewart 8:14 PM

Nah.

adamgoucher 8:15 PM

scans commits in another window

Simon Stewart 8:15 PM

As long as it’s in before we start on the betas, we’ll be fine

adamgoucher 8:15 PM

a question i know we dont have an answer for, but do we have a gut feel for how many more a’s there are before we start the b’s?

Simon Stewart 8:16 PM

The major outstanding features are: websocket forwarding graph-ql support

adamgoucher 8:16 PM

thats not that horrid of a list. its been much worse

Simon Stewart 8:17 PM

We’ve been chipping away at it

adamgoucher 8:18 PM

so if a6 is within the next 2 weeks, do we have a trigger condition for releasing it?

Simon Stewart 8:18 PM

No trigger condition

8:18

Other than “someone updates the changelog”, I guess

adamgoucher 8:19 PM

do we want to say ‘a6 is next tuesday’ so that all the maintainers are ready to build and tag everything? (feel like we can’t magically do it all from ci but could be making that up)

Simon Stewart 8:20 PM

The graphql piece is to support the ui, so strictly speaking we don’t really need it, but it keeps things flexible

8:20

@AutomatedTester, @p0deje, @jimevans, @titusfortner, @harsha509 Cool with shipping an alpha next week?

Jim Evans 8:21 PM

+1 from me.

Sri Harsha 8:21 PM

Yes

Diego Molina 8:22 PM

how are we handling the numbers in JS, JS is already in a7, right?

Simon Stewart 8:22 PM

“alpha-n+1”

Sri Harsha 8:22 PM

Yes @diemol . Do you have any suggestions @corevo . He should be releasing the next alpha as i know.

Alex Rodionov 8:23 PM

+1 from me

Tomer Steinfeld 8:25 PM

JS has been in alpha for a long time because of historical reasons

adamgoucher 8:25 PM

ok. so thats covers the bulk of the pressing tech stuff. other stuff that could be discussed; when is the next sfc call? (if its happened in the last two weeks, anything to report) did anyone pick up the ball to talk to miki about the go bindings? seconf india seconf us state of the se-ide into the main repo

Tomer Steinfeld 8:25 PM

I think we can land stable 4.0 together, but I don’t see a reason we should release 4 alphas together

adamgoucher 8:26 PM

(or we can keep talking about js too. but that list is just my remaining things)

Marcus Merrell 8:26 PM

the PLC call happened on Tuesday, it was just me and Jim. We mostly talked about conferences, and we were going to follow up with Simon about the status of the Code of Conduct

Simon Stewart 8:27 PM

Uhh… I thought @AutomatedTester was running with the CoC stuff.

Marcus Merrell 8:27 PM

at this point India is still slated to happen in September, same venue. I don’t know the latest about speakers or progress or anything like that

Simon Stewart 8:27 PM

It’s entirely possible I am mistaken

adamgoucher 8:27 PM

i thought david was on that too

Tomer Steinfeld 8:27 PM

Is there an update from the SFC about the MS store?

Marcus Merrell 8:28 PM

ok, I thought David was on the MS Store issue, and not the CoC, but it wouldn’t be the first time I was mistaken

Diego Molina 8:28 PM

why don’t we take the CoC draft we have, add it to the new site, and iterate on it?

Simon Stewart 8:28 PM

We were going to get a review and some guidance from Sage Sharp

Marcus Merrell 8:29 PM

for Chicago, we’ve got a verbal understanding that the venue will allow us to reschedule the conference for sometime next year with no fees. We’ve already given them a somewhat hefty deposit, and while we could likely fight to get that back, we’d rather just have it next April or October–we’re going to make that decision in late May/early June

Diego Molina 8:30 PM

for the SeleniumConf website, @andrewmkrug has joined the Selenium GitHub org, and he is helping us to push the site code to a private repo

Marcus Merrell 8:30 PM

for the Fall, we’re considering an online-only conference, and we’re waiting for a few pieces of data to come in over the next couple weeks, around TestBash and SauceCon, to gauge how they went, ideas for optimization, pros/cons, do’s don’t’s, etc

Andrew Krug 8:30 PM

was added to #selenium-tlc by Diego Molina.

Marcus Merrell 8:32 PM

I spoke to Deb (from SFC) quite a bit on Friday about tips and pointers for an online-only conference, and I’ve started to develop some opinions for how it should be done. I haven’t yet, however, come up with a firm position on the pricing model for sponsors or attendees–I definitely want to offer all the track sessions/keynotes for free, and offer a paid tier for “something” else, like if people want T-shirts or something else, but it would likely be a model where they pay what they want (to support the project), and the swag they get depends on the tier they buy into

8:33

I’m waiting to hear more from Richard Bradshaw before beginning that discussion, probably during our bi-weekly Conference conference call, on May 28th

adamgoucher 8:35 PM

so. CoC — when can we get the review and guidance? if its more than ‘not in may’ we should likely throw it up and start the iteration process

Simon Stewart 8:36 PM

It depends on Sage’s availability, and that of the people working on the CoC

adamgoucher 8:37 PM

(which, sounds like we’re not quite sure of who those are from our end)

Simon Stewart 8:37 PM

Last I checked, @mmerrell, @AutomatedTester, @diemol, @jimevans and I were all interested in being involved

8:38

From memory.

adamgoucher 8:38 PM

so the nebulous items seem to be; determine who is actually on the coc stuff

Simon Stewart 8:38 PM

Agreed

adamgoucher 8:38 PM

doh! no editing. and, determine who is actually doing the ms store stuff

8:40

which means, for the next meeting;

  • release a6 (a7 of js)
  • report who is point and who is assisting with the CoC
  • report who is leading the ms store stuff

8:41

anyone else have anything they want / need to discuss in public?

Simon Stewart 8:41 PM

I’m good

8:41

Though perhaps we should figure out who owns what on that list I hold the build bacon this time

Diego Molina 8:42 PM

maybe we can record how a release is done? and from that I can write docs

Simon Stewart 8:43 PM

I’ll walk you through the process We did have it written up here: https://github.com/SeleniumHQ/selenium/wiki/Releasing-Selenium

adamgoucher 8:43 PM

from the april 23 meeting, looks like @AutomatedTester is the store person Screen Shot 2020-05-07 at 11.12.57 AM.png Screen Shot 2020-05-07 at 11.12.57 AM.png

David Burns 2 days ago

I am waiting on replies from SFC. I chased up yesterday. Have meeting with MS next week

adamgoucher 8:45 PM

anyone volunteering for CoC lead?

Diego Molina 8:46 PM

ah nice, the release process is written, we “just” need to update it

Simon Stewart 8:46 PM

The java one doesn’t seem wildly inaccurate

adamgoucher 8:48 PM

which means, for the next meeting;

  • release a6 (a7 of js) – simon
  • report who is point and who is assisting with the CoC – tbd
  • report who is leading the ms store stuff - david?

Alexei Barantsev 8:49 PM

sorry to be late, I’m +1 for the next alpha

adamgoucher 8:50 PM

so if there isnt anything else, i say we call this thing done and do it all again in a fortnight.

8:52

slack says no one is furiously typing so, see all y’all in two weeks. as ever, if there is something you want discussed, message me directly or just drop it here for us to pickup

Diego Molina 8:53 PM

thank you @adamgoucher!

Simon Stewart 8:54 PM

Thanks, @adamgoucher!

David Burns 9:24 PM

Argh… missed it again!!!

9:28

For CoC, I keep dropping the ball on this one. I have been busy with work but hopefully can do something in the next two weeks

Public Project Meeting - April 23, 2020

Continuing the series of bi-weekly public project meetings…

Continuing the series of bi-weekly public project meetings, here is the timeline of the meeting held on April 23, 2020 (times are on CET).

Meetings are held on the #selenium-tlc channel on Selenium Slack.

The next meeting will be on May 7, 2020, 4:30 PM CET.


Diego Molina 4:32 PM

Hi all, we are going to start the next project status meeting in a moment

for now, the agenda would be:

  • project stats: +/- issues, prs
  • any staffing announcements
  • whats been worked on (seems things are picking up again)
  • whats next
  • when do we plan the next release
  • SeleniumConf status (for India and Chicago), and its website

Simon Stewart 4:32 PM

Does someone want to announce it on the main #selenium channel too?

Diego Molina 4:33 PM

I can do that

Simon Stewart 4:33 PM

Thanks

Diego Molina 4:34 PM

before we start, does anyone want to add a topic?

4:36

maybe we can also discuss the Go bindings again

but I will take that silence as a “no more topics”

First topic, project stats: +/- issues, prs…

Simon Stewart 4:37 PM

@AutomatedTester probably knows those

Diego Molina 4:37 PM

Since a few weeks we are under 65 PRs and 400 issues, we made progress but not as significant as in the previous weeks

I am looking at a couple of OSS projects that build a dashboard so we have a better overview

Simon Stewart 4:38 PM

It’s the law of diminishing returns. We’re starting to hit actual issues and things that need thinking about

Diego Molina 4:41 PM

I experimented during the weekend with https://chaoss.github.io/grimoirelab/ and https://github.com/cncf/devstats, I liked the first one more, but we need to find a place where to deploy it for free Recently I bumped into https://github.com/google/triage-party, which could be also a good one to have an overview (edited)

4:42

all this in the spirit of having a clear project status for everyone

I can try to have something working for the next meeting, does anyone have more comments or should we move to the next topic?

Simon Stewart 4:42 PM

No comments from me

Diego Molina 4:43 PM

next topic: any staffing announcements, what did you mean by this @adamgoucher?

Simon Stewart 4:43 PM

@harsha509 has joined the team :slightly_smiling_face:

adamgoucher 4:43 PM

anyone get the commit bit, step away from a committee, etc.

Diego Molina 4:44 PM

well, @tourdedave mentioned he does not have the bandwidth to be in the TLC (which is my fault because I added him without asking, in the spirit of having someone from the IDE)

4:45

we could just leave it as it is or ask around if someone is interested?

Simon Stewart 4:45 PM

Having a strong owner for the IDE would be really helpful

Marcus Merrell 4:47 PM

I’m afraid unless he or Tomer change their mind, I’m not sure anyone exists who could fit the bill

we maintain really strong contacts with Dave.. that might have to be good enough for now

Diego Molina 4:48 PM

the TLC has no size limit, so things could continue as they are, right?

Simon Stewart 4:49 PM

They could

And it sounds a bit unfair to continue to lean on @tourdedave after he’s stepped away

Diego Molina 4:51 PM

what the IDE needs for now is support from the PLC, since Microsoft wants to help with having the extension on Edge (new), but I think @AutomatedTester asked to be introduced to them, not sure what the status is there

support as in, sort out legal stuff for creating an account on the MS store

Simon Stewart 4:52 PM

That won’t be hard. Someone needs to message the selenium@conservancy.org

Tomer Steinfeld 4:52 PM

I introduced @AutomatedTester I think the next step is to have someone from the SFC create an account

To do that we need PLC stamp

So that the SFC will do it

Simon Stewart 4:52 PM

@mmerrell want to run with that, or shall we ask @AutomatedTester to do it?

Titus Fortner 4:52 PM

What does that give the project though, if it isn’t the electron implementation?

Marcus Merrell 4:52 PM

I can run with it

Simon Stewart 4:52 PM

I’m happy with @AutomatedTester on point here :slightly_smiling_face:

Titus Fortner 4:52 PM

Not saying we should ever turn down help

Just curious

Marcus Merrell 4:53 PM

He might have better contacts than me

Simon Stewart 4:53 PM

@titusfortner support on Edge, and maybe someone from MS will step into the gap

Diego Molina 4:53 PM

to have the IDE working on the new Edge

Simon Stewart 4:53 PM

And also, and this is important, IDE working on Edge (as @diemol says)

Titus Fortner 4:55 PM

I thought all chromium apps worked already. I should actually use it :)

Diego Molina 4:55 PM

could we leave as an action item to have @mmerrell (since he is in the PLC) chat with @AutomatedTester in case David needs help with the PLC? and have a status for the next meeting?

Simon Stewart 4:56 PM

Sure

Diego Molina 4:57 PM

you ok with that @mmerrell?

while he answers, should we move slowly to the next topic?

Marcus Merrell 5:00 PM

yeah, I’m ok with that

Diego Molina 5:00 PM

next topic, whats been worked on (seems things are picking up again)

Simon Stewart 5:00 PM

I’ve some diffs lined up

5:01

  • Streamlining how we manage cli flags and configuration, so that things included on the ClassPath get picked up too
  • WebSocket proxying
  • A patch that I started at SeConf (I know) to get relative locators working a little more nicely
  • I also have experimental support for pinning browser versions (and their drivers) in the bazel build, which resolves some issues that folks may have

When I get some bandwidth, landing those would be nice

After that, I’ll dig into the .Net stuff now that @jimevans has it working on macOS and see whether there’s some jiggery-pokery with select we can do so that bazel test //… will work the way we expect it to

Oh, I’ve also started wrapping OpenTelemetry with our own APIs so we do an update without too much chaos

0.2.0 -> 0.3.0 is messy

Diego Molina 5:04 PM

From my side:

  • Docker images working with the Grid 4 Alpha 5, only supporting standalone and hub/node for now
  • Working on adding support for retries in the Grid, issue #8167
  • Also, added tags and categories to the blog in selenium.dev, so now all governance related meetings can be seen at https://www.selenium.dev/categories/governance/

Marcus Merrell 5:04 PM

ditto me for the “quiesce” feature, in terms of “working since SeConf” and “when I get some bandwidth”

Jim Evans 5:05 PM

@simonstewart let me know what you’d like to see here in terms of .NET.

Marcus Merrell 5:05 PM

the bulk of it is complete, still do to:

actually spin down the nodes

5:05

write unit tests

Simon Stewart 5:06 PM

I’ve still been pondering on how we make it possible to spin the grid up in an ad-hoc order

And I keep coming back to the fact that life would be easier if we had a backbone of a “message bus”, a “key/value store”, and a “service registry”

We definitely have the message bus already

And the session-map is perilously close to being a key/value store

Diego Molina 5:07 PM

conceptually I wanted to cover that in the support for retries issue, because we cannot expect the docker containers to start always in the same order

Simon Stewart 5:07 PM

Right

Regularly has support for a successful retry and an unsuccessful retry

But we can’t build everything on that :slightly_smiling_face:

Diego Molina 5:08 PM

I want to tackle that first, so at some point containers can be used in other envs

between https://jodah.net/failsafe/fallback/ and https://github.com/resilience4j/resilience4j I am liking more the first one (edited)

Simon Stewart 5:08 PM

You’re writing the code, and I like both of them :slightly_smiling_face:

5:09

Fallback is also used by an alternative netty-based http client

We may need to switch from AsynHttpClient because it doesn’t support http2 (or unix domain sockets)

5:10

I’ve been looking at io.projectreactor.netty:reactor-netty:0.9.6.RELEASE and I think @barancev may have some code

Or he may not :slightly_smiling_face:

Diego Molina 5:10 PM

I guess we can come back to that when some written code from my side actually works :slightly_smiling_face:

Simon Stewart 5:11 PM

Well, it means that looking at failsafe fallback is a better bet

Which leans into your preference

So it’s more a datapoint than anything else

Diego Molina 5:12 PM

sounds good

ok, should we move to the next topic, so we can hopefully finish on time

Simon Stewart 5:12 PM

SGTM

Diego Molina 5:12 PM

next topic is, what’s next & when do we plan the next release

Simon Stewart 5:12 PM

Next release? I’d like a banner feature in. WebSockets and CDP across the Grid would be it, for me

5:13

Or we can just ship what we have

Marcus Merrell 5:13 PM

that would be amazing

Simon Stewart 5:13 PM

It’s a SMOP

Simple Matter of Programming

Diego Molina 5:13 PM

we have 267 commits after the alpha 5 release, sounds like there could be something we can release?

Simon Stewart 5:13 PM

So I think the choice we have to make is “timed releases” or “feature releases”

Marcus Merrell 5:14 PM

I thought SMOP might be “Simple Matter of Pfantasy”

Simon Stewart 5:14 PM

git log selenium-4.0.0-alpha-5..HEAD --oneline java

5:15

HA! 098eb99991

5:15

We landed support for configs via TOML….

Diego Molina 5:16 PM

true, what if we try to have the retries thing, docs for toml, and maybe have a release before the next status meeting?

Simon Stewart 5:16 PM

Looks like lots of little fixes

DOCS?

:wink:

I can write an info section for configuration

Diego Molina 5:17 PM

that is what I was thinking

Simon Stewart 5:17 PM

kk

File an issue and assign it to me

(At some point, I need to do my day job)

Diego Molina 5:17 PM

before the beta some of us need to make those docs a bit nicer for Se4

5:18

I will do that then

Simon Stewart 5:18 PM

Thank you

Shall we mark some issues as “4.0a6”?

Diego Molina 5:19 PM

Maybe it is too much, not sure

Marcus Merrell 5:19 PM

my offer still stands to help with issue hygiene, I just need permissions

Simon Stewart 5:19 PM

Or, perhaps, let’s work on our features, and next meeting ship 4.0a6 regardless of where we are

@mmerrell I’ll fix that up for you now

And @harsha509 too

Sri Harsha 5:20 PM Js bindings is already at alpha7. We can try to implement relative locators(which is pending in JS bindings) and release in next meeting.

Simon Stewart 5:21 PM

That’d be great

Thank you

Diego Molina 5:21 PM

issue for TOML https://github.com/SeleniumHQ/selenium/issues/8232

Simon Stewart 5:22 PM

Thank you

Diego Molina 5:22 PM

ok, two topics left

first is, SeleniumConf status (for India and Chicago), and its website

Marcus Merrell 5:23 PM

I’ll see if I can get a website update from Bill McGee now that it’s a bit later on the west coast

Diego Molina 5:23 PM

so India will happen (:crossed_fingers: ) in September, and Chicago in November, does anyone know any news related to that?

Simon Stewart 5:24 PM

@mmerrell you should have an invitation from GH to join the SeleniumHQ org. Am slightly surprised you’re not a member already :slightly_smiling_face:

Marcus Merrell 5:26 PM

the conference status is currently:

  • We’re waiting until around May 15th to make a decision, but
  • While we believe the conference could happen in November, it’s Bill McGee’s observation that people right now just don’t seem to be interested in buying tickets, submitting papers, or writing checks to sponsor in-person conferences right now
  • Given that we’re having trouble motivating people to take the actions they need to take now (the previous point), it’s hard to imagine how we can feel confident in a November conference in the near future
  • What I’m saying is that, things in the community need to happen in May in order to hold a conference in November, and I don’t have even the barest hint that those things will happen

so, at this point we believe we will be able to recover most/all funds from the Holiday Inn, based on Sauce’s experience with the Fairmont in Austin, and TestBash’s experience in Detroit

5:27

but we’re going to wait a few more weeks, a) because we can, and b) in case there’s some kind of earth-shattering news that comes out that changes the picture

Simon Stewart 5:27 PM

The UK has been told that social distancing will remain necessary until next year

Alexei Barantsev 5:28 PM

@simonstewart I don’t have any new code for http client yet, just an item on my todo list

Marcus Merrell 5:28 PM

as you might have seen, our leadership much more optimistic :face_palm:

Simon Stewart 5:28 PM

@barancev ok. There’s no rush

Diego Molina 5:29 PM

that’s a great update @mmerrell, thanks

something else I wanted to ask is, if we could have at some point the SeleniumConf website code and assets also under the SeleniumHQ GitHub org

Simon Stewart 5:29 PM

Totes up for that

5:30 I’ve another meeting to go to

Marcus Merrell 5:30 PM

me too. that’s where things get sensitive

Simon Stewart 5:30 PM

Toodle pip

Marcus Merrell 5:30 PM

but I think we need to head in that direction

Diego Molina 5:30 PM

and as part of this, add the general conference guidelines to the governance doc

Marcus Merrell 5:30 PM

yep, that’s on my plate

Diego Molina 5:30 PM

that’s fine, we can stop here as we have no more time

5:31

but we can keep the topic in our head for informal discussions

Simon Stewart 5:31 PM

You can carry on without me. I’m fine with that :slightly_smiling_face:

Diego Molina 5:31 PM

and have a status of it in the next meeting

5:32

to respect people’s time, we will end the meeting here, I will upload the minutes to selenium.dev, and prepare an agenda for the next one

5:32

thank you everyone!

Public Project Meeting - April 9, 2020

As an initiative to bring more transparency to the Selenium project…

As an initiative to bring more transparency to the Selenium project, we are now holding bi-weekly public project meetings. These are written meetings which are held on the #selenium-tlc channel on Selenium Slack.

Here is the timeline of the meeting held on April 9, 2020 (times are on CET).

The next meeting will be on April 23, 2020, 4:30 PM CET.


Simon Stewart 4:31 PM @adamgoucher there needs to be a calendar invite for these things

adamgoucher 4:32 PM well, originally the idea was that people could manage their own calendars but if you send me which email you want it attached to i can add you to the one ive been putting people on who wanted an invite

4:35 anyhow; here’s the rough approximation of an agenda. we’ll see how it goes;

  • anything governance-y that needs to be discussed in public (not limited to, but including public announcement of people getting the commit bit, etc.)
  • status of prs
  • status of issues
  • status of se project related events (india, chicago are the big ones)
  • next release status and/or timeline
  • go around the metaphorical table on how people are doing against things they signed up for
  • anything that needs to get sussed out in public (from reading the channel, the main thing that came up is the js discussion)
  • open the floor for other discussions either instigated by ’project people

4:38 anything governance-y that needs to be discussed in public (not limited to, but including public announcement of people getting the commit bit, etc.)

Diego Molina 4:38 PM if there is time, let’s add the recent topic of adding go bindings

adamgoucher 4:38 PM has there been an sfc call recently? (i cant remember when they are)

Diego Molina 4:40 PM governance related, I’d say: we need to define where we put these meetings minutes, how we announce them widely (do we need?), and that we still need a code of conduct

adamgoucher 4:41 PM ok. @diemol pester my monday morning if i haven’t figured out how to get them onto the blog by then

Diego Molina 4:41 PM So, meetings minutes… we can put them in the same format as a blog entry, and we can tag/label them so they are publicly accessible I can do that, I would just need the contents of the previous meetings, and also add small instructions on how to add new ones

adamgoucher 4:43 PM i think we just start with this one. i didnt take the most excellent notes the last couple and they might have expired out the channel (havent scrolled up to check)

Diego Molina 4:43 PM ok, so I will start doing that with this onee

adamgoucher 4:44 PM who is the point person for the code of conduct

Diego Molina 4:44 PM @AutomatedTester said something about being working on it? 4:44 but we currently have a draft, why don’t we use that draft and iterate on it?

adamgoucher 4:45 PM makes sense. as we did with the other doc

4:46 ok. next thing on the list is status of prs. which @AutomatedTester has been culling like a mad man over the last week and we’re down the 62

4:47 followed closely by status of issues and there is now 402 which i think he is also attacking (but i dont have a number from 2 weeks ago)

Diego Molina 4:48 PM perhaps we should set up a project health status dashboard I saw a couple of OSS projects that could do that

adamgoucher 4:49 PM could be interesting. of course we could also then get into wild semantic discussions around ‘what’ healthy is. :smile:

4:50 next; status of se project related events (india, chicago are the big ones)

4:51 i saw that seconf india has been moved to september. how is chicago looking?

Diego Molina 4:51 PM I think no one is around who could reply that question

David Burns 4:52 PM I also think it’s too early to comment. Chicago is in lockdown at the moment for the foreseeable

4:52 we also need to be see how many venues are still around when we come out of our homes

Isaul Vargas 4:53 PM As for big cities in the US, only by End of May can we know if restrictions will be lifted due to testing and lowering the curve.

adamgoucher 4:53 PM (it has more of a recurring agenda item more than me seeing someone who can answer)

4:54 and restrictions will be lifted in june and clamped back down in july. as is the way in a pandemic. (and really, will be until we get a vaccine)

4:55 next item; next release status and/or timeline. @simonstewart?

Simon Stewart 4:55 PM India has been moved to later in the year

4:56 We’re running the 4.0 release in the open: https://github.com/SeleniumHQ/selenium/projects/2

4:56 The config stuff won’t be too horrible. I’m quite liking the fact that TOML opens up some options

adamgoucher 4:56 PM yup. so is your plan still ‘push the button on stage to do the release and retire for your daily beverage’ or are we aiming for a same-ish part of the calender

Simon Stewart 4:56 PM When we ship, I stand down

4:57 I’d still like to get the betas out soon

4:57 But there are some big pieces missing before we can get to that point

4:58 The big one being the CDP stuff across Grid, which I’ve many of the moving parts for in various branches on my machine

Diego Molina 4:58 PM when I look at the things on the “to do” column, maybe 80% is Grid, right?

5:00 if so, it is something that calms me down because at least (from my side), I am having slowly more time to work on the code

5:00 but there are a couple of things on that list which concern me: IDE to the monorepo (and build it with bazel) + implement CDP and relative locators in JS

David Burns 5:01 PM I am doing the IDE to mono repo now

5:01 relative locators in JS should be easy, I can do it or talk @harsha509 through it

Diego Molina 5:02 PM but in the IDE, what is our approach in terms of browser extension vs. electron

5:02 right now we could only do the browser extension, right?

David Burns 5:02 PM that is separate from the mono repo work

5:03 these are questions for @tourdedave and @corevo

Simon Stewart 5:03 PM Right now, there’s just the browser extension, but @tourdedave and @corevo did start work on the electron port

5:03 I’m not sure what kind of progress they’re making, if any

Diego Molina 5:04 PM ok, so it seems we will only focus on the browser extension for now

adamgoucher 5:07 PM ok, so to summarize; all the known to-dos are in the github project india has been shifted, but dont want to just move the target to september aiming for betas to start soon, grid cdp is really the last big hurdle until those can start

Diego Molina 5:08 PM and the JS stuff, right?

5:08 (CDP + relative locators)

adamgoucher 5:09 PM i think we can skip the next thing which is ‘how are people progressing on the stuff they signed up for’ with a ‘see the github project’

5:11 because the next thing on the list i prepared was - anything that needs to get sussed out in public which, for today, means ‘what to do about javascript’. not sure that anything got resolved the other day but i think the core of it is ‘webdriver.js is the official binding but not under the auspices of the project’ or something?

Simon Stewart 5:11 PM To reiterate feedback from other people, and my own reflections:

5:12 There is a general feeling that the selenium project should own the core of its own bindings We’ve gone from having basically no-one interested in JS to having Sri on board (@harsha509) We’ve not nailed down the overall strategy yet

5:14 Which kind of suggests not using webdriver.io’s webdriver module, but continuing to work with our own stuff

5:14 Unless that module moves under the aegis of the project

Diego Molina 5:15 PM oh, actually I was talking to @christian-bromann about it, and he manifested again his interest to help move the JS bindings to use the webdriver package, and leave things ready for someone who wants to maintain the bindings

Simon Stewart 5:15 PM And if the code for the webdriver package was in our repo, I think that’s probably what we’d do

Diego Molina 5:16 PM I am not a 100% sure that he is ok with moving the code from that package to our repo but in the worst case, would a copy/fork of the code work?

Simon Stewart 5:17 PM That seems like a bad idea

Christian Bromann 5:17 PM What is the problem of not having the webdriver binding in the Selenium repo?

Simon Stewart 5:18 PM The feedback I’ve had from several people has been that they’re deeply uncomfortable with it, and won’t approve of it

5:18 It’s not just a technical thing

5:18 There are the social aspects to consider too

Christian Bromann 5:19 PM I understand.

Diego Molina 5:20 PM well, the idea of the committees is to reach consensus in these cases, and it looks like we would never reach it for this situation

Christian Bromann 5:20 PM Well the idea of generating raw bindings based of some json files is pretty easy to reimplement and I am happy to support how it can be done.

5:22 copying over the code form WebdriverIO to Selenium is rather difficult as it depends on some other wdio utilities (logging and utility functions)

Simon Stewart 5:22 PM I do wonder how far adrift the JS bindings are

5:23 The obvious missing 4.0 features are relative locators and the CDP integration

5:23 The CDP integration isn’t nailed down properly anywhere. We’ve got access to the raw protocol, but we’ve yet to build the abstractions people would actually write against

Christian Bromann 5:23 PM Given the situation I am would be also happy to invite the Selenium JS contributor to the WebdriverIO org to ensure code access and ability to merge/review code changes.

Simon Stewart 5:24 PM Thank you

Diego Molina 5:25 PM well, then it seems JS bindings stay as they are hopefully we all find a way to make them fit for the 4.0 release

5:25 should we talk about the go bindings?

adamgoucher 5:26 PM thats the only other thing on my list

Simon Stewart 5:26 PM We can talk about Go bindings

5:27 Miki offered to donate https://github.com/tebeka/selenium to the project a while ago

5:27 I got busy and had health issues, so dropped things on the floor

5:27 Should we pick that back up again?

adamgoucher 5:28 PM is he also intending to maintain it (dunno the status of them) or is it a ‘i did a thing and dont need it anymore so someone can pick it up if they want’

Simon Stewart 5:28 PM I dunno

5:28 That would be part of the conversation

David Burns 5:29 PM if it’s the latter then I am not sure we would want them. It’s amazingly nice but the maintenance burden, potentially, doesnt feel worth it

Simon Stewart 5:30 PM Indeed

5:30 But it would be nice to have some “official” Go bindings.

adamgoucher 5:30 PM i know nothing about go, but i feel like the bar for any binding to be included in the main project; is it maintained? is it idomatically correct for the language? is there not a competing, more obvious one to incorporate?

Simon Stewart 5:30 PM Turns out that people like them

5:30 s/them/the language/

Diego Molina 5:30 PM seems it is worthy to give the conversation a go

5:30 who would like to drive that conversation with Miki?

Simon Stewart 5:31 PM It’s pretty dormant right now, but is that due to being complete? My understanding is “yes” Nothing that I’m aware of

5:31 puts finger on nose

adamgoucher 5:31 PM sounds like ‘you are a go’ for the conversation about go. as it were

Simon Stewart 5:31 PM Not me

5:31 Yeah, I think it’s a conversation that’s well worth having

Diego Molina 5:32 PM I can see from a quick look that the go bindings have vendor stuff in it, for example it has the ability to use Sauce Labs out of the box

5:33 even if I work for Sauce, we need to see all those things in case we want to merge them

Simon Stewart 5:34 PM Aye

Diego Molina 5:36 PM I know how the Grid works (in general), but I still have black spots in my head when talking about bindings we need someone who knows how bindings should work and do a check on the go bindings

adamgoucher 5:37 PM sounds like ‘we think having the go bindings in the main project is cool, but currently the people in the channel right now dont have enough interest (or knowledge) to drive the conversation’

5:38 likely also have to talk to sfc about rights transfer and such. though the existing licensing could cover it

Diego Molina 5:39 PM maybe we bring the topic back in 2 weeks and see how people feel?

Simon Stewart 5:40 PM SGTM

adamgoucher 5:41 PM ok. i didnt have anything else? did anyone else?

Simon Stewart 5:42 PM I’ve got other meetings to attend, so nowt from me

adamgoucher 5:43 PM taking silence from the rest as a no. thanks everyone!

Diego Molina 5:43 PM Thank you all!

Blog Posts - 2019

SeleniumConf London 2019 Videos and Pictures

SeleniumConf London 2019 videos and pictures are available now!

Check out all the SeleniumConf London 2019 videos and photos!

You can find all the videos here, and all the pictures here.

If you cannot wait to get started, feel free to watch below Simon’s “State of the Union” keynote!

Blog Posts - 2018

Selenium IDE Is Dead, Long Live Selenium IDE!

Selenium IDE is now the Legacy IDE, a new Selenium IDE is coming!

In August of 2017 Simon shared the bleak, hard news that as of Firefox 55 Selenium IDE would no longer work. Selenium IDE (or as we’ll refer to it from here on out – the Legacy IDE) was, and is, dead.

Since then quite a lot has happened with the IDE. We have a new version of it which we are referring to as… Selenium IDE!

It is currently in “alpha” and available for use in both Chrome and Firefox.

In his post Simon also mentioned “the fine people at Applitools“. This includes Tomer Steinfeld, Dave Haeffner, and Doron Zavalevsky. Together, along with contributions from the rest of the Selenium community and the SideeX project, we have been able to get the new Selenium IDE out into the wild. We are also working to close the gap on feature parity with its predecessor along with adding some much needed enhancements to the tool (more on that in future posts).

We’d love for you to give the new IDE a try and let us know what you think. Visit either the Chrome Web Store or Firefox Add-ons to install it. For info on how to use the tool, you can check out the getting started documentation on Selenium HQ.

If you have any questions you can find us on the Selenium Slack/IRC chat channel. Think you found a bug? File an issue. Want to contribute? Take a look at the project on GitHub.

Happy Testing!

Blog Posts - 2017

Firefox 55 and Selenium IDE

The bad news: from Firefox 55 onwards, Selenium IDE will no longer work.

The bad news: from Firefox 55 onwards, Selenium IDE will no longer work.

The reasons for this are complex, but boil down to two main causes:

  1. Browsers are complicated pieces of software that are constantly evolving. Mozilla has been working hard to make Firefox faster and more stable, while still retaining the flexibility and ease of extension that we’ve come to know and love. As part of that process, Firefox is switching extensions from the original “XPI” format, to a newer, more widely adopted “Web Extension” mechanism.
  2. The Selenium project lacks someone with the time and energy to move the IDE forwards to take advantage of the new technologies.

Selenium is one of the most widely used pieces of testing software there is. Despite this, the team of people regularly contributing is small: since the start of the year, there are only 11 people who have made more than 10 commits, with two people accounting for more than half of those. Since 2016, only one person has been maintaining the IDE.

Selenium is an Open Source project. None of the core contributors — not the IDE maintainer, not the language binding owners — are paid to work on work on it. They do it because they love working on the code, and they typically do it in their “copious free time”. The IDE maintainer has had almost none of that to spare. We should all be thanking that committer for his time and effort. Thank you, Samit!

So what can we do to move forward? The first thing is that there are now a wealth of tools that are stepping up to fill the gap. You should go and have a look at them. The second thing is that there is an effort to rebuild IDE using modern APIs, to be usable across more than just Firefox. The fine people at Applitools are helping with this effort.

The third thing? That’s you. You could help us.

If you believe that a friendly UI for quickly recording and playing back tests is a useful Open Source tool, then please come and join us! The main technical discussions are happening on the #selenium IRC channel. If you’d prefer Slack, you can join us on that too. Or there’s the ever useful selenium-developers mailing list. Come onboard. We’d love your help, and IDE is a wonderful thing to contribute to!

Hacking with IntelliJ

Jetbrains have a programme for Open Source projects which allows them to receive IntelliJ IDEA licenses.

Jetbrains have a programme for Open Source projects which allows them to receive IntelliJ IDEA licenses. As part of that programme, which the Selenium project has participated in for many years, they’ve asked us to provide a fair and balanced review of IntelliJ. I’ll attempt to do that, and I’ll try and state my biases up-front so you’re aware of them.

I’ve been using Jetbrain’s IntelliJ to hack on the Selenium code since I started working on it slightly over ten years ago. It’s still my favourite IDE for my Java work, and it’s plenty of fun to use. For some time, I’ve been using the (free) Community Edition, which is ample for many coding needs.

Most of my work is in Java, and that’s where I know IDEA best. I dabble in Ruby and Python, and I’ve written a reasonably large amount of Javascript, all in IDEA.

The Pros:

In common with other good IDEs, IDEA has the ability to work seamlessly with many different languages. If you’re a polyglot programmer, being able to stay in the same tool for much of your work makes life a lot easier. On the Selenium project, we use Java, C#, Ruby, Python, and Javascript extensively. I don’t do any C#, and I mainly focus on Java, but the support for JS, Ruby, and Python is lovely and seems to work well. The built in type detection and code navigation features are impressive (particularly for untyped languages such as JS)

Of course, the feature that made IDEA so awesome in the first place is the range of refactoring options it offers. These are great, and always have been. One nice feature I’ve noticed as we move to a Java 8 future (finally!) is that it offers suggestions to help migrate to new features where they make sense (and, I’ll be honest, sometimes when they don’t). It’s made making use of lambdas a lot easier.

For a while, IDEA was becoming slower and more bloated, but I’m pleased to see that, partly thanks to the work of developers from Facebook, the latest releases feel snappier and handle larger projects more efficiently. One thing I appreciate is how open Jetbrains were to receiving patches to their core product: it displays a level of respect for external contributors that I feel is important (of course, I would think that: I work on OSS for fun!)

There’s a nice wide range of plugins available for IDEA. I’ve hooked up the Buck plugin and made use of it. Without an extensions API, this plugin wouldn’t have been possible, but having them there is incredibly useful and makes the IDE even more capable.

Finally for the plus points of the IDE, I love that the IDE tracks new versions of Java relatively closely — it’s fun to see what new language features we’ll be able to use in the future!

The Cons:

Although it’s a fine product, there are some niggles to be had.

Most annoyingly, the built in code analysis doesn’t always warn that some Java classes won’t compile. The most recent example was where IDEA didn’t flag that some lambdas couldn’t be used since the choice of method to use was ambiguous. This may be because the Java language continues its slothful way forward, and the compiler improves with each release — certainly these same files compiled just fine with older Java releases.

When an error does happen, I’ve yet to find the magic setting to allow IDEA to keep going as far as possible. One of the features I like about Eclipse is that it’ll compile as much as it can, even if there are invalid source files. When doing TDD, this allows you to move just a little bit faster as unit tests can run and pass so long as they don’t touch faulty code. I dearly wish this same capability was present in IDEA!

On the Selenium project, we use Buck for our builds. The Buck plugin doesn’t (yet!) allow me to build and run tests within the IDE, yet Buck performs some steps that can’t be repeated by the IDE that are required for a successful build. IDEA offers the ability to run an Ant step before a build is run, and it would be extremely useful if this was generalised to “any shell command”. Most of the time, it’s fine, but it’s irksome to forget to run things!

On the whole, I love IntelliJ an awful lot. It’s a fast and capable IDE, and the company behind it supports OSS. What’s not to love?

Blog Posts - 2016

Selenium 3.0: Out Now!

We are very pleased to announce the release of Selenium 3.0.

We are very pleased to announce the release of Selenium 3.0. If you’ve been waiting for a stable release since 2.53.1, now’s your chance to update. And if you do, here is what you’ll find:

As we’ve said before, for users of the WebDriver APIs this is a drop-in replacement. You’ll find that modern browsers, such as Chrome and Edge will continue to work just as before, and we’ve taken the opportunity to fix some bugs and improve stability. Selenium Grid users may require updates to their configuration as the json config file format has been updated, as have some of command line parameter options, but the upgrade should also be smooth.

The major change in Selenium 3.0 is we’re removing the original Selenium Core implementation and replacing it with one backed by WebDriver. This will affect all users of the Selenium RC APIs. For more information, please see the previous post.

A lot has changed in the 5 years between versions 2 and 3. When we shipped Selenium 2, the Selenium project was responsible for providing the driver for each browser. Now, we are happy to say that all the major browser vendors ship their own implementations (Apple, Google, Microsoft, and Mozilla). Because the browser vendors know their browsers better than anyone, their WebDriver implementations can be tightly coupled to the browser, leading to a better testing experience for you.

The other notable change has been that there is now a W3C specification for browser automation, based on the Open Source WebDriver. This has yet to reach “recommendation” status, but the people working on it (including members of the Selenium project!) are now focusing on finishing the text and writing the implementations.

Mozilla has been a front-runner in implementing the W3C WebDriver protocol. On the plus side, this has exposed problems with the spec as it has evolved, but it also means that Firefox support is hard to track as their engineering efforts have been forward looking, rather than on supporting the current wire protocol used by Selenium WebDriver. For now, the best advice we can offer is for you to try the latest release of geckodriver and Selenium together.

These are exciting times for browser automation! Selenium 3.0 is a major release and we’re looking forward to improving things further, as well as tracking the ongoing work of the W3C spec. Our goal is to keep the changes your tests need to deal with to an absolute minimum, to continue preserving the hard work that’s gone into writing your existing tests.

As a personal note, I’d like to say thank you to each of the many people that have worked so hard to make Selenium 3 possible. That’s not just the developers and contributors to the Open Source project (past and present), but also the engineers from Google, Microsoft, Mozilla, and Apple, and everyone involved with the W3C spec. I’d also like to say thank you to everyone who’s taken the time to report bugs, our users and our community. The project is great fun to work on and you’re the reason for that. A final thank you is due to the Software Freedom Conservancy, who have provided invaluable help with the logistics of running a large OSS project.

Happy hacking, everyone! May your tests run fast and true!

Selenium 3 is Coming

Selenium 3 is coming!

Selenium 3 is coming! As I write this, we think that “beta 4” will be the last beta before the official 3.0 release. I’m here to tell you about what’s changed, and what impact this will have on your testing.

TL;DR:

  • WebDriver users will just find bug fixes and a drop-in replacement for 2.x.
  • Selenium Grid users will also find bug fixes and a simple update.
  • The WebDriver APIs are now the only APIs actively supported by the Selenium project.
  • The Selenium RC APIs have been moved to a “legacy” package.
  • The original code powering Selenium RC has been replaced with something backed by WebDriver, which is also contained in the “legacy” package.
  • By a quirk of timing, Mozilla have made changes to Firefox that mean that from Firefox 48 you must use their geckodriver to use that browser, regardless of whether you’re using Selenium 2 or 3.

In more depth:

When we released Selenium 2.0 in 2011, we introduced the new WebDriver APIs, and encouraged everyone to start moving to them. If you’re using the WebDriver APIs, then Selenium 3.0 is a simple drop-in upgrade. We’ve not changed any of the public WebDriver APIs, and the code is essentially the same as the last 2.x release. If you’re using Selenium Grid, the same applies: in most cases, you can just drop in the new JAR (or update your maven dependency to 3.0.0), and you’re done.

If the update to Selenium 3 is such a non-event, why did we call this Selenium 3.0? To answer this question, I first need to provide some history, and tell you a little about how Selenium works under the hood. The very first version of Selenium was “just” a very complicated Javascript framework, running in the browser and interpreting the table-based tests you may be familiar with if you use Selenium IDE. We call this “Selenium Core”. This Javascript framework formed the basis of the original implementation of Selenium RC (the oldest set of Selenium APIs, where all the method and functions were on the “Selenium” interface, and which have been deprecated for some time now). Over time, the needs of modern web testing have grown ever more complicated and sophisticated, and Selenium Core is now less capable of meeting these needs than it was before.

With Selenium 3.0, we are deleting the original Selenium Core implementation. If you use the old RC interfaces, we provide an alternative implementation that’s backed by WebDriver. This is the same “webdriver-backed selenium” that has been available as part of Selenium 2 since its release. Because the underlying technology has changed from Selenium Core to WebDriver, you may find some places where your existing tests using RC run into issues. Our experience with migrating suites is that it’s normally a systemic issue that can be fixed with a minimal engineering effort (that is, the problem is normally isolated to a few places, and these can be rewritten to avoid problems)

We’re also removing the original Selenium RC APIs from the main downloads. If you’re a Java user, and need to use them to support existing tests, then you’ll need a dependency to “org.seleniumhq.selenium:selenium-leg-rc:3.0.0” (or later!). It’s strongly recommended that you do not do this unless you absolutely need to.
If you’re someone who runs tests exported from IDE in the table format, there is now a new test runner that the project has made available for you to use that can be downloaded from the project’s website. It takes the same arguments as the old runner, and we’ve done our best to ensure the output of tests remains the same too.

At the same time as the Selenium project is shipping Selenium 3.0, Mozilla are changing the internals of Firefox in a way that makes it more stable and secure, but which also makes the community provided Firefox Driver no longer work. As such, if you use Firefox for your testing, you’ll need to use the geckodriver, which is an executable similar to the chromedriver and the Microsoft WebDriver for Edge. You’ll need to start using geckodriver even if you’re using Selenium 2 — the change is in the browser, not Selenium. Please be aware that geckodriver is alpha software, based on the evolving W3C WebDriver standard: everyone’s working flat out to give you the best testing experience they can, but there are undoubtedly some bumps in the road when it comes to testing with Firefox.

This release marks the culmination of a lot of hard work by the Selenium committers and community. I’d like to thank everyone who has been part of this process, and the Selenium users around the world who have done so much to make the project as successful as it is.

Announcing Selenium 3.0-beta1

At SeleniumConf in 2013, we announced that a new major version of Selenium would be released “by Christmas”.

At SeleniumConf in 2013, we announced that a new major version of Selenium would be released “by Christmas”. Fortunately, we never said which Christmas, as it has taken us a while to make all the changes we wanted to make! We’re excited to announce the release of the first beta — Selenium 3.0.0-beta1.

We’d love you to try it out on your projects, and provide us with feedback on where the rough edges are before we ship the 3.0 itself! Please remember that this is a beta release, so your feedback is incredibly helpful and valuable in order to help us smooth any rough edges.

For the last six years we’ve been advising users to switch to the newer WebDriver APIs and to stop using the original RC APIs. With Selenium 3.0, the original implementation of RC has been removed, replaced by one that sits on top of WebDriver. For many users, this change will go completely unnoticed, as they’re no longer using the RC APIs. For those of you who still are, we’ve done our best to make the change as smooth as possible, but we welcome high quality bug reports to help us fix any problems that occur. Maven users will need to add a dependency on the new “leg-rc” package to access the old RC APIs.

There are some other changes that you might need to be aware of:

  • You’ll need to be running Java 8 to use the Java pieces of Selenium. This is the oldest version of Java officially supported by Oracle, so hopefully you’re using it already!
  • Support for Firefox is via Mozilla’s geckodriver.
  • Support for Safari is provided on macOS (Sierra or later) via Apple’s own safaridriver.
  • Support for Edge is provided by MS through their webdriver server.
  • Only versions 9 or above of IE are supported. Earlier versions may work, but are no longer supported as MS no longer supports them.

We’ll be posting more information about Selenium 3.0 to this blog soon, but until then if you’re interested in learning more then a recent webinar by Simon is a great place to start.

Fall Selenium Conf, Save the Date & Call for Speakers!

We’re excited to announce that we’ve finally determined where and when Selenium Conf will be happening this Fall.

We’re excited to announce that we’ve finally determined where and when Selenium Conf will be happening this Fall.

Our initial goal was to bring the event to a new country, but for a number of reasons that proved more challenging than we’d hoped. But in 2012 we had the 2nd annual Selenium Conf in London, and we’re pleased to be bringing it back there this year!

The conference will be held at The Mermaid in downtown London on November 14-16:

  • The 14th will be all-day pre-conference workshops
  • The 15th-16th will be the conference

Go here to sign up for the email list for conference updates (e.g., when tickets go on sale) as well as submit a talk. Call for speakers are open from now until July 29th.

Selenium Conf India 2016 Update

Selenium Conf India is happening this June 24-26 in Bangalore, India.

Selenium Conf India is happening this June 24-26 in Bangalore, India.

Tickets, call for speakers, and sponsorship slots are now available!

http://2016.seleniumconf.in/

Blog Posts - 2015

Selenium Conf India — Save The Date!

In our last update we mentioned there will be 2 Selenium Confs in 2016 — one in India, another somewhere else (TBD).

In our last update we mentioned there will be 2 Selenium Confs in 2016 — one in India, another somewhere else (TBD).

Well, we are pleased to announce the official dates and location for Selenium Conf India!

When: June 24th & 25th, 2016

Where: Bangalore, India (at The Chancery Pavilion Hotel)

Mark you calendars! We’ll have more details as they become available (e.g., call for speakers, ticket sales, etc.). To get the latest updates, be sure to sign up for the Selenium Conf mailing list.

Selenium Conf 2016

Interested in learning what’s in store for Se Conf 2016?

Interested in learning what’s in store for Se Conf 2016? Then be sure to read this write-up from the Conference Organizers.

Also, if you want to receive email notifications about the conference (e.g., when and where it will be, call for speakers, ticket sales, etc.) then go here and complete the sign-up form.

Selenium Conf 2015 Update

Selenium 2015 is just around the corner (September 8-10).

Selenium 2015 is just around the corner (September 8-10). Since our last post we have:

  • confirmed Keynote speakers
  • finalized workshop presenters
  • selected the talks for the conference

You can see keynote & workshop info here, and the selected talks here.

If you still need a ticket, the last block of tickets are on sale NOW.

If you want to attend the conference then register ASAP. Tickets will go quick and once they’re gone, they’re gone. To register go here and purchase either a Last Call or Last Call + Workshop ticket.

Selenium Conf 2015 Details

The Selenium Conf 2015 website is live!

The Selenium Conf 2015 website is live!

You can now:

– purchase tickets (while supplies last)

– find out venue information

– submit a talk

– learn more about our talk selection process (tl;dr it is a blind review process to encourage diversity)

What are you waiting for? Go to the conference website already!

Selenium Conf 2015 – Save The Date

Selenium Conf is coming to Portland, Oregon this year!

Selenium Conf is coming to Portland, Oregon this year!

It will be happening on September 8, 9, and 10. Mark your calendars.

Stay tuned for details!

IntelliJ

Every year, Jetbrains are kind enough to donate an OSS license for IntelliJ to the Selenium project.

Every year, Jetbrains are kind enough to donate an OSS license for IntelliJ to the Selenium project. As part of that process, they’ve asked that we review the product and (kudos to them!) have been clear that they hope we’re open and honest. So, I’ll be open and honest.

When I tell people that I’m a professional Java developer, people in some circles make sympathetic noises and (sometimes) jokingly refer to how painful my coding life must be. After all, there are several far trendier and hipper languages, from Ruby, various flavours of Javascript, Python, Haskell, and even other languages running on the JVM such as Scala and Clojure. I tend to agree that Java is a relatively unexciting language as it’s generally practiced — Java 8 contains a wealth of goodies that lots of people won’t be using for years since they’ve still got to support Java 6(!) apps. Where I disagree with the detractors is that using Java is something to feel sorry for a developer for: Java on its own isn’t much fun, Java and IntelliJ is one of my favourite programming experiences.

I’ve been using Java since the (very) late 90s, and have been using IntelliJ off-and-on since 2003 or so. In the intervening just-over-a-decade, what started as a tool that crossed the Rubicon of “being able to do refactoring” has matured. It has literally changed the way I write code: I now use the “Introduce Variable” refactoring to avoid needing to do initial assignments of values to variables as a matter of course. Indeed, with IntelliJ, I frequently stop thinking about the programming language and start thinking about the structure of the solution. Its refactorings make exploring large scale changes easy and entirely reliable, and once the restructurings are complete, I can jump to symbols with ease.

Code exploration is aided by the simple and quick ways IntelliJ can find usages, and it’s simple to find unused code as method declarations get highlighted in a different shade to used ones. The integrated debugger is sufficiently capable that, coupled with unit tests, it’s normally pretty easy to figure out why some odd behaviour is happening. And, speaking of unit tests, the UI is clear and (I find) intuitive and easy to use.

And those users of fancy-pants languages such as Clojure, Ruby, Python and Javascript (and PHP) can get plugins that extend IntelliJ’s capabilities and insight into those languages. Although it’s been a long time since I’ve had to deal with Spring and JEE, when I do IJ has my back, grokking the config files. The maven and gradle integration appears to work too, though Selenium uses CrazyFun and is migrating to Buck, so I’ve seldom any need to

It’s not all wonder and joy. On large, multi-module codebases, IntelliJ seems to spend too long building caches. Activity Monitor on the Mac suggests it’s doing this in a single threaded manner, which is wasteful on a multicored machine. Switching away from IJ, doing something on the command line involving source control and then switching back is a sure-fire way to make it rebuild the caches, making it unresponsive. Extending IntelliJ by writing plugins is a black art — the documentation is scattered and appears out of date, making getting started on writing one hard.

Overall, though, I love IntelliJ. On the Selenium project, it’s the IDE of choice, and I’ve been incredibly productive in it. Thank you, Jetbrains, for a wonderful tool.

Blog Posts - 2014

Selenium Hangout 5 Recap

Here’s a recap from the latest Selenium Hangout panel discussion.

01:35 – 9:45 W3C Update
Notes from most recent W3C Meeting
Highlights:
– changes to the get_attribute method call
– screenshots (changing to viewport only, eventually will support whole page)
The WebDriver W3C working group has a GitHub repo now
– WebDriver will move from a “REST-ish” to a more “RESTful” interface

11:23 – 16:00 Selenium 3 Status Update

16:05 – 17:10 Marionette (FirefoxdDiver rewrite) testing help
Marionette Roadmap

17:20 – 19:27 ChemistryKit rewrite
Announcement blog post

17:28 – 20:24 Visual Testing Part 1
Getting Started with Visual Testing
Applitools (visual testing cloud solution built on top of WebDriver)

20:25 – 23:47 Selenium Guidebook in Java!
The Selenium Guidebook

23:52 – 29:51 Visual Testing Part 2
Web Consistency Testing
Why MogoTest won’t be open sourcing it’s code after shutting down
Michael Tamm’s GTAC talk on Fighting Layout Bugs
Getting Started with Visual Testing

Selenium Hangout 5 Recap

Here’s a recap from the latest Selenium Hangout panel discussion.

0:00 – 01:10 Intro

1:11 – 13:00 WebDriver W3C Spec & Selenium 3 Update

  • Progress on the spec, still a work in progress
  • No user facing changes to the Selenium API as a result
  • Trying to pair the spec and Selenium 3 together
  • If all goes well, the spec and Selenium 3 could drop during Selenium Conf (fingers crossed)

13:01 – 24:10 Selenium Conf 2014 Update

24:11 – 39:00 Discussion about 5 Hidden Costs Of Selenium Whitepaper from Telerik

Announcing Selenium Conf ’14: Bangalore, India

It makes me enormously happy and proud to announce that the Selenium Conference 2014 will be held in Bangalore on the 4-6 September.

It makes me enormously happy and proud to announce that the Selenium Conference 2014 will be held in Bangalore on the 4-6 September. I’m looking forward to seeing you there!

One of the plans we’ve had from the very beginning for SeConf was that it was going to be a conference for the community of people who make Selenium such a fun project to work on. One way to do this was to host the conference where the largest groups of people using Selenium are found. We kicked off the first conference in San Francisco mainly because of the large number of Selenium users there (and, I’ll be honest, because that’s where the organising team had the most experience and contacts!)

In Europe, that large pool was London, so we held the second conference there. We had originally planned for the third conference to be in New York, but that proved to be a little too expensive, so we moved it North a little to Boston. Essentially, the pattern is that we alternate between the US one year and The Rest of the World the other.

That brings us to the planning for Selenium Conference this year. We had a look at the data available to us, and noticed that there were two areas of the world that it would be great to take the conference to. Selenium Camp, hosted in Kiev each year, does a great job of catering to one of these groups, so that leaves the second.

It’s India’s turn. 🙂

Thank you to everyone who’s already poured so much heart and spirit into this conference. We’ll be putting up a call for papers and more details soon, so please stay tuned!

Selenium Hangout 4 Recap

Here’s a recap from the latest Selenium Hangout panel discussion.

Here’s a recap from the latest Selenium Hangout panel discussion. To submit questions for future hangouts, you can message us on Twitter (@seleniumhangout) or e-mail us (questions@seleniumhangout.com).

Panel
David Burns (@AutomatedTester)
Kevin Menard (@nirvdrum)
Dave Haeffner (@TourDeDave)

Timeline

1:30-16:51: How to handle screenshots across different drivers
tl;dr driver specific issues due to a lacking standard and missing API

  • This is getting addressed in World Wide Web Consortium (W3C) spec which is under development
  • E-mail use-cases you would like to see in the spec to automatedtester@mozilla.com

17:30-22:40 : Internet Explorer (IE) 9 pitfalls and how to avoid them
tl;dr use 32-bit IE (if you’re not) and report issues to Selenium Issues

22:50-28:30 How do you do image and video comparison testing?
tl;dr straight image comparison is a flawed strategy, but there’s a better way — also, Selenium’s not the best tool for the job

Resources mentioned:

28:58-38:15 How do you get started with Selenium?
tl;dr pick a language you feel comfortable with, choose an editor that makes you productive, and dig into the available resources

Recommended resources:

38:23-42:50 Selenium 3 Update
tl;dr still a work in progress, steadily moving forward, a big update will likely be required

43:15-44:00 Conference Update
tl;dr nothing finalized, hoping to do it internationally, but US is a fallback; still working on options (will know soon)

44:10-45:20 Mobile Changes to the Selenium project
tl;dr Android and iPhone Selenium drivers deprecated in favor of other compatible libraries

Compatible libraries:

45:20-47:30 New Mobile Selenium Drivers
tl;dr RIM (BlackBerry Smartphones) and Microsoft (Windows phones)

Blog Posts - 2013

Android and iOS Support

TL;DR: We’re retiring Selenium’s own AndroidDriver and iPhoneDriver in favour of any of Selendroid, iosdriver and Appium.

TL;DR: We’re retiring Selenium’s own AndroidDriver and iPhoneDriver in favour of any of Selendroid, iosdriver and Appium. If you’re using one of Selenium’s own mobile drivers, please evaluate one of these alternatives.

The longer version:

In 2007, Steve Jobs announced the iPhone and changed the mobile Web from a curiosity to something the mainstream wanted and used. Current trends suggest that mobile Web usage will surpass desktop usage in the not too distant future. Which is a long way of saying the mobile Web is going to be a big part of the future of your sites and that it’d be an extremely wise idea to test them on mobile devices.

The Selenium project responded to the rise of the mobile web by working to produce WebDriver implementations for both iOS and Android. The first lines of the iPhoneDriver (which also worked on the iPad) were added to the project early in 2009. The AndroidDriver was added in June 2010, and was primarily developed by engineers at Google. To this day you can download the official Android SDK and find “Google WebDriver” as one of the optional extras you can download.

After the initial work on the mobile drivers, something interesting happened. Experimental extensions and modifications to the drivers were made outside of the selenium project. The first one of these that I was involved with was “nativedriver“. This took the novel approach of allowing users to interact with the native UI of the phone, be it Android or iOS, using the familiar WebDriver APIs. The first time I saw it, I thought it was madness, but the engineers working on it soon convinced me that it made sense. And guess what? They were right.

Sadly, after proving the idea was viable and workable, the NativeDriver project ran out of steam, but it set the scene for three projects that have taken the idea and run with it to create remarkably capable pieces of mobile testing software: Selendroid, iosdriver and Appium. All three of these allow a tester familiar with the WebDriver APIs to test mobile apps on iOS and Android. Not only native ones, but also hybrid or pure web-based ones too. They’ve recently been joined by the Windows Phone WebDriver, which allows testing of mobile web apps on WinPhone 8.

All of these projects have something in common: they’re far more active, more capable and have pushed further than the equivalent code in the main selenium project. In fact, some of the members of the selenium team that contributed to both AndroidDriver and iPhoneDriver are now also working on those other projects. There’s work being done to maintain interoperability between the different drivers, allowing users to chose which framework is most appropriate for their needs without fear of their tests needing major rework.

This means that keeping the existing Android and iPhone drivers within the Selenium project isn’t helping our users. The alternatives are better, and keeping “official” drivers within the project muddies the water. Worse, the selenium developers are slow at making fixes to those drivers, which is incredibly frustrating for everyone involved. Because of this, the Selenium project has deleted the code for those drivers from its repository and we recommend you evaluate and use one of the alternatives.

Of course, the code will still live in our repo’s history, so if you’d like to build them yourself, then it’s still possible. The last version with the iPhoneDriver is ef9d578, and the last one with the Android source is 00a3c7d. We’ve uploaded a version of the AndroidDriver built from that revision to the downloads page to save you having to do so yourself.

These changes do not mean that we don’t support mobile as a project. It just means that we support the best implementations of mobile WebDriver, and those aren’t written as part of the Selenium project.

Selenium Hangout 3 Recap

Here is a recap of our most recent Selenium Hangout where we answered a grab bag of questions ranging from how to use Selenium within your existing workflow down to nitty-gritty details around performance and deprecated functions.

Here is a recap of our most recent Selenium Hangout where we answered a grab bag of questions ranging from how to use Selenium within your existing workflow down to nitty-gritty details around performance and deprecated functions.

Be sure to tune into our Twitter feed to find out details about our next Hangout.

And if your question didn’t get answered, we encourage you to hop on IRC and ask it there. Not sure what that means or how to do it? Then read this.

Panel

David Burns (@AutomatedTester)

Dave Haeffner (@TourDeDave)

Jim Evans (@jimevansmusic)

Kevin Menard (@nirvdrum)

Timeline

00:00 – 05:50

Preamble and Introductions

05:51 – 18:09

Question 1 – For a team getting started with Selenium what are some typical workflows for how product code is built, and Selenium tests built, as well as for when product code is modified and Selenium test modified?

18:10 – 34:15

Question 2 – Recommendations for testing responsive design?

34:15 – 37:44

Question 3 – Was VerifyText removed?

37:45 – 46:20

Question 4 – Why is IE9 slow and hard to use and recommendations for alleviate this?

46:21 – 50:11

Question 5 – ChromeDriver2 seems less robust than it’s predecessor, thoughts on this?

50:12 – 53:39

Question 6 – The Selenium documentation is out of date, how can I contribute a fix for this?

53:40 – 54:31

How to help out with the Selenium Conference?

Links mentioned

Figuring Out What To Test

How to get involved with the Selenium Conference

Where to contribute to Selenium Documentation

Selenium Hangout 2 Recap

This is a recap from the most recent Selenium Hangout (a.k.a. The World’s Best Selenium Meetup).

This is a recap from the most recent Selenium Hangout (a.k.a. The World’s Best Selenium Meetup). For info on future meetups, follow them on Twitter.

Thanks to all who attended and tuned into the last Selenium Hangout where we talked about Selenium 3! Below is a write-up of the meetup, the video, and relevant links we mentioned. And to access all meetup videos you can go here.

Panel

David Burns (@AutomatedTester)
Dave Haeffner (@TourDeDave)
Kevin Menard (@nirvdrum)
Simon Stewart (@shs96c)

Video

Minutes

00:00 – 05:04

Goal and items for today’s conversation
Feedback review from last meetup
Intros

05:05 – 07:34

API changes
Packaging
Gradual approach to phasing out Selenium RC
Support for Selenium IDE HTML Suite running

07:35 – 09:55

Selenium Builder, how it will replace Selenium IDE, and when

09:56 – 11:30

Firefox Driver 2 release (a.k.a. “M day”)

11:31 – 12:00

Tasks required to complete WebDriver W3C standard

12:01 – 14:30

Upgrade concerns for enterprise users of Selenium
Recommended watching: Jason Leyba’s talk at SeConf about upgrading Selenium at Google
Reasons why companies should make the jump

14:31 – 14:55

Why we need browser vendors to help
Why the W3C standard makes sense

14:56 – 21:40

Lessons learned and challenges found when a large scale practitioner upgraded from RC to WebDriver
Things they would like to see cleaned in Selenium 3
A nod in support of Selenium RC as a separate download
Simon attempts a joke

21:41 – 25:15

Other changes in Selenium 3
– all or nothing upgrade
– exception handling (changing from status codes to status strings)
– how commands are getting sent across the wire
– philosophy behind approach to Selenium RC approach

25:16 – 27:29

Mobile support in Selenium 3

27:30 – 37:05

Firefox Driver and Firefox OS
Recommended watching: Jonathan Griffin & David Burns’ talk at SeConf on Firefox Driver/Marionette
Creating a common set of Desired Capabilities
Recommended watching: David Burns’ talk at SeConf on adding mobile gestures to WebDriver

37:06 – 38:20

Documentation

38:21 – 49:40

Brief history of Selenium project
Recommendation for RC users to look at the stable and brilliant new and shiny
Plan for Selenium RC in depth and rough timeline
Another recommendation to watch Jason Leyba’s talk at SeConf about upgrading Selenium at Google

49:41 – 50:45

Encouragement for folks to hop on Selenium IRC chat channel (especially if your question wasn’t asked/answered)
Recommended reading: Elemental Selenium’s write-up on what IRC is, how to use it, and how to connect to the Selenium IRC chat channel

50:46 – 51:45

Where to submit feedback and request topics for future meetups

Mobile WebDriver

Although the WebDriver APIs started life as just a mechanism for automating web browsers, over the past few years it has been extended to also work on mobile devices.

Although the WebDriver APIs started life as just a mechanism for automating web browsers, over the past few years it has been extended to also work on mobile devices. Projects such as Appium, iosdriver, and Selendroid have all shown that this approach works, and works well. On the Web, if you start using Selenium WebDriver with one browser (Firefox, for example), it’s easy to switch out the browser for another one (such as Internet Explorer or Chrome). It’d be nice to have a similar option for mobile, switching from one automation framework for Android to another.

As part of the Selenium 3 work, we have started working on a test suite to help ensure this level of interop between appium and iosdriver, and appium and selendroid. To kick start the process, the primary authors of each of those tools, as well as others including David Burns representing the Marionette project (Mozilla’s implementation of WebDriver for Firefox and Firefox OS) and Simon Stewart, the lead of the Selenium project, have spent the past two days locked in a small room in Mozilla HQ, London. They’ve taken this time to work out the areas where each of their projects didn’t align and agreed on a way to ensure a level of interoperability. There was only a minimal quantity of blood and tears, but plenty of hard work.

The agenda for the past two days can be found here, and the minutes are also available.

As we speak, work has started on a shared test suite, hosted in a repo in the selenium project’s Google Code page. Please, feel free to come along and join in!

The Road to Selenium 3

Selenium 2 was released in July 2011…

Selenium 2 was released in July 2011. It’s now two years old, and what a couple of years it’s been! The WebDriver APIs, which were the major addition in Selenium 2, are now the basis for a W3C standard, and there are implementations written and supported by Google, Mozilla and Opera. There have been 34 releases, with official support for Java, C#, Python, Ruby and Javascript, and the community has stepped in to provide bindings for Perl, PHP and others. There have been 57 different people authoring changes in the code base, and countless more participating in the online forums, offering help and advice.

While all this has been happening, the world has moved on, and now it’s time for the Selenium project to look to the future. It’s with great pleasure that I can now say that we’re working towards Selenium 3.

We aim for Selenium 3 to be “a tool for user-focused automation of mobile and web apps”.

What does this mean? For mobile users, the Selenium project will be hosting a suite of tests to facilitate interoperability between the many different projects available that are extending the WebDriver API to also cope with mobile. Developers from projects such as Appium, ios-driver and selendroid will be working on the suite of tests to enable this.

We’ll also be working on making the technology behind Selenium as stable and capable as possible. For this reason, Selenium 3 will see the removal of the original Selenium Core implementations, and consequently we’ll be deprecating the RC APIs too. The old versions will still be available as a separate download, but active development will cease, except for very urgent fixes. We will still be providing an implementation of the RC APIs backed by WebDriver, so you can continue running your existing tests, but now would be a great time to make the move to using the WebDriver APIs directly.

For those of you exporting your tests from IDE and running the HTML suites, we’ll provide an alternative runner that allows you to continue running those tests too, though it’ll be backed by the same “WebDriver-backed” RC implementation as offered by the main download. Again, the original implementation will be available as a download, but it will no longer be actively developed once we release 3.0.

Our current plan is to start shipping 3.0 by Christmas this year: it’s going to be a lot of fun!

A Smattering of Selenium #157

Trying to find every excuse not to cut the grass… including apparently closing some browser tabs.

Trying to find every excuse not to cut the grass … including apparently closing some browser tabs.

A Smattering of Selenium #156

Brain fried from PyCon Canada 2013 and ‘some’ browser tab is misbehaving which means its time to start closing some of these.

Brain fried from PyCon Canada 2013 and ‘some’ browser tab is misbehaving which means its time to start closing some of these.

The World’s Best Selenium Meetup

Note from Adam: This is a guest post from Dave Haeffner who, along with David Burns hatched this idea at SeConf2013.

Note from Adam: This is a guest post from Dave Haeffner who, along with David Burns hatched this idea at SeConf2013.

Selenium Meetups are great, but…

Have you ever wanted to attend a Selenium Meetup but there’s not one near you? Or maybe there is but something’s come up and you can’t make it out that night? Or maybe the meetup near you struggles to get good speakers and have a consistent schedule? [Note from Adam; like, say, the Toronto one…]

We can do better

Well, what if there were a way to attend a meetup regardless of location?

And what if each meetup you attended was lined with core maintainers of the Selenium project?

And if you missed it, what if the whole thing was recorded and available for you to review at your leisure?

Well, now you can.

The World’s Best Selenium Meetup

Introducing Selenium Hangout — the world’s best and most accessible Selenium meetup. An entirely online meetup that leverages Google Hangouts and live streaming to YouTube. All meetups will be recorded and posted online afterwards.

Each meetup will contain a small panel of people from the Selenium Community (e.g. core committers, automation practitioners, etc.) and they will discuss various topics (TBD).

How to attend

Simply follow the SeleniumHangout Twitter account to find out more.

A Smattering of Selenium #155

A ‘should be scripting, but brain stuck in neutral so closing some tabs’ edition of the Smattering.

A ‘should be scripting, but brain stuck in neutral so closing some tabs’ edition of the Smattering.

A Smattering of Selenium #154

Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.

Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.

A Smattering of Selenium #153

A Sunday Smattering? Sure!

A Sunday Smattering? Sure!

A Smattering of Selenium #152

40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?

40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?

A Smattering of Selenium #151

Almost a month after the last one.

Almost a month after the last one. Though it did nice to have it at 150 when people go to the blog … but a greater number is nicer.

A Smattering of Selenium #150

Yup, this smattering has very little to do with Selenium, but… 150!

Yup, this smattering has very little to do with Selenium, but… 150!

A Smattering of Selenium #149

Too. Many. Tabs.

Too. Many. Tabs.

A Smattering of Selenium #148

Gotta start this up again…

Gotta start this up again…

Curious to know how we picked speakers for the 2013 SeConf? Read on…

This is a guest post by Marcus Merrell, one of the organizers of the 2013 Selenium Conference.

This is a guest post by Marcus Merrell, one of the organizers of the 2013 Selenium Conference.

Selenium/Webdriver has kept my family fed since 2007. Since I’ve never committed a line of code to this magical project, I thought the least I could do was spend a few hours helping put SeConf 2013 together. When they asked for a volunteer to put the speaker program together, I was thrilled to step forward!

Ultimately, I decided on a more conventional approach than straight-up dictatorship–and I can only credit the 5 awesome people on the committee and their ruthless adherence to the principle that “data wins”. I wanted a mix of hard-core browser techs, language-binding mavens, and people who ultimately made their living keeping a large variety of clients happy. And Simon–always Simon. I left myself out of the voting, because these are the experts’ experts: I figured the best thing I could do was ensure a smooth process and remove the burdens of book-keeping.

Here they are, the People You Can Blame:

– Dave Hunt, Mozilla
– Jim Evans, Salesforce.com
– Santiago Suarez-Ordoñez, Sauce Labs
– Jari Bakken, The Matrix
– Simon Stewart, Mt Olympus

I don’t know if it was beginner’s luck, but there was zero drama. These folks are all pros, and we’ve put together a hell of a great conference for Boston.

We had 24 slots to fill, but only ~45 submissions, and without the variety of topics we wanted. Specifically, we were dismayed by the low number of submissions from female presenters. Given a high proportion of female testers in the industry, we believed their voice was under-represented. The call was extended in part to attempt to correct this, and ended up netting us ~20 more submissions in total.

With the proposals all gathered in one place (thanks, Ashley!), I then set about trying to find “themes” in the submissions. Several leapt out immediately–lots of case studies showed up from large household-name companies that I knew people would find interesting. Some deep-dives appeared, describing the inner workings of browser implementations or talking about a new tool-set people might find interesting.

Another theme I saw, a blend of the previous two, were the Best Practices–people who wanted to talk about processes for applying disparate tool sets to the problems we face every day. I believe these talks have the broadest appeal, and are a primary driver of attendance. We also had enough mobile offerings to put together a “bloc”, which will consume a whole afternoon.

Simon suggested “blind auditions” for the selection process, and everyone loved the idea. Voting would take place not knowing anything about the speaker outside of hints left in their abstract. Since we had extended the call to invite submissions from female presenters, we therefore believed this would “correct” for that bias. It should at least remove all doubt that any speaker was chosen specifically for their gender.

I created a Google spreadsheet with a separate tab for each of these themes. Each tab contained only a few columns–the title, abstract, “notes to organizers” (if it was relevant), and one column for each person on the committee to vote. I did not include author bios, and if someone’s name showed up in anywhere else, I redacted it. I *did*, however, leave in speaker’s company. I figured if I saw two talks, “Success and Failure at Google” and, “Continuous Integration with Selenium at Bob’s House of HTML and Gumbo”, it would be completely reasonable to make the decision based on the company.

My thinking was, rather than have each person go through each talk individually, all these folks would have to do is read a paragraph and assign a number 1-5 (1=want, 5=don’t want). That way they would rank the talks in terms of the best subjects for that particular theme, thereby making sure just about anyone would have a good “path” through the conference. The committee was given a short deadline (1 week!) to fill out the voting columns, after which we’d sync up on the phone.

Somehow we managed to get people from California, Texas, Florida, the UK, and Norway into the same Google Hangout at the same time. We averaged the scores into a column in the spreadsheet, and Simon expertly sorted, manipulated, and color-coded the rows. As I said, we had 24 slots to fill, so Simon just drew a line: every talk in every theme that scored below a 2 was “in”. This left us with around 10 talks–we all agreed on two points: a) those talks were awesome, and b) we needed more.

So we cut in the talks with a score between 2 and 3. This put us up to 23 talks, so we had to begin some horse-trading. We started to have some difficult conversations when I realized that I had somehow not scored one talk at the bottom of one tab. I applied the formula to that cell, and it had one of the best scores of all–so we had 24! Huzzah!

Where does this leave us? With 2 days of Track A and one day of Track B. Given 8 presentations per track per day, that leaves us with an entire day of “open” talks for Track B. Be sure to sign up right when you get there–these slots went really fast last year, and will probably go fast again. We also will have a day of workshops on four different topics, with two in the morning and two in the afternoon.

We’d like people’s feedback on how the conference “flows” this year. As I said, we wanted someone with just about any background and interest to be able to find a path through this conference, so I’d like to hear whether or not we achieved it.

…and I hope to see you all in Boston! (PS: Tickets are going fast!).

A Smattering of Selenium #147

My. Get. Productive. I know! I’ll push out a smattering.

My. Get. Productive. I know! I’ll push out a smattering. Oh. …

A Smattering of Selenium #146

Happy ‘productivity destructive week’ — otherwise known as March break.

Happy ‘productivity destructive week’ — otherwise known as March break.

A Smattering of Selenium #145

Alice Finch builds massive LEGO Hogwarts from 400,000 bricks starts out at awesome and goes somewhere further down the scale when you get to the photo that shows scale.

Alice Finch builds massive LEGO Hogwarts from 400,000 bricks starts out at awesome and goes somewhere further down the scale when you get to the photo that shows scale.

A Smattering of Selenium #144

Real Canadians watch curling instead of hockey.

Real Canadians watch curling instead of hockey.

A Smattering of Selenium #143

If you had anything interesting last week I should have seen, you’ll have to resend it to me or @seleniumhq — things were a bit crashy.

If you had anything interesting last week I should have seen, you’ll have to resend it to me or @seleniumhq — things were a bit crashy.

A Smattering of Selenium #142

Its a Wiggle your brain kind of morning…

Its a Wiggle your brain kind of morning…

A Smattering of Selenium #141

Its -12 Celsius plus windchill out.

Its -12 Celsius plus windchill out. Why the heck is the office air conditioning on. Feel like I need a Mr. Rogers cardigan or something.

A Smattering of Selenium #140

Buckets!

Buckets!

A Smattering of Selenium #139

Posting from the past into the future. Or something…

Posting from the past into the future. Or something… (its a scheduled post).

A Plan to Drop Firefox 3.x Support

The support policy of the selenium project for Firefox browsers is to support the current and previous stables releases, as well as the current and previous ESR releases. At the time of writing, that means the supported versions are “10” and “17” (ESR) and “17” and “18” (stable channel). In addition to this, we are […]
The support policy of the selenium project for Firefox browsers is to support the current and previous stables releases, as well as the current and previous ESR releases. At the time of writing, that means the supported versions are “10” and “17” (ESR) and “17” and “18” (stable channel). In addition to this, we are currently supporting Firefox 3.x too.
This is an official announcement that we are planning to end support for Firefox 3.x in the near future in RC, WebDriver and Core/IDE, and this is your chance to be involved in that decision. Unless there is a strong reason to do otherwise, I shall shortly be announcing a timeline for the end of the support of 3.x
Once support for Firefox 3.x is removed, the earliest supported Firefox version will be the ESR-1 release (currently Firefox 10).
Rationale:
Firefox 3.x is no longer actively supported by Mozilla, and this has been the case since April 24, 2012. Since this time, 3.x has dropped to under 1% of global Web traffic (0.62% at the time of writing according to StatCounter) Continued focus on supporting an effectively dead browser prevents the selenium team from using features in the newer releases for little benefit to you.
Continued support of Firefox 3.x by the selenium project gives the impression that that particular version is still a valid option used by the population of the Web. This is simply not the case, and it may mean that testers efforts are being spent fixing problems that almost no users will ever see.
What you can do:
If you agree that this is the right choice, then you do not need to do anything. If you disagree strongly and have the numbers to back up your position, particularly if you can help work on Firefox 3.x support, then please reply to the selenium-user google group.
On a personal note, I know that a lot of you may well have firefox 3.x support in your test plans and will be distressed by this plan. Please take the time to look at actual usage logs from your sites and applications to verify that continued support is worth your time and energy before responding. I’d really appreciate that.

Selenium Conf 2013: Call for Papers and Early Bird Tickets

This year’s Selenium Conference is slated for June 10 – 12 in beautiful Boston, Massachusetts.

This year’s Selenium Conference is slated for June 10 – 12 in beautiful Boston, Massachusetts. The conference will be held at the Renaissance Boston Waterfront Hotel. Similar to last year, this year’s conference will kick off with a full day of Selenium Workshops, followed by a two day, two track conference. If you’ve always dreamed of speaking at a Selenium Conference there’s still time to submit a talk to us at http://www.seleniumconf.org/speakers/.

As we have done every year, we’re pleased to announce that a batch of early bird tickets to the Conference is on sale now, even before the talks have been finalized. You can get your ticket(s) by visiting http://seconf2013.eventbrite.com/. There are only 45 early bird tickets available at the special rate of $299, and they are only available until February 4th, so act now! After that the regular price of $350 will be in effect for all tickets. You’ll also notice that tickets to our workshop day are for sale as well. These cost $75 and entitle you to attend a full day of Selenium workshops on Monday June 10th.

More information on the conference is available at http://www.seleniumconf.org/, and we are still accepting speaker proposals. We’re looking forward to seeing you in June!

A Smattering of Selenium #138

<insert snark here>

<insert snark here>

A Smattering of Selenium #137

Whoops, missed a couple days… ah well.

Whoops, missed a couple days… ah well.

Source Control

This short technical note is to announce that the Selenium project is now using git.

This short technical note is to announce that the Selenium project is now using git on Google Code in place of subversion.

The move has been a long time in the making, and it’s largely thanks to the efforts of Kristian Rosenvold that we’ve been able to do the migration and retain the project history. The project owes him a huge thank you! We’re in the process of migrating the last bits and pieces (none of which are user facing), so there may be some last minute turbulence as we settle everything down.

Although the canonical source will be on Google Code (http://selenium.googlecode.com/), we’re working on setting up a github mirror. We’ll announce the location of that once it’s set up.

A Smattering of Selenium #136

Someone go back to my past self and punch him for thinking that starting to get in shape was a good idea.

Someone go back to my past self and punch him for thinking that starting to get in shape was a good idea. OMGCANTMOVE.

A Smattering of Selenium #135

Three in a row…

Three in a row … of course, these are the easy three.

A Smattering of Selenium #134

Hrm. Office is closed until Monday, but everyone is in.

Hrm. Office is closed until Monday, but everyone is in. Very confusing…

  • One reason I have heard people say they don’t use cloud instances is they are afraid they will just sit around idle when not needed. Behind the clouds: how RelEng do Firefox builds on AWS has some useful scripts to find and teardown machines.
  • Page Weight Matters is a fun little insight into how/why YouTube shed some of its heft. And a reminder that what we need is more stuff coming out of bandwidth starved regions since we have forgotten how to program efficiently in North America / Europe.
  • Usetrace looks like the newest player in the Selenium-in-the-cloud space. Seems to use the Python bindings as the scripting language and host the scripts too.
  • Did you know that you can modify the Se Server’s Grid functionality with plugins? Neither did I — or at least I don’t think I did… Here is a tutorial and another example.
  • The interesting part of Whose bug is this anyway?!? is ‘Your computer is broken’ bit. Oh, and make sure that build machine is updated to what your developers are running…
  • Modeling How Programmers Read Code is just cool.
  • Speaking of reading code; Code Reading. I wonder if you gave this to a novice programmer if they would approach the above link differently.
  • PhantomJS 1.8 “Blue Winter Rose” got lots of twitter love. As it should have.
  • Cooperative multitasking using coroutines (in PHP!) is, I think, pretty awesome just by the my inability to fully grok what is going on. I also have no idea how to use this for automation purposes, but it seems like there should be some usage for it somewhere…
  • So You Want to Write Tests is more mindset than code … but code has always been the easy part anyways.

A Smattering of Selenium #133

Since today is the start of ‘find a new contract’ I guess I don’t have an excuse to miss these for the next week or so.

Since today is the start of ‘find a new contract’ I guess I don’t have an excuse to miss these for the next week or so.

(Oh, and Happy New Year, etc.)

Blog Posts - 2012

A Smattering of Selenium #132

2.27.0 is now out which means you can close the browser tab that points to the old Firefox installers.

2.27.0 is now out which means you can close the browser tab that points to the old Firefox installers.

A Smattering of Selenium #131

Not sure how widely broadcast this has been…

Not sure how widely broadcast this has been (cus, you know, we’re good at communicating and stuff), but if you are using 2.26.0 and Firefox 17 you will get a nasty bug. 2.27.0 is in the works to address this (and a couple other things…) so if you need FF right now, keep your install at the latest 16 release.

A Smattering of Selenium #130

Can’t get enough Se bloggage?

Can’t get enough Se bloggage? Have a look at Overview of Selenium Blogs — though I must say there has to be something wrong with the Alexa algorithm if I am that far down the list. And behind both David and Alister. 🙂

A Smattering of Selenium #129

A hardy welcome back to work to our American friends who spent Thursday being thankful for what they had, then getting into fist fights at stores for things they thought they didn’t need the next day.

A hardy welcome back to work to our American friends who spent Thursday being thankful for what they had, then getting into fist fights at stores for things they thought they didn’t need the next day.

A Smattering of Selenium #128

…as I avoid writing code that deals with dynamically constructed tables.

…as I avoid writing code that deals with dynamically constructed tables. Without any sort of unique locator. Of course.

A Smattering of Selenium #127

Within an hour I had some more things to add to the last Smattering.

Within an hour I had some more things to add to the last Smattering. Oh well, I’ll just save them up…

  • Har-assert looks like something useful to include in your project if you are using Java. And the browsermob-proxy (which of course, you all are)
  • Web Content Accessibility Guidelines (WCAG) 2.0 seems like something more people should care about.
  • Right. Here is another cool part of the nebulous, meaningless thing called HTML5. Using the PageVisibility API. Anyone want to take bets on how long this gets used for evil rather than awesome?
  • JUnit 4.11 is out. The link is to the release notes. The ‘test execution order’ stuff seems like bowing to pressure rather than good test design…
  • Why Averages Suck and Percentiles are Great is your monthly statistics lesson.
  • Alright, here is the challenge for everyone who wants to get involved in the project but is afraid they cannot code well enough. (If I can code well enough, so can you…) The docs can always use more people! And then we should get !se to work on via DuckDuckHack.
  • Test::Page is another helper for making Page Objects in Ruby
  • The first item in An impassioned plea to other Start-up founders to use automated tests is the only one that really holds any water. The rest, well, is showing the author’s developer bias I think. (The rest of his blog seems pretty good as well.)
  • RainbowDriver looks interesting. Though after the flurry around the Mobile Test Summit there seems to be no more commits…
  • The Shumway Open SWF Runtime Project Not sure how I feel about Shumway. On one hand, open is better than closed, but from an automation perspective, SWF is a pain

A Smattering of Selenium #126

I’ve been threatening that I was going to do this for awhile…

I’ve been threatening that I was going to do this for awhile…

  • What it feels like when you are running a long running batch of scripts…
  • Remember kids, your script cannot adapt to the unexpected…
  • But on occasion they can do something that…
  • Oh! Here’s a useful metric of productivity!
  • And just when you thought you were doing something without anyone paying attention…
  • Unfortunately what a lot of automation is like…
  • Or how about when you are writing code against the wrong environment…
  • How writing tests for a testing framework feels…
  • has too many to link to individually

A Smattering of Selenium #125

Right…

Right…

  • Scripting batch 1: waiting for an email
  • Scripting batch 2: waiting for an email
  • Scripting batch 3: waiting for an email
  • Scripting batch 4: waiting for an email

Perhaps I’ll do something else right now…

  • Alright kids, its not the Olympics, but Curvy would be a fun app for someone to automate.
  • Wow that was fast. Øredev has started to publish the videos from this year’s conference. Lots of good things in there.
  • The right tool for the job! is one of my favourite rants. And one that catches people off guard when I mention it — ‘but you are a selenium consultant’…
  • Mobile apps still need automated tests. Yup. Of course, its not like the OS vendors are helping their developers to do this. Actively hindering them is more like it…
  • On Being A Senior Engineer. Somewhere, a newly minted ‘Senior QA Developer’ fresh out of school is having a bit of a cry…
  • Right. So how would Composition over inheritance affect the Page Object pattern. Or perhaps not affect, but what would that look like?
  • Hrm. Eclim might be how to make Eclipse not suck.
  • And while I am taking cheap shots at Eclipse … IDEs Are a Language Smell. Or put another way, Dear Android…
  • Someone (or someones) should do a time analysis of writing out scripts something like Where Does All That Time Go?. I suspect though that a lot of automation would be cancelled as a result though.
  • WonderProxy seems like it might be a useful tool. Especially if you are doing behaviour based upon where you are. Though wow it is annoying to be somewhere you don’t speak the language and have your language cookie ignored. *cough* google *cough*

A Smattering of Selenium #124

Too. Many. Links. Not. Enough. Posts.

Too. Many. Links. Not. Enough. Posts.

Announcing Selenium 2.26: the “It’s Really Real” Release

It’s been a long time since we announced a new Selenium release on this blog…

It’s been a long time since we announced a new Selenium release on this blog, as we moved to a model of quicker releases, but we’ve been working on 2.26 for far longer than normal — it’s out! Download it now! — so I thought it best to let you know. We’re aiming to head back to faster releases, so hopefully you won’t see another blog post about the release for a while (though I’m sure they’ll appear in the “Smatterings of Selenium” posts)

Some highlights that you might be interested in, include support for the latest and greatest versions of the popular browsers out there (including native events on Firefox 16!), the deletion of deprecated methods from the language bindings, better emulation of user input on IE when dealing with “sucker fish” style menus, and a slew of bug fixes. There’s more in the changelog!

The inimitable Jim Evans held the Release Bacon for what has become one of our most challenging releases to do, so a big “thank you!” to him. A “thank you”, also, to the rest of the core developers and Sauce Labs team members who worked on fixing so many bugs and getting our continuous build green, especially Alexei Barantsev who did some amazingly detailed and painstaking work to help the release through. And a final “thank you” to our users: thanks for your feedback and support. 🙂

A Smattering of Selenium #123

If you are not using something like Chef or Puppet to keep your grid nodes behaving then you are absolutely doing it wrong.

A Smattering of Selenium #122

Let’s try the ‘all video’ edition this time.

Let’s try the ‘all video’ edition this time.

Hrm. That didn’t work … let’s add some slide decks.

A Smattering of Selenium #121

Its the ‘all github’ edition today!

Its the ‘all github’ edition today!

  • Dave goes a little strange on us with his diy_framework as an emoting robot. Here is the deck that went along with it.
  • Can’t get enough of the food-based frameworks from the kids at Sauce. If you are using the PHPUnit included WebDriver bindings [and Sauce OnDemand] then Sausage could be of interest.
  • Of course, if you are just using PHPUnit, then paraunit could of interest. I’ve written similar before, but this looks cross-platform.
  • buster-selenium is, erm, well, Selenium for buster.js
  • Why did I only learn about ievms now? Oh. Well, one of the requirements is patience. That explains it.
  • gifsockets; I’ll wait while you pick up the pieces of your exploded brain
  • How to capture a FF profile log. Dunno what gets put in it, but tuck this away in your back pocket
  • I don’t have a use case for flower but collection of modules to build distributed and reliable concurrent systems in Python seems link-worthy
  • Again, not sure when you would use it, but webdriver-user-agent-randomizer seems darn cool
  • You don’t see too many open-source ios apps, so here is GoogleTransit-iOS6

A Smattering of Selenium #120

Here we grow again.

A Smattering of Selenium #119

Its that time again, 4th Annual Automation Honors Voting is now open.

Its that time again, 4th Annual Automation Honors Voting is now open. Vanity contests FTW!

A Smattering of Selenium #118

<Insert witty/snarky commentary on something here>

<Insert witty/snarky commentary on something here>

A Smattering of Selenium #117

Evolutionary Project Structure talks about a particular project structure…

A Smattering of Selenium #116

So do people celebrate the day after Labor day as the beginning of summer?

So do people celebrate the day after Labor day as the beginning of summer?

A Smattering of Selenium #115

The big news in the twitter-verse yesterday was the announcement of Apple Sauce and Android Sauce from Sauce Labs.

A Smattering of Selenium #114

Hurray for having fillings done on both sides of my face.

Hurray for having fillings done on both sides of my face. Don’t expect me to speak without drolling for rest of the day.

A Smattering of Selenium #113

/me is not looking forward to when the jet lag whallops him

/me is not looking forward to when the jet lag whallops him

A Smattering of Selenium #112

Eyes are gross.

Eyes are gross.

A Smattering of Selenium #111

When this gets published, I’ll be sitting around the Barcelona airport waiting for my connection home.

When this gets published, I’ll be sitting around the Barcelona airport waiting for my connection home. Unless I screwed up the time math. 🙂

A Smattering of Selenium #110

Dear body; what time zone are you in?

Dear body; what time zone are you in?

Ah well, until that battle resolves itself, here are some links.

A Smattering of Selenium #109

Going to be on an airplane for the better part of the next day, so will likely miss some links … unless I am tagged on twitter with it.

Going to be on an airplane for the better part of the next day, so will likely miss some links … unless I am tagged on twitter with it.

A Smattering of Selenium #108

Apparently the links are slowing down for the summer?

Apparently the links are slowing down for the summer?

A Smattering of Selenium #107

Back on the train again. Wow, the highway is screwed today.

Back on the train again. Wow, the highway is screwed today.

A Smattering of Selenium #106

In case you are curious, the train just went past my old neighbourhood.

In case you are curious, the train just went past my old neighbourhood.

  • Marionette – The Future of FirefoxDriver in Selenium is a project that has been hinted at here before I think, but this is its coming out party. Oh. And its the future of the Firefox driver. Now, what I need is an A-Team t-shirt…
  • FlynnID 0.2 changes its config format. I don’t play around with Grid much (at all) but I’ve been told that you need this if you are going to have Android devicii attached to the grid.
  • Geb: Groovy Browser Automation Tool – Part 2 starts out with a Page Object which is becoming the minimum standard for tutorial-esque posts
  • Proxy & Executor is the meetup talk I did at SFSe, SJSe and YYZSe over the span of 10 days this month. Slides, multiple video, notes, etc.
  • Hiss routes Growl messages through Mountain Lion’s Notification Center. I keep thinking I should use Growl for more things with my frameworks…
  • Cucumber & Cheese is not just about Ruby and Page Objects but how everything fits into the whole ATDD thing. Is likely Watir focused, but there are few people I would trust with this content more than Jeff.
  • Gargoyle is feature switching for Django.
  • Automate the install of JDK 5 on Lion and Mountain Lion seems like something that should be configured via Puppet or Chef or similar, but is geeky enough to include anyways.
  • Garzik: An Andre To Remember is not Se related, but is important for people to read and remember to have context. And to remember there is a whole world outside.
  • Python For Humans is awesome. I’d like the whole ‘… For Humans’ thing to catch on.

A Smattering of Selenium #105

This was supposed to go out Friday, but the flu bug I picked up decided to move the schedule about somewhat.

This was supposed to go out Friday, but the flu bug I picked up decided to move the schedule about somewhat.

A Smattering of Selenium #104

I think everyone is on holidays right now…

I think everyone is on holidays right now…

A Smattering of Selenium #103

Seems I had this all ready to go yesterday…

Seems I had this all ready to go yesterday… oh, and Happy Birthday Jim Evans — maintainer of IE and C# driver. If also a day late.

A Smattering of Selenium #102

Apparently my body isn’t quite on left coast time…

Apparently my body isn’t quite on left coast time…

A Smattering of Selenium #101

Really? A drought for most of the week and now I’ve got a queue again in the span of 3 hours?

Really? A drought for most of the week and now I’ve got a queue again in the span of 3 hours?

A Smattering of Selenium #100

Century!

Century!

A Smattering of Selenium #99

With the queue flushed we’ll go back to our regular random posting schedule.

With the queue flushed we’ll go back to our regular random posting schedule

A Smattering of Selenium #98

Happy day off Canuckistan!

Happy day off Canuckistan! I’ll be in California in two weeks; here is my schedule — come by and chat

A Smattering of Selenium #97

Yes. I know. I missed a day.

Yes. I know. I missed a day. But 13 in a row was a good run!

A Smattering of Selenium #96

Blech. Supposed to go car shopping today.

Blech. Supposed to go car shopping today. Any car brands want to sponsor my wife with a car so I can do something productive? Worth a shot…

A Smattering of Selenium #95

Ok twitterverse. After 2 weeks of very few links a day you explode.

Ok twitterverse. After 2 weeks of very few links a day you explode.

A Smattering of Selenium #94

# sudo wget coffee > adam

# sudo wget coffee > adam

  • Selenium-RC Commands is a mindmap of all the commands in Se-RC. (Unsurprising really.) I keep meaning to do this for WebDriver.

  • quacken is a script for grabbing OFX files from Quicken it seems

  • What’s that? You weren’t happy with one of the six PHP WebDriver clients that were out there already? Have another one — Nearsoft/PHP-SeleniumClient. It’d be spooky what would happen if we all got together on this.

  • Thucydides Release 0.8.26 grew Remote WebDriver support (and something to do with Spring but I don’t speak Java)

  • I don’t know if this is a chop or not, but

    Why did the @Lenovo dev call me an asshole? Code review much? twitter.com/RussSolberg/st…

    — Russell S (@RussSolberg) June 22, 2012

    is hilarious. Well, from a ‘been there, done that, crap I forgot to revert’ perspective.

  • Yes, packaging is a hard problem. No, I don’t know how to even begin to solve it. Python Packaging: Hate, hate, hate everywhere is kinda a history lesson on what the current state of the world is in Python.

  • Oh, and because this is what happens on the internets, there is a bigger discussion of the previous article over on Hacker News

  • inproctester is a standalone J2EE app server for running HTMLUnit WebDriver scripts

  • Its a bit amusing [though not to a lot of people] how much love parts of WebDriver get from the world at large and how much hatred other parts get. What’s Wrong With the Internet Explorer Driver? enumerates some of the causes, why they got that way, and throws down the gauntlet to Microsoft. Who will promptly do, erm, nothing…

  • Accept-Charset Is No More seems like one of those browser differences that we should know about.

A Smattering of Selenium #93

Did I say 8 days in a row yesterday? I meant 9.

Did I say 8 days in a row yesterday? I meant 9. Good thing programming doesn’t require counting…

A Smattering of Selenium #92

What’s that? Eight days in a row? That’s right…

What’s that? Eight days in a row? That’s right…

A Smattering of Selenium #91

As you’ll start to see by the timestamps of things towards the end, I’m running out of ‘new’ stuff and am pulling from the queue now.

As you’ll start to see by the timestamps of things towards the end, I’m running out of ‘new’ stuff and am pulling from the queue now.

A Smattering of Selenium #90

Eventually I’ll get back on the once-a-week schedule.

Eventually I’ll get back on the once-a-week schedule. But not today!

A Smattering of Selenium #89

Figured I would get this out before the computer goes in for surgery.

Figured I would get this out before the computer goes in for surgery.

A Smattering of Selenium #88

Five days and fifty links later…

Five days and fifty links later…

A Smattering of Selenium #87

Avoiding punching things about software packaging by doing the 4th!!!!

Avoiding punching things about software packaging by doing the 4th!!!! smattering in row.

A Smattering of Selenium #86

Look at that! 3 days in a row, and the boy isn’t even gone to school yet and I’ve hit ‘publish’

Look at that! 3 days in a row, and the boy isn’t even gone to school yet and I’ve hit ‘publish’

A Smattering of Selenium #85

Two days in a row! Take that doubters!

Two days in a row! Take that doubters!

A Smattering of Selenium #84

What? Its only been 3 months since the last one.

What? Its only been 3 months since the last one. Sheesh.

Announcing Selenium 2.22

It’s been a while since the last Selenium release, but I’m happy to announce that Selenium 2.22 is now available for download.

It’s been a while since the last Selenium release, but I’m happy to announce that Selenium 2.22 is now available for download. This is a big release for us and features two major changes.

The first is that Selenium 2.22 is the first version that requires Java 6 in order to run. This has been the case for the Selenium Server for some time, but this is the first time the client code has required Java 6. Since Java 5 was “end of lifed” in 2009, we don’t expect this to impact many users.

The second major change is that we are now providing a standalone IE server for use with the WebDriver API, similar to the one used by the chrome driver. You can get it from the normal download page. This will allow us to update our IE support independently of the rest of the library (again, mirroring how Chrome is supported) For now, there’s a legacy fallback mode you can use that’ll use the same DLL we’ve always used which can be activated by setting the DesiredCapability “useLegacyInternalServer” to boolean “true” when requesting your IE Driver instance.

Of course, as well as these major changes, there’s the usual host of updates and improvements. We’re continuing to refine the new SafariDriver, and we’re happy to announce native events for Firefox 12. You can check out the other updates in the CHANGELOG.

Selenium Conf: Community

In this series of blog posts we’ve introduced…

In this series of blog posts we’ve introduced one of the keynotes and talked about some of the great presentations you’ll see at Selenium Conf ’12, but so far we’ve missed the most important aspect of the entire event: you.

For me, one of the highlights of any conference is the chance to meet other members of the community, make new friends and talk about all things interesting (and perhaps even tangentially related to the conference!) To help this process along, we’ve avoided scheduling everything down to the last minute. Instead, we’ve left plenty of time in the B track for an unconference. You’ll get to pick the talks and have a chance to have your voice heard. Last year, there were some great talks on the equivalent track, and I think we’ll see the same this year too!

If the idea of standing up and talking for 30 minutes in front of an audience seems a little daunting, you can dip your toes in the water by volunteering for a lightning talk: 5 minutes of concentrated goodness! Come prepared with a topic and perhaps a handful of slides 🙂

It’s not all formal talks, either. As well as the many members of the selenium community who’ll be attending the conference, there will be many of the core development team. There’ll be a chance to ask Simon why we’re not using git yet, get feedback on some of the ways you’re using Selenium, or just chew the fat. There will be a drinks on the 17th at a London pub, too.

I’m really looking forward to meeting all of you, and hearing the tall testing stories, and finding out how you’re pushing the boundaries. of web automation. If you’ve still not bought a ticket, there’s still time to. Come along and join us! If you’ve already bought your ticket, what kind of things are you looking forward to?

Selenium Conf: Speakers

I may be biased, but I think Selenium Conf ’12 is going to be great.

I may be biased, but I think Selenium Conf ’12 is going to be great. There are talks aimed at every level of Selenium user. We’ve got experience reports, so you can learn from the trials and tribulations of others. There are talks about using Selenium in unusual ways, such as performance testing, or automated security testing, so you can see new ideas and approaches.

There are technical talks, such as the one Jim Evans is giving on lessons learned from developing the IE driver, so you can learn a little bit more about how Selenium works and Luke Daley’s talk about Geb is bound to be fun.

If you’re a fan of Selenium IDE, then the talk on the SauceBuilder will be a “must see”. We’ll also have the current owners of Selenium IDE attending the conference, so you’ll get a chance to pick their brains on the future of the tool.

If you’re someone who enjoys living in the future, then the mobile focused talks, such as Andreas Tolf Tolfson’s talking about OperaDriver on mobile devices, or Dante Briones talking about testing mobile apps on iOS will be interesting. And Jason Huggins will be talking about robots. What’s not to love?

Better still, we’ve left space in the schedule in Track B for an unconference. If you put forward a talk this year that wasn’t accepted, or if you’ve got something you feel the Selenium community should hear, now’s your chance! If you’ve only got a little to say, or just want to make a single point, then you’re really going to enjoy the lightning talks!

All of this is available for the cost of the ticket, which you can still buy. Don’t wait! Come to #SeConf!

Selenium Conf Keynotes: Liz Keogh

The tickets for Selenium Conf ’12 are still on sale for about another week, so there’s still time for you to buy your tickets.

The tickets for Selenium Conf ’12 are still on sale for about another week, so there’s still time for you to buy your tickets. In case you’ve not already gone to the conference site to see the great line up, this week we’ll be letting you know what to expect!

I’m really pleased to announce that Liz Keogh, who is a core member of the Behaviour Driven Development (BDD) community and is one of the stalwarts of the London Agile community, as well as a haiku poet, is going to be one of our keynotes! If you’ve ever seen Liz speak then you’ll know just how much a treat we’re in for. She’s got great things to say and always says them in a thoroughly engaging way.

Liz’s keynote is titled “How to Test the Inside of Your Head”. When we test code and find it doesn’t do what we thought it did, we change it. But, she asks, wouldn’t it be great if we didn’t have to write the wrong code in the first place? In the talk, Liz will show how we can use examples and scenarios to break the models we make inside our own heads, helping us to avoid premature commitments and their follow-through – whether in code or in life.

I’m really looking forward to it! I’m sure you are too.

A Smattering of Selenium #83

Well, might not be in Florida, but how about them juggernaut Blue Jays?

Well, might not be in Florida, but how about them juggernaut Blue Jays?

A Smattering of Selenium #82

Someone explain to me why I’m in Toronto and not Florida?

Someone explain to me why I’m in Toronto and not Florida?

A Smattering of Selenium #81

Its March Break (at least here) which means its also Catch Up Week.

Its March Break (at least here) which means its also Catch Up Week. An extra long Smattering every day!

Selenium Conference 2012

Good news, everybody! Selenium Conf ’12 is getting closer!

Good news, everybody! Selenium Conf ’12 is getting closer! We recently selected the speakers for the conference, and it’s going to be a great mix of talks, spanning the full range of subjects from the very practical to the deeply technical. I’m promised that there will be robots.

Selenium Conf isn’t just about the planned talks, it’s also about the community. On the final day, there will be an unconference, so if there’s something you feel passionately about and feel the world should know, now’s your chance. You’ll not only have a chance to talk to and meet other selenium users, but also many of the core team members.

The conference runs from the 16-18 April in London. Tickets are still available! We’re looking forward to seeing you there.

Support for Ancient Browsers

The first code checked into the Selenium project’s public repository was in November, 2004.

The first code checked into the Selenium project’s public repository was in November, 2004. We’re now in 2012. In the intervening years there have been many browsers released. The last browser we officially stopped supporting was Firefox 2.0, and it’s time to review the list of browsers again.

We periodically review the list of supported browsers as the more changes there are between the oldest version of a browser that we support and the most recent, the harder it is for us to add new features and maintain those that already exist. Balanced against the cost of maintaining the selenium code base itself are your tests; we know that your users might not be updating their browsers to the latest and greatest, and we know that you’ve still got to prove your app works on all the browsers that are important to you. That’s why what’s below is just our plan, and we’re talking about it now to let you have your say.

Looking at the market share of the browsers out there helps us make an informed choice about what it makes sense to support. This will most likely mean:

Firefox: the Firefox market appears to be split between those on 3.6 and those on the new rapid release schedule. Given this, we are thinking of officially supporting Firefox 3.6, and the last, latest and next release of Firefox (currently Firefox 9-11) as well as any ESR releases. The market share for Firefox versions 3.0 and 3.5 is tiny, and the effort to keep them working with selenium is disproportionately high.

Internet Explorer: Despite Microsoft’s efforts, IE 6 is still a popular browser, particularly in the workplace. We will continue to support IE versions 6 and up.

Safari: Safari 3 is now ancient and has been superseded by newer releases. We plan on only supporting Safari 4 and 5.

iOS: We’ll continue to target the most recent iOS release.

Android: Due to some technical limitations in previous Android releases, we are targeting Ice Cream Sandwich and onwards. We will continue to make available the testing framework for Froyo, but will not be making any changes to it.

These are only our plans. If you really need those browsers, and (better!) can help us maintain support for them, then please let us know.

You’ll notice that Opera and Chrome are not listed above. Since Opera and Google now maintain the drivers for those browsers, they are best placed to decide which are the supported versions, but in summary, Google support the major Chrome release channels (stable, beta, dev and canary) and Opera suggest using Opera 11.6+.

A Note About the Cybervillains SSL Certificate

If you’re using Selenium RC to test websites hosted on a secure site (accessed using a URL starting with HTTPS), we strongly recommend that you upgrade to Selenium 2.19. This is because the Cybervillains certificate in previous versions will expire soon, and has been replaced in 2.19 with an updated one. Our thanks to Patrick […]

If you’re using Selenium RC to test websites hosted on a secure site (accessed using a URL starting with HTTPS), we strongly recommend that you upgrade to Selenium 2.19. This is because the Cybervillains certificate in previous versions will expire soon, and has been replaced in 2.19 with an updated one.

Our thanks to Patrick Lightbody, Ivan De Marino and Mark Watson and Neustar for taking providing the new certificate and the patch!

A Smattering of Selenium #80

I should have learned not to boast about getting caught up with links.

I should have learned not to boast about getting caught up with links.

And my post that I’m going to link against is a bit of a rant around how to choose selenium training. Though it has also been pointed out that a lot it applies outside the scope of Selenium as well.

Announcing Selenium 2.19: the Prancing Unicorn release

You might be pleased to hear that Selenium 2.19 has been released (download it from here!).

You might be pleased to hear that Selenium 2.19 has been released (download it from here!). There’s one big user facing changing that we’d like to tell you about: the webdriver-backed selenium can now be used in supported languages.

By providing this capability, it’s possible to migrate from RC to the WebDriver APIs without rewriting all your tests in one fell swoop (which must be a Good Thing, right?) An example of how to use it in Python would be:

driver = RemoteWebDriver(desired_capabilities = DesiredCapabilities.FIREFOX)
selenium = DefaultSelenium('localhost', 4444', '*webdriver', 'http://www.google.com')
selenium.start(driver = driver)

Provided you keep a reference to the original webdriver and selenium objects you created you can use the two APIs interchangeably. You’ll see that the magic is the “*webdriver” browser name passed to the selenium instance, and that we pass the webdriver instance when calling start().

We hope you like it!

PS: I have no idea why this is the Prancing Unicorn release, but it’s been a while since we named one 🙂

A Smattering of Selenium #79

The only links left now are ones currently open in tabs right now.

The only links left now are ones currently open in tabs right now. Hurray!

And my post this edition is WebDriver and Meta Tags.

A Smattering of Selenium #78

Look! A light at the end of the tunnel!

Look! A light at the end of the tunnel!

And today’s post of mine is WebDriver and Cookies which explains how, well, cookies and webdriver play together.

A Smattering of Selenium #77

No. Really. A Smattering every day this week and I’ll have the link queue cleared.

No. Really. A Smattering every day this week and I’ll have the link queue cleared.

Go!

One thing I have done in these Smatterings is to not link to my own stuff, but am going to start linking to an article or two at the bottom of the Smatterings (unless there is general community backlash against the idea).

A Smattering of Selenium #76

Post ten links, find seven more to add to the queue.

Post ten links, find seven more to add to the queue.

A Smattering of Selenium #75

And home. Which mean 100% more internets!

And home. Which mean 100% more internets! Or at least 98% more.

  • As things like native-driver become more prevalent, knowing how to do Continuous Integration for iOS projects with Jenkins CI will become more important
  • Chocolatey seems like a nice and big step towards managing Windows build slaves
  • SST (Selenium Simple Test) comes out of Ubuntu and has a quick introductory screencast.
  • Automate Salesforce Config Changes with Selenium is a contest. But only for Java so I have no interest in it. Submissions are due in two days. Could be fun.
  • cssify is a great little app for converting xpath to css. Now to see what sorts of devious xpath we can put in and blow Santi’s mind with bug reports. 🙂
  • Continuous Delivery with Bamboo Stages – I normally call these ‘chains’ but nicely shows how to chunk the march to production. It also cracks me up that the corporate twitter feed has the upgraded beer cart photo in the sidebar right now.
  • One talk I skipped at Codemash the other week was on Apple’s UI Automation stuff. I suspect this is the low-level implementation of things like native-driver which is valuable to have at ones fingertips.
  • While not automation related directly, if you are automating Android stuff you should also be looking at the Android Design site to understand the idioms and such that the platform thinks you should be using
  • The road to faster tests is a fantastic write-up of an investigation into why their scripts were so slow. I’ve been doing this a lot recently. Well, investigating slowness at least.
  • I actually got the above link from How We Reduced Our Rails Test Runtimes By 10x which is an even larger investigation write-up.

A Smattering of Selenium #74

It is kinda hard to do these without reliable internet… dear hotels, fix. your. internet.

It is kinda hard to do these without reliable internet… dear hotels, fix. your. internet.

A Smattering of Selenium #73

Two Ruby gems…

Selenium 2.16 Released: Welcome to 2012!

It’s been a while since we last blogged about a Selenium release.

It’s been a while since we last blogged about a Selenium release. Since the release of 2.0, we’ve been attempting to give you a fresh and shiny Selenium release every week (though, in reality, we’re managing to get you one every 10 days on average). This allows you to pick the version that’s most suitable for you and your teams, but provides a route for quick feedback on how we’re doing. I think we’ve now ironed out a lot of the initial problems and bumps we ran into, so we are extremely proud to announce the release of Selenium 2.16.

If you’re unsure about what’s been happening since the last time we announced a release here, the best place to look is our changelog (http://selenium.googlecode.com/svn/trunk/java/CHANGELOG). The most notable feature in 2.16 is better support for Firefox 9, but if it’s been a while since you’ve last updated, we’ve been beavering away on bug fixes and making existing features work as flawlessly as possible. Now’s a great time to update!

One of the key tools we use for assessing whether it’s okay to push a release is our continuous build. This watches for each and every change made to the project’s source code, and runs an increasingly vast suite of tests to verify that nothing has broken. Our friends at Sauce Labs have been extremely generous in providing support for this, and have worked closely with us to make the build as stable and quick as possible. Special kudos and thanks to them!

A Smattering of Selenium #72

January means its time to escape from under the deadlines I found myself under during December so some of this stuff is a month old (or older!).

January means its time to escape from under the deadlines I found myself under during December so some of this stuff is a month old (or older!). Hopefully it is still interesting though.

Blog Posts - 2011

Announcing Selenium Conf ’12

The community around Selenium is the thing that really makes the Selenium project special.

The community around Selenium is the thing that really makes the Selenium project special. Last year, we held the first official Selenium Conference in San Francisco, and it was both great fun and a huge success. It is therefore with great pleasure that we are announcing Selenium Conf ’12! It’ll be taking place in London from the 16th to the 18th April, and we’re really looking forward to seeing you all there!

If you’ve been following @seleniumconf on Twitter, you probably already know that we have some early bird tickets available and the Call for Papers is open. We’re looking for everything from lighting talks, through traditional presentations, to half-day long workshops on anything that uses Selenium in any way, including building on the Selenium WebDriver APIs (so talks about Watir would be welcome too!). It’ll be a chance to show off what you know and learn from the experts. If you get a quiet moment during the Christmas break, why not put forward a talk? If you’re not a talker, but can help us with sponsorship, we’d love to hear from you too!

Just as last year, the workshops will be happening on the first day of the conference, but places are limited. We plan on running a total of four workshops across two tracks, meaning each workshop is half a day long; a fantastic opportunity to take a deep dive into a particular area of the project. The early bird tickets give you access to them, as well as the conference itself on the 17th and 18th.

The conference will consist of a main single track with selected speakers, with break out rooms being dedicated to an unconference, the contents of which will be decided by attendees. It’ll be your conference, help us make it brilliant 🙂

A Smattering of Selenium #71

Looking like there might also be one later in the week too…

Looking like there might also be one later in the week too…

A Smattering of Selenium #70

That’s it for this week.

That’s it for this week. 🙂

A Smattering of Selenium #69

In honor of this edition I provide… …in which I also date myself.

In honor of this edition I provide…

…in which I also date myself.

A Smattering of Selenium #68

Its been almost a month, so time for a flurry of Smatterings.

Its been almost a month, so time for a flurry of Smatterings.

  • Maven has a bad reputation in some circles (ignoring for a second that you are using Java…), but should you be using it the QuickStart Archetype looks interesting.
  • Why Your Monitoring Is Lying To You talks about types of logging which are valuable both from a Continuous Delivery perspective and for checking the health of your application during long script runs.
  • I still maintain that they who nails QC integration with/for Se will get buckets of money from people. Here is one attempt at it: Quality Center Integration
  • Good to Great Python reads is I think now on my list of things to hand new (and seasoned) Python folks.
  • Test Harness Design Patterns is from 2005 but still interesting.
  • jacuzzi is superficial wrapper over RSpec + Capybara + Selenium test setup and execution
  • Because I don’t already have enough backlog on videos, the 2011 Jenkins User Conference videos are now online. Though behind a registration wall. I know why companies do this, but boo on you.
  • This is how you publish videos from a conferences – GTAC 2011. Note that this is how SeConf did it too..
  • Awesome Page Objects In Testing uses Bing as its example to explain Page Objects in Ruby
  • Ignore the Se-IDE suggestion, but Improving Your Drupal Testing Process has an ‘assumed to work’ list specifically spelled out. Too often this is not explicitly made — and agreed upon as acceptable risks by stakeholders

A Smattering of Selenium #67

Spinach is a Cucumber-esque BDD framework that was advertised on twitter as having ‘less regex magic’.

Selenium 2.9 Released

We’re pleased to announce the release of Selenium 2.9.

We’re pleased to announce the release of Selenium 2.9. As well as improving the stability of Grid under high loads, we’ve added an experimental (and temporary!) feature that allows the Firefox driver to use a different mechanism for determining when a page is loaded. This is designed to handle the case where the driver appears to hang, as it’s waiting for all incoming requests to complete before continuing. How to enable this mode is listed in the changelog.

This release also includes an updated Android driver, allowing your tests to run on Ice Cream Sandwich devices.

A Smattering of Selenium #66

Aside from one of the dog’s tummy making noises that imply a big mess to clean up later, this scheduling thing seems to be working out.

Aside from one of the dog’s tummy making noises that imply a big mess to clean up later, this scheduling thing seems to be working out.

  • Heard someone talk about doing bitmap comparisons last week somewhere. Adaptive Images tricks I suspect are going to become more commonplace. Good luck with that. Se is best at interaction, structure and content checks; not does-it-look-the-way-some-human-intended. Robots where robots should be used. Humans where humans should be used.

  • Interacting with a Javascript confirmation from Selenium in Cucumber

  • Converting Selenium waitForCondition to WebDriverWait sends you along the path to understanding Waits in WebDriver

  • Splinter seems like a wrapper about the Python WebDriver bindings

  • Making a Mockery of TDD starts with To be a successful mockist, you must dislike mocks. which I think is just as important when doing Se. The res of the article is good too.

  • Integration Testing with RSpec, Capybara, and Selenium includes this gem

    Integration tests can be brittle if they know too much about how those components work. Proper integration tests use your application as a black box. They should know as little as possible about what happens under the hood, they’re just there to observe and interact with the interface.

  • I seem to think I already posted this, but the search isn’t finding anything. Here is a visualization of the commits to Se.

  • The GoogleWebmasterHelp channel on YouTube is full of ideas that you could include in your scripts. At least from an SEO perspective. And Google SEO at that.

  • The theme this week seems to be GIL. So here is About concurrency and the GIL which for once is about Ruby.

  • The whole ‘Facebook switching from Watir’ thing produced at least one good rebuttal; Facebook, Watir And Testing

A Smattering of Selenium #65

Trying something new; queuing up the catch-up post while I have time to catch-up.

Trying something new; queuing up the catch-up post while I have time to catch-up.

A Smattering of Selenium #64

How did I fall behind again already?!?!

How did I fall behind again already?!?!

Selenium 2.8 Released

In keeping with our (roughly) weekly releases, Selenium 2.8 was released today (and on Maven too), with a huge list of bug-fixes!

In keeping with our (roughly) weekly releases, Selenium 2.8 was released today (and on Maven too), with a *huge* list of bug-fixes! As well as improved stability, if you’re using the Java API, this release adds the ability to upload files to a RemoteWebDriver server (see RemoteWebDriver.setFileDetector (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html#setFileDetector(org.openqa.selenium.remote.FileDetector))).

Particular thanks have to go out to our two newest committers, Alexei Barancev and Ajay Kemparaj, for the copious bug-fixes they’ve contributed!

We’re already hard at work getting 2.9 ready for next week with even more more bug-fixes – watch this space!

A Smattering of Selenium #63

Watir to WebDriver: Unit Test Frameworks – Well, its ‘big’ news.

A Smattering of Selenium #62

All opinions, all the time…

All opinions, all the time…

A Smattering of Selenium #61

‘These are the people in your neighbourhood…’

‘These are the people in your neighbourhood…’

A Smattering of Selenium #60

This instalment of catch-up week is brought to you by the letters C and I.

This instalment of catch-up week is brought to you by the letters C and I.

A Smattering of Selenium #59

Its been a month and a half since the last one of these, and the volume of links I have collected illustrates that.

Its been a month and a half since the last one of these, and the volume of links I have collected illustrates that. So this week is now a cleanup week.

Selenium 2.6 Released

If you’ve been watching this blog carefully you’ll have noticed that the last release announcement we made was for 2.3…

If you’ve been watching this blog carefully you’ll have noticed that the last release announcement we made was for 2.3, so it may come as a surprise that we’re announcing that 2.6 has been released (even on Maven!). Don’t worry: 2.4 and 2.5 were released on time and without muss or fuss. 2.6, on the other hand has been almost three weeks brewing.

Selenium 2.6 introduces a raft of improvements and stability fixes. Kristian Rosenvold has been working wonders on Grid 2.0, addressing many reported issues and cleaning up the implementation. In the finest tradition of the project, I now owe him a dinner for his hard work. Thank you, Kristian!

For those of you not using Grid, as well as the normal suite of bug fixes, Selenium 2.6 now supports all versions of Firefox from 3.0 up to 7. For those of you using Java, there is an ExpectedConditions (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html) class that supplies many useful criteria when using the [Wait](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/Wait.html) and WebDriverWait (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html) classes. The packaged version of the OperaDriver has also been bumped to 0.7.2, which works hand-in-hand with Opera 11.5 and above.

We’ve also spent a considerable amount of time and effort working out the kinks in the Advanced User Interactions API (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html). We’d love to hear how you’re using it, and what the gaps are that you can see. For more details about what’s changed, have a look at the release notes.

The release frequency has dropped recently, but we’re planning to head back to weekly releases from here on in. 2.7 is just around the corner!

A Smattering of Selenium #58

And here we go again with more links than I thought I had collected…

And here we go again with more links than I thought I had collected…

A Smattering of Selenium #57

Phew. The links made it through the Lion installation.

Phew. The links made it through the Lion installation.

A Quick Survey on Features

Rather than surprising the general community in ways that we have become somewhat known for, I figured I would try something new.

Rather than surprising the general community in ways that we have become somewhat known for, I figured I would try something new. Actually asking about usage of things before changing them in fundamental ways.

To this end, I have created a quick(!) survey about changes that are under consideration regarding UI-Maps and how Se-IDE is opened.

The survey is only two questions, so I’m hoping for a large response. I’ll post the results next Monday (August 8, 2011).

One more time for good luck, the survey is over here.

Selenium 2.3 Released

Continuing our new tradition of weekly releases, we’re very pleased to announce the release of Selenium 2.3.

Continuing our new tradition of weekly releases, we’re very pleased to announce the release of Selenium 2.3. The release notes for this version are pretty slim:

  • Better detection of clickable areas in Firefox.
  • Merge of Google-contributed code into the underlying javascript libraries used by the drivers.

We’ve also fixed bugs, one of which was being a nuisance for users of IBM’s JRE. The complete changelog can be found in the zipped downloads or in our source tree (http://selenium.googlecode.com/svn/trunk/java/CHANGELOG).

If you’re a Chrome user, then it’s a great idea to head over to the Chromium project’s download page to pick up the executable used by the ChromeDriver. It’s recently been updated, and now includes support for handling alerts and prompts! Thanks, Google!

A Smattering of Selenium #56

Safari is starting to whinge about how many tabs I have open which means it is time for another post.

Safari is starting to whinge about how many tabs I have open which means it is time for another post.

Selenium 2.2 Released

The feedback from the last release was heard loud and clear: little and often it is!

The feedback from the last release was heard loud and clear: little and often it is!

We’re proud to announce the release of Selenium 2.2. What’s new this time? For many users, this is simply a bug fix release as there are no new major features. One thing you might appreciate is better exceptions (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/IllegalLocatorException.html) being thrown when xpath searches return something other than a web element when using the WebDriver APIs, and we’re continuing to tweak the emulation of user events.

If you’re a .Net user, there is now an official NuGet package, and if you’re a maven user then rest assured the release is heading to the central repo as quickly as we can manage.

A Smattering of Selenium #55

Last week we released Se-IDE 1.1.0 which now features WebDriver formats and Se 2.1.0 was released about an hour ago.

Last week we released Se-IDE 1.1.0 which now features WebDriver formats and Se 2.1.0 was released about an hour ago. Simon will post something shortly-ish on what’s changed.

  • I haven’t messed around with HTML5 goodies yes, but fake-html5 seems like it could be interesting.

  • The Yii framework has grown WebDriver support. Now if only there were not two competing PHP implementations for them to have to choose from…

  • If you are using Python’s native packaging system to share your framework, then Lies, More Lies and Python Packaging Documentation on `package_data` could spare you some headache

  • This presentation kinda needs someone in front of it to make it fully understandable, but they chose great photos so I’m including it.

    Selenium for Designers

    View more presentations from Fabio Fabbrucci

  • Sikuli on Selenium- A demonstration of automation using selenium and Sikuli (such as flash uploader) uses Sikuli where one might normally have used AutoIT but can’t get a handle onto the window. ….And with that use case for Sikuli arrives.

  • Ever wondered what you get when you cross alcohol and Se? Wonder no more.

  • Visual Studio seems like overkill for Python work, but if thats your cup o’ tea then Python Tools for Visual Studio is for you.

  • Creating users for the duration of a run is a problem a lot of systems have. But not with Facebook which has a Test Users API it seems. Don’t forget that you can use this idea internally in your apps too.

  • With the release of Selenium 2, the project is focuses not on being a browser test platform, but a browser automation one. The difference can be subtle but one area of big difference is in terms of network information details. Selenium RC has support for it, but Selenium WebDriver does not. And of course the latter is the future of the project. 99% of the time, you really don’t need the network information, but in that other 1% the official response to the problem is use something like the BrowserMob Proxy which also had Ruby bindings released this week.

Selenium 2.1 Released

Now that Selenium 2 has been released, one of the goals of the project is to provide regular updates to our users and the community.

Now that Selenium 2 has been released, one of the goals of the project is to provide regular updates to our users and the community. The aim is for these updates to be small and manageable, incrementally addressing issues and problems raised by you. Selenium 2.1, which is launched today, marks the first of these regular, small releases.

Selenium 2.1 is largely focused on improving Grid with a host of minor improvements including better tracking of “orphaned” browser instances. There are also some bug fixes in the Firefox and IE WebDrivers, particularly when dealing with elements that are just off screen, and in making the Selenium RC emulation in the Java bindings more robust when confronted with pages that haven’t started loading.

As you can see, this is a “bite size” release, but we’d love to know: would you prefer these small, swift releases or larger ones? Please answer in the comments, or on the mailing list!

A Smattering of Selenium #54

Two Smatterings in two days?!!?

Two Smatterings in two days?!!? That never happens. Well, except when I get behind and have a metric tonne of links queued up.

A Smattering of Selenium #53

Well, since the last Smattering there hasn’t been much in the community.

Well, since the last Smattering there hasn’t been much in the community. Oh. Well, except for hitting the 2.0.0 milestone. Which seems like a good time to remind people that:

  • Selenium is the project name
  • Selenium 1 is a project version
  • Selenium 2 is a project version
  • Selenium Remote Control (RC) is an API name
  • Selenium WebDriver is an API name
  • A person upgrades from Selenium 1 to Selenium 2
  • A person migrates from RC to WebDriver

And with that soap boxing, here are some links for your consumption.

Selenium 2.0: Out Now!

We are very, very pleased to announce the release of Selenium 2.0.

We are very, very pleased to announce the release of Selenium 2.0. If you’ve been waiting for a stable release since 1.0.3, now’s the chance to update. And if you do, what will you find?

For users of Selenium 1, this is a drop-in replacement. You’ll find support for modern browsers such as Firefox 5 and IE 9, as well as a wealth of bug fixes and stability improvements. That’s one reason to update, but what other reasons are there?

The big feature of this release — and the reason for the new version number — are the new WebDriver APIs for Python, Ruby, Java and C#. These have been in development for over four years, and are already widely used, trusted and depended on. The WebDriver APIs have been written by developers familiar with each language, so they feel like they belong there. We’re very proud of them, and hope you enjoy using them.

Support for WebDriver is also baked into Opera and Chrome, and we’re working closely with Mozilla to ensure that their browsers also support it. Looking to the future, WebDriver also works on both Android and iPhone, allowing you to test your sites on the next wave of the Web.

As well as support by the browser vendors, WebDriver also provides excellent emulation of user inputs using something we call “native events”. Normal browser automation frameworks, including older versions of Selenium, simulate user interactions via the Javascript engine of the browser. This approach is error prone as each browser has its own quirks. “Native events” are fired at the OS level instead, avoiding a large amount of browser-specific complexity.

Advanced Selenium users will be pleased to hear that the standalone selenium server also includes support for distributed testing via Selenium Grid. This new Grid implementation supports testing using both the original Selenium API and WebDriver, and has been developed as a collaboration between the current Grid maintainer and an engineer from eBay.

We’re working hard to ensure that Selenium IDE also supports all these new features and APIs. IDE version 1.1.0 should be released next week, with support for exporting to the four main languages supported by WebDriver. Please keep an eye on this blog for announcements! There will also be follow up posts, exploring and explaining each of the new features, and providing you with more information.

Of course, Selenium 2.0 is a major milestone, but we’re not done yet. This release marks the point where we expect our APIs to change very little from now on and where we believe it’s a solid release. Like all software, it has niggles and bugs, and we’ll be focusing on addressing these as your feedback comes in.

As a personal note, I’d like to say thank you to each of the many people that have worked so hard to make this the best Selenium version yet. Not only the developers but also the team working on making our documentation clear and easy to read, everyone who’s taken the time to report bugs, and also to you; our users and community. The project is great fun to work on, and you’re the reason for that. Thank you!

New ChromeDriver

The ChromeDriver is composed of two major pieces.

The ChromeDriver is composed of two major pieces. There are the client APIs, which you use in your tests, and there’s a server part, which the client APIs know how to start and run and which takes the form of an executable called “chromedriver”. The server piece is maintained by the Chromium team, and they’ve just released a new version, with support for Chrome 14 and with bug fixes. If you’re using Selenium 2.0rc3 and you’re also using the ChromeDriver, head over to the Chromium project’s download page for the latest and greatest!

Selenium IDE 1.0.12 – now with Firefox 5 support

Last week we quietly released Selenium IDE 1.0.12 on the website.

Last week we quietly released Selenium IDE 1.0.12 on the website. It has Firefox 5 support along with other improvements. See the release notes and unofficial announcement. Download it here or ask Firefox to check for plugins updates.

And for those who did not download 1.0.11 (it was not pushed through the update system) you will want to read about the formatter change that landed.

A Smattering of Selenium #52

Welcome to the Canada Day edition of the less-than-weekly-now collection of Selenium / Automation links that is the Smattering of Selenium.

Welcome to the Canada Day edition of the less-than-weekly-now collection of Selenium / Automation links that is the Smattering of Selenium.

Selenium 2.0rc3: The “Next One’s The Big One” Release

When we pushed the 2.0rc1 live, we really hoped that the next release would be 2.0 final.

When we pushed the 2.0rc1 live, we really hoped that the next release would be 2.0 final. We very quickly got some feedback that encouraged us to push a 2.0rc2. Now, after just under three weeks, we’re launching a third and final release candidate. You can download it from the Selenium HQ site or directly from Google Code.

We think we’ve addressed many of the common issues, added some polish and added a host of bug fixes and minor changes, and we hope to hear your feedback! The following headline changes have been made in Selenium 2rc3:

  • The deprecated RenderedWebElement interface has now been removed. Most of the functionality has been moved to either WebElement (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html) or to the Actions (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html) class.
  • The deprecated WebElement.getValue() method has been removed. Use WebElement.getAttribute(“value”) (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String)) instead.
  • After some debate in the team, WebElement.setSelected (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#setSelected()) and “WebElement.toggle” have been deprecated. They will be removed in the final release.
  • Thanks to the hard work of Mozilla engineers, we now offer Firefox 5 support.
  • The Opera driver, developed by the lovely chaps at Opera Software, is bundled with this release.
  • Improvements in the way that mouse interactions are simulated, particularly when elements are outside the visible area of the page.

As with almost all releases, there are still some issues left to resolve, but we’re working hard to make Selenium 2.0 as good as it can be.

A Smattering of Selenium #51

Two big releases last week…

Two big releases last week…

  • Selenium IDE 1.0.11 was released — with Firefox 4 support. Finally. And just in time for people to start agitating for Firefox 5 support. official announcement, unofficial announcement
  • Selenium 2 RC1 (and RC2) were released which marks the first official release of the new in-server grid behaviour. Even if you are not using the WebDriver API or grid functionality, you should be updating your environment to this. official announcement

And the rest.

  • Python’s super() considered super! begins with If you aren’t wowed by Python’s super() builtin, chances are you don’t really know what it is capable of doing or how to use it effectively. and goes from there.

  • Want to know what the top 100 issues that have been logged for Se according to the number of stars that have been given them? Click here and wonder no more

  • [Successful] automation is code, so Why Code Readability Matters is important. Especially since a large body of people writing automation would not consider themselves programmers so missed a large part of the implicit learnings that comes with it.

  • Tech Talk: Michael Deerkoski (Flickr) — “Continuous Deployment at Flickr” from Talks at LinkedIn on Vimeo.

  • The State of Ruby and Testing has graphs and such around some survey results around testing in the Ruby community. What is it with Ruby and their love of testing frameworks? 🙂

  • The future of testing Se-IDE lies with Mozmill. If you are interested in knowing how to run its own tests see Running the Selenium IDE Mozmill tests — and then start to add your own.

  • What is the most under-used part of Se you ask? Rollups! Which could be thought of as macros and an example can be found here. Rollups btw, will be moved into an Se-IDE plugin at some point.

  • How can I learn to automate my testing using Selenium? is designed to be Google link-bait and I can’t help but think that is a good thing. I would probably have switched Step 4 at the bottom to be ‘Create Page Objects with the help of the generated code’ or something like that. It’s not really a ‘Best Practice’ to take the raw generated code and run it anymore — if it ever really was.

  • When most people think of “the browser’s cache” they envision a single map of HTTP requests to HTTP responses on disk (and perhaps partially in memory) from Chrome’s 10 Caches shatters another idea I held. Sigh.

  • Hey, where’s my unashamedly ugly wait asks the question, then answers it. Sorta. Of course, the answer is in Java so is still ugly…

  • So does Se have a story around Symbian? Asked due to Top Smartphone Platforms in Europe

  • The depth and breadth of Python ends with Maybe I should just cancel all weekly meetings and sign off from all mailing lists and focus on two things: meeting Python users and coding. — more people should do this I think. Well, at least the first part.

  • From a SeConf2011 Lightning Talk is the Annotated Smattering of Selenium Tips

  • Integrating JUnit tests with HP/Mercury Quality Center – part one, part two

  • The Apple Testing Problem raises a good point (from Gartner! I know!) — of course, they don’t talk about the cause, which is Apple’s lack of participation in the outside world. It would be great if they would help with the automation driver for their core browser tech, but so would a lot of things that don’t seem to be likely.

  • I usually don’t link to my own stuff here, but I did a webinar for PustToTest last week and the video of it is now online. (Webinars are weird.)

Selenium 2.0rc2: The Better Working Release

You win some and you lose some.

You win some and you lose some. We’d been really pleased to get Selenium 2.0rc1 out, so we were pretty disappointed to hear that some of you were running into problems with the Java version of the IE driver not launching IE sometimes. That’s definitely not good, so we fixed the problems and have released Selenium 2.0rc2. It’s the same as rc1, but with fewer problems 🙂

We’re still very keen to hear your feedback! Let us know what you think!

Selenium 2.0rc1: The Grid Release

We’re very happy to announce the first Release Candidate for Selenium 2, available for Java, C#, Ruby and Python.

We’re very happy to announce the first Release Candidate for Selenium 2, available for Java, C#, Ruby and Python. The API has been stabilised and the functionality needed for the final 2.0 release is mostly in. We’re going to be working hard to get there as soon as possible, but now’s the perfect time to test the waters and provide us with any feedback you may have! Grab the downloads from the site!

Highlights:

  • Grid 2: A major feature of this release is Grid 2, an implementation of the Selenium Grid that supports WebDriver’s wire protocol, allowing tests using Selenium WebDriver to be distributed through it. There are some docs to help you get started on the wiki.
  • New ChromeDriver: Following a complete rewrite of the ChromeDriver, Selenium 2 is now supported natively by the Chrome browser itself. In order to use this, you must download the chromedriver executable from the Selenium project site.
  • OperaDriver support: We’ve bundled the most excellent OperaDriver into the release to make it easy to get started testing with Opera.
  • Support for native events in Firefox 4.
  • Advanced User Interactions: An API that allows you to model complex user interactions, such as clicking on an element, holding the shift key, clicking on three more, and then dragging the four elements to a final destination. The entry point to this API is the Actions (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html) class.

We’ve also deleted all methods that were deprecated in 2.0b3 and have marked a number of methods and classes (notably RenderedWebElement (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/RenderedWebElement.html) and WebElement.getValue (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getValue())) deprecated. These will be deleted in the next release.

Known issues:

  • Native events on Linux may not work properly on tests that include alerts and prompts.
  • Mouse actions using the Advanced User Interactions API may not work properly for elements that have to be scrolled into view.

We plan on making our releases more frequent in the run up to 2.0final and polish off the bugs and issues. Stay tuned! This is going to be fun 🙂

Selenium IDE 1.0.11 – Now with Firefox 4 Support!

We know that you have been waiting eagerly for this release and you have to wait no more.

We know that you have been waiting eagerly for this release and you have to wait no more. Selenium IDE 1.0.11 is now here and you can get it from the seleniumhq download site. The update will also be pushed to you automatically over the next couple days.

Other things of note around this release
Release Notes
Where to log bugs
Welcome Selenium IDE 1.0.11 (with Firefox 4 support)

A Smattering of Selenium #50

Half a century!

Half a century!

And because I am late doing this, the Selenium Test Day for Addons.Mozilla.org — which is today! gets top billing. Its actually going on Right Now. Looking to practice script writing and/or up your profile? This is a great way.

And now for the usual stuff.

A Smattering of Selenium #49

Here is the next 10 links as I play catch-up.

Here is the next 10 links as I play catch-up.

A Smattering of Selenium #48

It’s catch-up time again! Here is the first 10.

It’s catch-up time again! Here is the first 10.

A Smattering of Selenium #47

Nothing says ‘Hello Monday!’ like a batch of links and a wife with a kidney stone.

Nothing says ‘Hello Monday!’ like a batch of links and a wife with a kidney stone.

A Smattering of Selenium #46

Selenium IDE on Firefox 4 is Available for Testing!

Let’s put Selenium IDE on Firefox 4 is Available for Testing! Now! outside of the normal list. We have a ‘working’ version of Se-IDE for FF4, but don’t really have too too much faith in it (or at least I don’t). Please help test it.

A Smattering of Selenium #45

So of course by now everyone has seen Selenium 2.0b3: The Next Gen Browser Release and upgraded their rigs.

A Smattering of Selenium #45

So of course by now everyone has seen Selenium 2.0b3: The Next Gen Browser Release and upgraded their rigs. Expect Selenium IDE at some point in the next week with support for FF4 — if you just. can’t. wait. then you could try the bleeding edge for yourself. Logging any bugs you find; of course.

Oh, and there is the whole Selenium Conference next week.

But aside from that, here are the things I have collected.

Selenium 2.0b3: The Next Gen Browser Release

It’s been about 5 weeks since the release of beta 2, so we’re very pleased to announce that Selenium 2.0b3 has just been released.

It’s been about 5 weeks since the release of beta 2, so we’re very pleased to announce that Selenium 2.0b3 has just been released simultaneously for Java, .Net, Ruby and Python. You can download it from Selenium HQ or from the Google Code site. This release focused on providing excellent support for the next generation of browsers, particularly IE 9 and Firefox 4, and we think you’ll like what you’ll find.

  • Restructured documentation at Selenium HQ
  • An improved user interaction API
    • Including experimental IME support on Windows.
  • Alerts and prompts handling for IE.
  • Marked the following APIs as obsolete in .Net:
    • IRenderedWebElement.Hover()
    • IOptions.Speed
  • Even more improvements to the Java webdriver-backed selenium
    • We’ll document the migration path before 2.0b4 is out!
  • A significantly faster Android Driver (http://selenium.googlecode.com/files/android-server-2.0b3.apk)

As well as these changes, there’s also the regular clutch of bug fixes and tweaks. For the number crunchers, there were a total of 331 changes that landed in the 5 weeks since the last release, with the 5 most active contributors working on each of the different languages supported by Selenium.

In addition to the enormous thanks that go to the developers, I’d like to add a big thank you to the Mozilla engineers who chipped in on the IRC channel at the last minute to help us work through some issues with Core. We’d not have been able to get this release out when we did without their help. Thank you Mozilla!

The next release will be focused on stabilization work, reducing our bug count and adding support for Grid 2.0.

A Smattering of Selenium #44

What started out as the week of Capybara rounded itself out fairly nicely

What started out as the week of Capybara rounded itself out fairly nicely

A Smattering of Selenium #43

The big thing in the new last week was ColdFusion. Yes, ColdFusion.

A Smattering of Selenium #42

Is this week’s post the Answer to the Ultimate Question of Life, the Universe, and Everything Selenium?

Is this week’s post the Answer to the Ultimate Question of Life, the Universe, and Everything Selenium?

Selenium 2.0b2 Released

We’ve just released Selenium 2.0b2.

We’ve just released Selenium 2.0b2. If you’re the impatient sort who loves to have the latest and greatest, head over to the download site and get it while it’s hot. If you’re a Python user, then all you need to do is a simple “pip install -U selenium”. Ruby users can, as ever, simply run “gem install selenium-webdriver”. Maven users need to wait just a little bit longer: we’re going to be checking the release in ASAP.

Between beta 1 and beta 2, we held a week-long Bug Bash, during which we closed a significant number of bugs. From a user’s perspective, other highlights include:

  • A more stable, capable iPhone driver.
  • Updated Android driver.
  • Improved python bindings for Selenium WebDriver. The namespace is now “selenium.webdriver”
  • Added Selenium.getCssCount (http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getCssCount(java.lang.String)) to mirror “Selenium.getXpathCount”
  • WebElement.getText() (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getText()) performs more consistently across different browsers.
  • Mono users can use the .Net bindings
  • Continued to improve the WebDriverBackedSelenium (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html). If you’re looking to migrate from Selenium 1 to Selenium 2, and want to take your time, this is a useful stepping stone.
  • Reworked the Advanced User Interactions APIs. The big change is that the WebDriver APIs no longer rely on classes from the AWT.
  • .Net users now have more support classes, to make writing tests less tiresome.
  • The remote webdriver makes better use of sockets, which improves stability and scalability on Windows.
  • Started to add support for driving multiple IE instances. This is considered experimental, but we’d love to hear it’s working for you!

If you’re interested in the guts of Selenium 2 and how it worked, then you might find these interesting:

  • Continued reworking the IE and iPhone drivers to use the Automation Atoms.
  • Reworked the structure of the source tree to be more language focused.
  • We have the skeleton of a webdriver-backed selenium for Python.

As you can see, this is a big release. Beta 3 should be out a lot more quickly, and will be focusing on improving support for IE 9 and Firefox 4. Over the course of the 2.0b3 development, we shall also be removing as many deprecated methods as possible, so be sure to remove deprecation warnings from your builds when using 2.0b2!

A Smattering of Selenium #41

There isn’t an official announcement anywhere (yet) but Selenium 2.0b2 was released a couple hours ago.

There isn’t an official announcement anywhere (yet) but Selenium 2.0b2 was released a couple hours ago. Time to upgrade all your servers. Beta 3 is going to focus on IE9 and FF4 support.

Meanwhile…

OperaDriver Released

I think the word that I’m looking for is “wow”.

I think the word that I’m looking for is “wow”. Perhaps “Wow!” would express the concept a little more clearly. Perhaps “WOW!” would be even clearer. Yes, definitely. “WOW!” is a good way of describing this.

Before Christmas, Opera Software announced a pre-release of OperaWatir, an implementation of the Watir 2 API. What you may not know is that Watir 2 rests on the same WebDriver core as Selenium 2. Today, Opera made the source of the OperaDriver available on github: https://github.com/operasoftware/operadriver

This is “WOW!” It’s the first time a browser manufacturer has released their own implementation of the WebDriver APIs, and it shows how much Opera values test automation. Selenium 2 users now have an easy way to test that their sites work with Opera.

What are you waiting for? Go! Download! Test!

A Smattering of Selenium #40

You would think by now that I wouldn’t be surprised by the number of links I collect in a week.

You would think by now that I wouldn’t be surprised by the number of links I collect in a week.

Selenium Joins the Software Freedom Conservancy

It doesn’t seem that long ago that we announced on the mailing list that the Selenium project planned to join the Software Freedom Conservancy.

It doesn’t seem that long ago that we announced on the mailing list that the Selenium project planned to join the Software Freedom Conservancy. I’m very pleased to announce that as of Friday, 21st January, our application was approved. We’re now under the aegis of the SFC.

From most people’s perspective, this won’t make much difference: you’ll still be able to view the documentation and download the latest versions of Selenium from Selenium HQ. Development will continue to use Google Code’s (http://selenium.googlecode.com/) code hosting and issue tracking. We are now, however, part of a formal non-profit organization, which means that a number of issues, such as how to handle revenues from adverts on our sites, become clearer and more transparent.

There are more details about what this means in the SFC’s announcement and their list of membership benefits. The bottom line is that this is a major milestone in Selenium’s growth and ensures that as we continue to grow our user base and introduce new features and projects, we’ll have strong support and backing from a well-respected Open Source organization.

A Smattering of Selenium #39

Hey look! All caught up — only took a month…

Hey look! All caught up — only took a month…

  • My opinions on Continuous Deployment are pretty widely known, but the IMVU folks certainly have a lot of neat tricks to ‘borrow’. Such as Buildbot and Intermittent Tests
  • Dealing with an API that returns XML? Your scripts don’t care about the readibility, but it helps you as the human if it is formatted pretty. xml formatter is a glorious time save in that case.
  • Who would have predicted this… Perl stuff
  • Since Se is using Sizzle now for locators, comes a tipnever do things like $(‘form *’). This is crazy costly, because Sizzle works from right to left. Will grab all elems first.. Not sure of the accuracy, but it makes sense.
  • Part of the debate when doing BDD and TDD is the overlap that [naturally] occurs; Duplication between BDD and Unit tests addresses it, partly be reframing the question.
  • webkitdriver is a project that aims to provide a WebDriver implementation for a light-weight in memory Web Browser
  • This week’s Selenium killer is PhantomJS
  • Achievement parodies are always amusing; here is on for Visual Studio — what would the Selenium ones look like?
  • Koans are a trendy way to learn / practice a language. Here is a Koan-a-copia of them
  • Want onto the speaking circuit? The 2011 Verify/ATI Conference is asking for presentations

Bug Bash Aftermath

What a week! I’m almost (almost!) sorry that the Bug Bash is over.

What a week! I’m almost (almost!) sorry that the Bug Bash is over. I’d like to say thank you to everyone involved in the Bug Bash, from those reporting issues, through those brave souls (Dharani, Anthony, Jari!) who went through the issue tracker, applied labels and made sure the issues were still fresh, all the way to those contributing fixes. And the top five bug fixers were?

  1. Jari Bakken (24 issues)
  2. Simon Stewart (21 issues)
  3. David Burns, aka: AutomatedTester (11 issues)
  4. Jim Evans (10 issues)
  5. Michael Tamm (6 issues)

Some interesting nuggets of information:

  • We closed 85 issues over the course of the week (that’s about 20% of all open Selenium issues)
  • There were 111 checkins last week alone
  • All of the major languages supported by Selenium 2 are represented here.
  • Jari Bakken needs to be bought a steak as big as his head.

What does this mean? It means that the next release of Selenium is set to be very solid. We’re going to be spending another week or so making sure that everything is stable after the influx of changes, but you can expect 2.0b2 to be out “real soon now”

If you missed the Bug Bash but still want to contribute, it’s never too late. Feel free to drop by the IRC channel, or checkout the source, find a bug and start building!

2.0b1 and Maven

If you’re using Maven and the 2.0b1 release of Selenium, you may be running into some problems getting maven to pick up your tests.

If you’re using Maven and the 2.0b1 release of Selenium, you may be running into some problems getting maven to pick up your tests. The underlying problem is that selenium contains support classes for both JUnit and TestNG. The solution is to add this to your pom.xml

<dependency>
  <groupId>org.seleniumhq.selenium</groupId>
  <artifactId>selenium</artifactId>
  <version>2.0b1</version>
  <exclusions>
    <exclusion>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
    </exclusion>
  </exclusions>
</dependency>

A Smattering of Selenium #38B

Will today be the day I finish three weeks of catch-up?

Will today be the day I finish three weeks of catch-up? Well, no..

A Smattering of Selenium #38A

No. Really. I’m almost caught up.

No. Really. I’m almost caught up.

  • Want input in a non-english language but don’t want to convert your whole machine? InputKing might be able to help. And the fact it is in a browser means we can use it via Se.
  • HAR (HTTP Archive) is the format the cool kids are talking about, and now there is a har gem so you can make use of HAR files in you [Ruby] scripts.
  • Organizing scripts by tagging them is one bandwagon I got on last year to great success and while I don’t really live in the MS toolset, Test Categories for MSTest is likely how how I would do it MSTest.
  • Selenium won an award! Again! See the video of Se winning ‘Best Open Source Functional Automated Test Tool’
  • How a script is named is a reflection of the person who wrote it, in Unit Test Naming Convention one such style is described and the reasoning explained. Just ignore the second half of the summary’s first sentence though.
  • Michael Larson is Working his way though Selenium 1.0 Testing Tools Beginners Guide and documenting it in a series of blog posts he is calling a practicum
  • Most people use Se to create a regression security blanked, but it there are some points to be discussed around the arrogance of regression testing
  • ATDD continues to mature and the results of two different pattern workshops have now been posted. If you are using Cucumber, RobotFramework, Fitnesse, etc. you might want to pay attention.
  • It always saddens me a bit when large threads pop up on how to manage Se scripts. It’s called version control kids. But I realize I’m an outlier on this.
  • I suspect a lot of Se folks have a similar tale to How I Learned To Code

Bug Bash: 24-30 January

When the Selenium and WebDriver projects merged, all those moons ago, we moved the infrastructure from something we hosted to Google Code.

When the Selenium (http://selenium.googlecode.com/) and WebDriver projects merged, all those moons ago, we moved the infrastructure from something we hosted to Google Code. One reason for doing this was to make it easier for people to file bugs and feature requests. And it looks like people have been filing a lot of bugs and feature requests.

In the run up for the 2.0b2 release, we’ll be running a Bug Bash. This will run from the 24th January all the way to the end of the 30th January. The aim will be to focus on clearing our bug list as much as possible, so that beta2 will be the best release of Selenium yet. We will, of course, be recognizing people who squash the most bugs here on the blog, and we’re hunting out goodies to mail to the top bug bashers once the week is over.

If you’d like to get involved, it’s easy:

  1. Check out the source code
  2. Find a bug you’d like to squash in the issue tracker
  3. Fix it, attaching your patch to the issue

That’s it. Easy! For help, and to ask questions of the core development team, please hop on to the IRC channel or email the selenium-developers group.

Update: The Bug Bash is now complete. All we have to do is count up the scores!

A Smattering of Selenium #37B

Let’s see how many announcements there were that didn’t get pushed out in a timely manner today shall we?

Let’s see how many announcements there were that didn’t get pushed out in a timely manner today shall we?

  • Well, there is of course Selenium Conf is coming and you have until Friday to get your proposals in. Last I heard we had 37 which is impressive, but I think 50 should be doable.
  • On the meetup side of things there is
  • SeleniumCamp (English) is coming to Kiev at the end of February. Suddenly we go from no ‘events’ to lots.
  • I’m kinda surprised no one has done this one yet, but a FitNesse Formatter plugin for Se-IDE is up on AMO
  • Selenium Expert is a plugin that brings the wonderful world of inspections, tips, hints, fixes and refactoring to Selenese. Samit is a plug-in making machine.
  • Gorilla Logic have have released a new version of FlexMonkium — with with fully synchronized versioning.
  • SeleniuMspec is a cleverly named formatter for Mspec — though it isn’t distributed as an Se-IDE plugin (which would +1 its coolness)
  • And I quote, Hewlett-Packard (HP) is announcing the discontinuance of HP WinRunner (WR) 7.5, 7.6, 8.0, 8.2, 9.2 (all editions) products.. Is it wrong to say something like ‘Ding, dong, the witch is dead’?. Of course, we wouldn’t likely be here without WR, but who doesn’t love some friendly-ish ribbing? Here is he full notice.
  • Krypton appears to be a cloud service for managing your Se scripts and has a ‘we need testers’ box on their site if anyone is curious
  • And to illustrate that this space seems to have potential, or people think it does at any rate, Test Runnr also does cloud based script management with the added feature of running scripts against the Sauce Labs OnDemand cloud. So if you have a cloud based app that you script with Selenium stored in the cloud and executed in the cloud are you yourself a meta-cloud company?

More tomorrow as we dig ourselves out of the hole.

A Smattering of Selenium #37A

My scheme for catching up with links last week ran afoul of 900 geeks and their families melting the internets at CodeMash 2.0.1.1.

My scheme for catching up with links last week ran afoul of 900 geeks and their families melting the internets at CodeMash 2.0.1.1. So let’s try it again this week.

And assuming I remembered to pay the internet bill, there will be more links tomorrow.

Selenium Conf is coming… get your proposals in!

It has been mentioned at and hinted upon a couple times in the Smattering posts, but nothing has ‘officially’ been mentioned here, so it is time we fix that.

It has been mentioned at and hinted upon a couple times in the Smattering posts, but nothing has ‘officially’ been mentioned here, so it is time we fix that.

The first Selenium Conf is a go!

The logistics are set and we’re starting to sort out the program. Here is what you need to know. Right. Now.

This is a community driven event, though our friends at Sauce Labs are doing a lot of the leg work on the facilities (and food!), as so we want the community to be at the front of the room and not just the usual folks that do the talking circuit. (Unless you really want me to talk all day — which I can as many can attest.) Because of this we have extended the talk submission to Friday, January 21, 2011 11:59 PM (Pacific Standard Time) to expand the both the number of proposals and the number of people proposing talks.

Click here for the talk form

Have a vague notion that you would like to submit something but not sure what we are looking for? I offer these as guide posts to help your thinking:

  • Technical over Theoretical – code will always trump handwaving around slides
  • Experience Reports – On our project, we did X and it did or did not work and here is what we learned as a result
  • No Sales Pitches! – We can get sales pitches at vendor driven conferences. If your talk’s proposal is accepted and then you deliver a thinly veiled sales pitch you should expect to have your mic turned off.
  • Varied Experience – If your talk can appeal to newbies and people on the core team, that is a win in my books

So again, submit your talk – or risk hearing me all day.

Oh, and mark on your calendars Tuesday, February 1 — because we bumped at the proposal date so too is the ticket release date.

A Smattering of Selenium #36B

Second in a week-long series of catch-up posts.

Second in a week-long series of catch-up posts. But before I get to the next batch of links, don’t forget to submit your proposals to speak at the first Selenium Conference. I’m pretty sure we’re going to be trying to pick out the talks next week.

And now I’m off to drive through lake effect snow to get to CodeMash to stress out about my Selenium and Agile Testing workshops. Ah, the life of a consultant is certainly glamorous.

A Smattering of Selenium #36A

I have drastically fallen behind on the link reporting, but not the collecting, so this week’s Smattering will be multi-part.

I have drastically fallen behind on the link reporting, but not the collecting, so this week’s Smattering will be multi-part.

The ‘big’ news falls for this edition is two fold –

  1. We’re having a conference! Selenium Conference 2011 is April 4 – 6, 2011 in San Francisco. See the site for more information. (And I think our friends at Watir are going to be in the same space the day before.)
  2. The Betas are here! The Beta’s are here! As Simon’s post announced, Selenium 2.0b1 has been released to the [unsuspecting] masses. Everyone, including Se-RC users are encouraged to switch their server over to it — its backwards compatible with 1.x and has a tonne of important fixes (like the HEAD request on open, -htmlSuite works again, etc.)

And not to downplay things, but here are the usual assortment of things I think are of interest/value to those automating stuff [with Selenium].

  • Checklists are a Good Thing™ when it comes to testing, so why not automation too? So here is a Unit Test Review Checklist
  • ExtJS is one of those things that seems to come up more often than not on the se-users list which makes me think I’m lucky that none of my clients use it. Testing Extjs Application With Selenium : Few Pointers seems like it would be useful in such an event though.
  • Those of us around the automation space for awhile have often heard about Google’s mythic ‘Small, Medium, Large’ scheme for categorizing scripts — and now they are documented. Combining this idea with tagging of scripts and you’re laughing.
  • Looks like IBM is now starting to care about Selenium in developerWorks with Automated web testing with Selenium which has an assortment of quick things to help people out. And it is IBM so it got lots of love from folks [bots?] on Twitter.
  • Personas is something from the UX community that I’ve started to think more about in terms of what gets automated and/or how the the scripts are organized. The Persona Cheat Sheet will help you start down that road too.
  • Testing Experience magazine recently had an Open Source issue which had some interesting articles. Doesn’t appear to be anything groundbreaking, but my definition of that might be a bit warped.
  • Oooo! All of this year’s GTAC videos in one place. Now you really can pretend you were in India for the week.
  • Go faster! Linking data generation to hotkeys is one of those posts that could be quite useful if you use automation to move quickly around a site so you can manually test it.
  • Selenium IDE 1.0.10 is a ‘stable’ version (unlike 1.0.8 and 1.0.9 it seems) but did introduce one change to how element attributes are handled which I documented in Atoms have come to Selenium IDE
  • Using Python’s unittest module? Consider upgrading to unittest2

Only 46 more links to go through… 🙂

Blog Posts - 2010

Selenium 2.0 beta 1 Release

We recently released the first of the betas for Selenium 2.

We recently released the first of the betas for Selenium 2. It’s available for Java, C# and Ruby. If you’ve been holding off trying Selenium 2 because of the alpha label, then the biggest improvement you’ll see is with the new WebDriver APIs, but there’s a lot more!

  • A promise of relatively stable APIs
  • For Firefox only right now, an API for dealing with alerts, prompts and confirms (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#alert()).
  • A brand new IE driver.
  • Better selenium emulation (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html) when using webdriver
  • And a better implementation of webdriver’s API backed by the traditional Selenium technology (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/SeleneseCommandExecutor.html).
  • Ubiquitous use of Sizzle for emulating CSS selectors where native CSS selectors aren’t supported
  • The advanced user interactions (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html) API
  • An update to the AndroidDriver’s Android app.

Of course, we’d love this release to be completely bug free, but this is, after all, a beta, so there are some known issues:

  • The selenium 1.x emulation using IE is a little flaky.
  • The ChromeDriver is not as capable as the others.
  • Anything in our bug list.

You can download it from here:

http://code.google.com/p/selenium/downloads/list

You can read the javadocs (http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html) and the ruby docs (http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html).

An obvious question is “When will the beta end?” The short answer is when we’ve implemented the alerts and prompts and advanced user interactions APIs in all supported browsers. We expect there to be some flex in some APIs (removing deprecated methods, and within the advanced user interactions API) but what you have here is basically what you’re going to get when we hit 2.0 final. I have no idea how long this will take, but if you’re interested in helping out, let us know!

Thanks are due to all the committers who have worked so hard to get this code into shape. Thanks are also due to all the people who have taken the time to file bugs, ask for features and participated on the mailing lists. Thank you to you too, for going out and trying this new beta of Selenium 2.

You rock. 🙂

Atoms have come to Selenium IDE

As mentioned in Simon’s Going Atomic: Why? and Going Atomic: How, part of the merging of Selenium and WebDriver is to share common code between the two.

As mentioned in Simon’s Going Atomic: Why? and Going Atomic: How, part of the merging of Selenium and WebDriver is to share common code between the two. And as of the 1.0.10 release of Selenium IDE, this merged code, ‘atoms’ is now included.

Some early users of this release are noticing that this the atom that drives assertAttribute and verifyAttribute is causing their scripts to break. This post explains the ‘why’ and suggests how to fix them as well.

The HTML spec has the notion of a boolean attribute which is one that does something just by being there rather than by its value; checked and selected are two such examples of this. Optionally, you could give these boolean attributes a value that is the same as their name (checked=”checked”) and your page would still validate, but really, the browsers only care that the attribute exist.

Prior to 1.0.10, it was not uncommon for people to do something like

  assertAttribute | checkbox@checked | checked

which fetches the value of the checked attribute on the checkbox with the id or name of checkbox and fails the script is the value is not checked.

In 1.0.10 though, that will fail even if it is checked. This is because checked is a boolean attribute and will now return either true or throw an exception saying the attribute doesn’t exist. Redoing the above step check that the boolean attribute is set results in:

  assertAttribute | checkbox@checked | true

Thankfully, most of the real-world interaction with boolean attributes is focused on checked, disabled, hidden and selected and in these cases using assertAttribute is not really the right thing to do. Instead, the Selenium API provides wrappers for you to use.

checkedassertChecked(locator), assertNotChecked(locator), verifyChecked(locator), verifyNotChecked(locator)
disabledassertEditable(locator), assertNotEditable(locator), verifyEditable(locator), verifyNotEditable(locator)
hiddenassertVisible(locator), assertNotVisible(locator), verifyVisible(locator), verifyNotVisible(locator)
selectedassertSelected*(locator, pattern), assertNotSelected*(locator, pattern), verifySelected*(locator, pattern), verifyNotSelected*(locator, pattern)

Checking for the absence of a boolean attribute that doesn’t have a nice wrapper is a bit of a pain though. In this example I am checking that the boolean attribute multiple is not on the select element with the name elephants.

  assertEval | this.browserbot.findElement("css=select[name=elephants]").getAttribute("multiple"); | null

If you find yourself doing this very often, I suggest you wrap it up in a user-extension inside a plugin as something like

  assertBooleanAttribute | css=select[name=elephants]@multiple | false
  assertBooleanAttribute | css=select[name=elephants]@multiple | true

Hopefully this addresses some of the eventual ‘why the heck did my script break!?!?!’ problems that will no double crop up once Selenium IDE 1.0.10 gets wider distribution.

A Smattering of Selenium #35

(If I wasn’t still recovering from a cold there would be something witty here.)

(If I wasn’t still recovering from a cold there would be something witty here.)

Selenium Conference Survey

Great news! Thanks to the initiative of our friends at Sauce Labs, we’re finally ready to host the first-ever Selenium Conference.

Great news! Thanks to the initiative of our friends at Sauce Labs, we’re finally ready to host the first-ever Selenium Conference. We’re still working out a lot of the details, but so far we’ve decided this first conference will be sometime in April and hosted in San Francisco.

In order to figure out the rest of the details, we’re looking for feedback from the Selenium user community. Please take a moment to fill out the following survey. Your answers will help us properly plan the best possible conference.

http://bit.ly/fn8YyS

Thanks!

A Smattering of Selenium #34

We’ll start this week with the official announcement of ‘Selenium 1.0 Testing Tools: Beginner’s Guide’ being available.

We’ll start this week with the official announcement of ‘Selenium 1.0 Testing Tools: Beginner’s Guide’ being available. Congrats David! (Still waiting for my copy…)

Oh. and I just noticed that this is the Selenium-iversay edition of these things.

A Smattering of Selenium #33

…and here’s the links!

…and here’s the links!

A Smattering of Selenium #32

For those people paying attention to the goings-on in the Selenium world, yes, I am skipping something major until some of the details are worked out and announced.

For those people paying attention to the goings-on in the Selenium world, yes, I am skipping something major until some of the details are worked out and announced. Until then, here are the links I accrued over the week.

  • Selenium uses Bamboo for its CI infrastructure. This week saw an upgrade to the latest version so if you want bleeding-edge code, get it here
  • The only browser Se has no real traction on right now is the BlackBerry one. But if someone wanted to tackle it, here is a post from Atomic Object on their BlackBerry development environment that would help kickstart things maybe.
  • Under the category of ‘let the language deal with things’ is html5lib for python and php which will parse html. Sometimes it is far faster to dump your attribute checks etc. to a native parser than let Se do it.
  • Scott Sims has released Selenium Fury upon the Ruby world. Think of it as a Page Factory implementation for Ruby.
  • Using Se-IDE and Easyb? Here is a thread on how to use the generated code without modification
  • JRuby is one of the better languages to use to write Se scripts in, and here are videos from JRubyConf 2010
  • Cheezy is writing a series on UI tests. So far there is How do we keep them from being brittle? and Part Two
  • Se2 for JS? Sure, why not. webdriver-js
  • Jari release the selenium-webdriver 0.1.0 gem this week. Why the big jump from 0.0.29 to 0.1.0? We’ve merged in the selenium-client gem into the main selenium codebase and now there is a single gem if you want to do 1.x or 2.x scripting.
  • Google Refine is just darn cool. I’m not really sure how it plays into automation, but I get the sneaky suspicion it could. Somehow.
  • The YUI Test has Se built right in.

A Smattering of Selenium #31

The big news for last week was that I released Se-IDE 1.0.8 to very little fanfare.

The big news for last week was that I released Se-IDE 1.0.8 to very little fanfare. 1.0.9 should be a week or two and much more important a release.

  • Cheesecake! is isn’t nearly as impractical as Pacman, but still adds to the Se2 example bucket.
  • The London Se Meetup stuff from last week are starting to appear…
  • Some notes from CITCON last week as well. Seems like London was the place to be.
  • When designing automation frameworks (internal or external), the list of ways to make it hard to misuse should be kept in the back of your mind.
  • Of course your automation is under version control, right? RIGHT?!? What the Commit is rather amusing, if not a scathing satire. (hint: hit refresh)
  • Sauce Labs announced the availability of a CI API. But there is nothing to say that you couldn’t integrate their alternative annotation methods outside of CI too.
  • Harry Robinson did a session at CAST 2010 on ‘Exploratory Test Automation’ (which I missed; no, not bitter at all..) and I found his slides
  • If you are using the hosted Bamboo solution and most of your Se tests need windows, then here are instructions on how to create your own custom elastic agent image
  • Here is something fun, do you Hate or Love Se?
  • Slate seems like an interesting module for Python folks since it can parse and extract information from PDFs which is often a black hole in automation.
  • I continue to maintain that automation is programming (much to the annoyance of the classical black-box tester who is starting out with it) and that perhaps the easiest language to start learning is Python. Learn Python The Hard Way is a new book which looks like an ideal way to learn the language. I haven’t really gone through it to see which parts are more (or less) relevant to automation, but…
  • You’re cuking it wrong has lots of tips on how to write Cucumber scripts well.

A Smattering of Selenium #30

I’ve missed a couple weeks due to travel and a complete system lock which meant I lost all the links I had open but not saved.

I’ve missed a couple weeks due to travel and a complete system lock which meant I lost all the links I had open but not saved. So these are the ones I have recovered.

Oh, and both 2.0a6 and 2.0a7 have been released. We’re getting closer to the ‘API freeze’ which will mark the end of ‘alpha’ and the start of bug fixing (beta) for the final release.

Selenium 2.0a6 Released

We are extremely pleased to announce the release of Selenium 2.0a6!

We are extremely pleased to announce the release of Selenium 2.0a6! Head over to the downloads page to get it while it’s hot, or wait just a little bit longer for it to appear in a maven repo near you. The .Net version will also be updated soon too, and the python and ruby libraries have been having smaller, more frequent releases all this time.

You’ll be pleased to hear that the Selenium 1.0 APIs have remained constant, so what’s changed? Here, in no particular order are the major changes you’ll find in 2.0a6:

  • Android support: you can now download the APK and run webdriver tests using Android 1.6 to 2.2.
  • Firefox 4 support.
  • Experimental IE9 support
  • New APIs for dealing with HTML5 elements (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-summary.html) (best implemented, for now, by the mobile webdrivers)
  • A richer .Net API
  • A move to Sizzle for locating elements using CSS in browsers that don’t have a native API for that.
  • Far better support for running your existing Selenium RC tests using WebDriver, helping you make a managed migration to the newer APIs.

There are also lots of nice touches for the more technically inclined, including the ability to re-use instances of FirefoxProfiles (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/firefox/FirefoxProfile.html), better configurability when requesting a remote webdriver instance, better resource management and more shared code between the Selenium and WebDriver implementations.

Thank you to everyone who has taken the time to report a bug on our issue tracker, or raised problems on one of our mailing lists, or shown up for some of the banter on the IRC channel: without your involvement, the project wouldn’t be half as much fun, and wouldn’t be as capable as it is. Thanks are also due to the development team, who have poured an enormous amount of work into this release (538 revisions in under 90 days, or about 6 check-ins each and every day)

Hope you like it!

A Smattering of Selenium #29

A fair number of links this week. The vast majority of which were buried in annoying airport internet advertising frames…

A fair number of links this week. The vast majority of which were buried in annoying airport internet advertising frames…

A Smattering of Selenium #28

So we go from not-enough-stuff-to-do-one to wow-this-will-take-awhile.

So we go from not-enough-stuff-to-do-one to wow-this-will-take-awhile. And we’re off..

  • Tellurium is one of the many frameworks that absorb Se and has an article on InfoQ called Introducing the Tellurium Automated Testing Framework which, well, introduces the framework.
  • In the first of many Cucumber related posts this week is Sean Grove’s Cucumber Sauce for doing parallel Cucumber runs on the Sauce infrastructure. Might be general enough to use outside of it as well.
  • Cuke4Ninja: The Secret Ninja Cucumber Scrolls, aside from outstanding ninja cucumber images, has a dead-tree book’s work of getting starting with Cucumber information.
  • I updated the list of plugins for Se-IDE (that I know of) on the Se-HQ download page
  • Arquillian is testing framework, developed at JBoss.org, that empowers developers to write integration tests for business objects that are executed inside of an embedded or remote container–options include a servlet container, a Java EE application server or a Java SE CDI environment. Oh, and it has a Selenium (1.x RC and 2.x Se WebDriver) extensions
  • The Fall 2010 issue of Methods & Tools has an article on Bromine
  • Another piece of Cucumber news is a Skills Matter video of Gojko Adzic and David de Florinier (see Cuke4Ninja able) talking about Cucumber & Selenium 2.0
  • If you are doing automation, the right place to be running it is not the IDE but a CI server. Well, perhaps in addition to the IDE… Anyways, here is a post on Setting up a python CI server with Hudson. Now there is no excuse Python kids…
  • Parallel Testing should be this year’s automation theme. Here is how to do it in C#.
  • …and in PHP (this one, again with a bent to Sauce OnDemand, but…)
  • And yet another PHP Sauce integration.
  • Selenate is a JS 1.6 runner for Se
  • Actionscript Javascript Communication actually shows how the whole ExternalInterface stuff works when talking into Flash/Flex from within Se. I could have used this a year ago…
  • Aside from parallel stuff, I think the Decorators and their kin are nice additions to the automation toolkit. Here is one for taking screenshots on test failure in Python
  • London is having another meetup on November 3
  • The fall 2010 issue of Automated Software Testing Magazine is out. I think its kinda sad that articles on dynamic data generation still need to be written, but the ‘Testing With Reflection’ article seems to be not bad in that the message is ‘automate to learn, not to test’

A Smattering of Selenium #27

Seems I skipped a week, but that’s okay since there hasn’t been much in terms of volume…

Seems I skipped a week, but that’s okay since there hasn’t been much in terms of volume (or maybe my clever search filter is a bit overly clever…).

  • The big news I think is that there is now a Se driver for Node.js called Soda. I’m not sure I like the syntax, but I also don’t claim to know Node so it could be idiomatically correct which is more important than my blessing.
  • Hot on the heels of the Soda announcement was the announcement that it has built-in support for Sauce Labs’ OnDemand Se-in-the-cloud service
  • TestNG is often the java runner of choice for Se (for its built-in parallelization stuff) and it now has a Selenium page right in the official documentation.
  • Drupal sites have long used Se to automate maintenance tasks and such, but now there is Drunit which hopes to replace SimpleTest as the way to use PHPUnit and Se-RC in the Drupal community.
  • The August SFSE meetup was more of a crowd-sourced content affair with participants voting up questions that they wanted to hear Se inventor Jason Huggins answer. It then turned into a crowd-sourced answer affair with Simon Stewart (Se-WebDriver), Kevin Menard (Se-Grid) and myself (Se-IDE and general opinionated tester) getting dragged in periodically. The video is now online for your viewing enjoyment.
  • I’ll be writing about this more this week I’m sure, but Tracking Selenium Commands Using C# and SQL Server 2008 has actually made me rethink my position on what reporting should be coming out of your automation run. No mean feat that.
  • Three Keys to Automation is an old article from Bret Pettichord (he of WATIR fame) that somehow crossed my path this week but is as relevant today as it was 10 years ago
  • SMW System Testing with Selenium is a wiki page (unsurprisingly) about testing the Semantic MediaWiki with Se including slides from a talk on it. Good to see the world domination plans of becoming the default testing framework on projects progressing so nicely.
  • Testers, Orgs, and the demand for Java jobs nicely echos what I say when I am out at clients who are starting out with Se (or automation in general) – Testers don’t need to know how to write the code for your product, but they need to know how to best automate their tools and tests which will require understanding and comfort with code.. Also just as important from a product perspective is Let’s get rid of the titles of ‘developer’ and ‘tester.’.
  • Not related to Se directly is Dancer which is the Perl equivalent of Ruby On Rails. If you need a quick site for proof-of-concept or experimentation with Se, this might be the framework for you.
  • For the PHP readers, I present a discussion on integrating Se with Behat

A Smattering of Selenium #26

It’s Labour Day here, so this post was written to backdrop of Sponge Bob.

It’s Labour Day here, so this post was written to backdrop of Sponge Bob. In case you were wondering.

Going Atomic: How

This is the second of my technical posts. Again, if you’re interested in the internal workings of Selenium 2, then please skip straight to something else.

This is the second of my technical posts. Again, if you’re interested in the internal workings of Selenium 2, then please skip straight to something else. If you’re interested in how and why we made some of the technical decisions on the project, keep reading….

We left our intrepid heroes in a tight spot: they’d decided to write a shared library of code, to be used by the various webdriver implementations and selenium core, but the requirements for doing this seemed to be at odds with it actually happening.

Fortunately, at about the same time we started down this path, Google Open Sourced the Closure compiler. This is a Javascript compiler that takes as input a set of Javascript files, and which outputs Javascript. It can be configured to either pass the code through untouched into a single file, or it can compile a script aggressively, removing unused code-paths and minifying the output as much as possible. The Closure compiler is used on a lot of Google products, so we know that it’s reliable and consistent.

In order to get the best out of the Closure compiler, we’re writing the atoms using the Closure library. This isn’t as well known as some of the other JS libraries out there, but it’s solid, well tested and is being actively developed. It also features an easy-to-use extension of JsUnit, which makes writing tests a far simpler task than might otherwise be the case, and it has an easy to use mechanism for modularizing code.

So, given that we could compile a single Javascript function (and it’s dependencies) into a minified fragment of JS, we were all set, right? Not quite.

The problem is that the atoms are being extracted from two frameworks that have a different way of viewing the world. As an example, Selenium 1’s getAttribute (http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getAttribute(java.lang.String)) method only returns the value of a particular attribute, whereas WebDriver’s getAttribute (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String)) method will return the value of either a property or an attribute (because sometimes it’s hard to remember whether something is an attribute or a property of an element)

As with all problems in computer science, an extra level of indirection is used to solve this issue.

We’re busy implementing the expected behaviour of both WebDriver’s and Selenium’s API on top of the atoms.

There is, of course, the obvious question about how we get this carefully compressed JS into a driver. One option would be to include the raw Javascript as files in each language binding, and pull them in as required. That’s possible, but it would make each language binding bloated, and would introduce a lot of duplication. The alternative is to push the atoms as far into the driver as possible, and this is what we do. As part of the build process for webdriver, we take the compressed JS and convert it into a form that can be consumed by a particular driver. For example, for the IE driver, we convert them into constants in a C header file. These constants can then be referred to by the driver and converted back into a script than be executed via the same mechanism that is used by “executeScript”.

What do we gain from this seemingly baroque approach? Other than the ability to share the same code between drivers? Many things. The cost of maintenance drops dramatically as we can fix a bug in one place and have that fix be picked up by every driver. Because we’re working in pure JS and just querying the DOM, we can run the unit tests in a browser whilst we’re developing the code. This leads to a very tight feedback cycle. It also makes it easier for developers not familiar with the code to take a look at how we do things, and send us patches (always appreciated!) Finally, we can ensure a consistency of result.

Right, any questions?

A Smattering of Selenium #25

A day late, but that sort of thing happens when you have family.

A day late, but that sort of thing happens when you have family.

A Smattering of Selenium #24

A bit late, but I’m in California for a Selenium Developers Meetup and my body doesn’t quite know where it is temporally.

A bit late, but I’m in California for a Selenium Developers Meetup and my body doesn’t quite know where it is temporally.

A Smattering of Selenium #23

I was at Agile 2010 in Orlando last week so missed doing the Smattering, so here is two weeks worth of links.

I was at Agile 2010 in Orlando last week so missed doing the Smattering, so here is two weeks worth of links.

Going Atomic: Why?

This is the first in a series of technical posts by me about the internals of Selenium WebDriver.

This is the first in a series of technical posts by me about the internals of Selenium WebDriver. If you’re not interested in technical nitty-gritty, then feel free to step away now.

Still here? Excellent.

Let’s take a step back to just before the Selenium and WebDriver projects merged. There were, very obviously, two separate codebases. Looking closer and with a slightly different perspective, there were more than this. We used the test suites for webdriver to define the behaviour for multiple, largely independent, driver codebases. The IE driver was written in C, the HtmlUnit driver in Java and the Firefox driver is largely Javascript, and so on.

This means that there was a lot of “congruent code”: code that performed the same function but was implemented in a different way. The natural result of this was there was the possibility for behaviour to diverge between drivers. Worse, it meant that when a bug was found, we had to check it in every browser, and it wasn’t certain that an individual could actually fix the code. After all, not everyone is comfortable writing in all the languages we use on the project, or is au fait with all the technologies. For an Open Source project like Selenium, this is a major problem: we rely on a relatively small core of key developers backed up with a far larger team of individuals submitting small changes and fixes. Anything that makes it harder for us to function effectively as a development community is a Bad Thing.

So, we wanted a way off the island; a mechanism that would make it easy to share code between the various drivers and selenium core, that allowed us to fix a bug in one place only and have that fix ripple out to every driver that made use of this mechanism. More importantly, it had to be easy to use, and for someone not familiar with a raft of languages and technologies to quickly get started with.

What would this mechanism look like? Well, there’s a few things that feed into this, but the most important one, was that a majority of the code we’d think of merging was querying the state of the browser (“find an element”, “get the value of this attribute”) and, as Jason Huggins would point out to me at the drop of a hat, the natural language for querying the state of a browser is Javascript. One of the nice things with Javascript is that it’s possible to get a nice, fast development cycle going in it. Just modify a test, save and then hit “refresh” in the browser. That’s kind of attractive. Better still, there are a lot of developers familiar with Javascript.

So, we decided to use Javascript.

Because this shared code was to be composed of the smallest useful fragments of functionality required for browser automation we decided to refer to them as “Browser Automation Atoms”, or “atoms” for short. Rather than write them from scratch, the easiest thing to do was to extract them from the existing code — this is stuff that’s been battle-tested, so we know it’s robust.

There was one very obvious fly in the ointment: not every driver is written in Javascript. Although we have a mechanism available (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html) in every browser for executing JS, it’s wildly inefficient to dump an enormous lump of code on to the JS engine of the browser whenever you want to query the DOM. After all, most of the code would not be needed, and not all JS engines have been created equal. Some are blazingly fast. Others, not so much.

It would also be nice to break the code up into manageably-sized modules, rather than being in a single, monolithic file, which implies some clever “module loading” capability. Except this code isn’t always going to be executing inside an environment where writing “script” tags to load additional scripts is possible. You can’t do that in the guts of a firefox extension, though you can load files other ways. However we tie modules together will need to cope with that.

Ah! These opposing requirements: small modules containing the functions we want to use, no extraneous code, and for everything to be in a single file in order to minimize the pain of loading additional modules. That doesn’t sound like a very compatible list. How we resolved those differences is the topic of my next post….

Selenium at Agile 2010

The Selenium project does not have an ‘official’ presence here at Agile as it is seen as a ‘test after’ tool rather than ‘test first’…

The Selenium project does not have an ‘official’ presence here at Agile as it is seen as a ‘test after’ tool rather than ‘test first’ — even though it provides the magic of the ‘test first’ frameworks… But there is a small, unofficial contingent of recognizable faces around that can help people out and some sessions on it.

Sessions
Why your selenium tests are so dang brittle, and what to do about it – Wednesday, August 11 – 3:30 – 5:00

If you are writing automated through-the-GUI tests for a web application, you are in danger of creating tests that are more expensive to maintain than they are worth. With well-factored Selenium RC tests running in Junit or TestNG, you can keep your abstraction layers or “Lingos” — small bounded bits of slang for discrete parts of the object model — separate, thereby reducing the maintenance costs of your tests, and improving your sanity. Prerequisites include experience with Java or C#, and ideally some *basic* OOD familiarity (inheritance, composition, encapsulation, polymorphism).

Selenium Open Jam – Tuesday, August 10 – 11 – 12

Bring your questions or problems or complaints. We’ll try to ease / solve them.

People

  • Dawn Cannan – author of Confessions of a Passionate Tester and maintainer of the .NET version of Selenesse which is a bridge between Selenium and Fitnesse.
  • Adam Goucher (me) – maintainer of Selenium IDE and Selenium focused consultant
  • Jason Huggins – creator of Selenium and co-founder of Sauce Labs (Selenium in the cloud)
  • Patrick Wilson-Welsh – Agile coach and Selenium power user

If you are not succeeding with Selenium, come track down one of us. We might redirect you somewhere else, but eventually we’ll get you sorted out.

Selenium 2.0 backend for running IDE test suite via the Se2 Firefox

The GSoC 2010, it’s a great adventure. I’m Raynatou, I come from Burkina and do my internship at SERLI.

The GSoC 2010, it’s a great adventure.

I’m Raynatou, I come from Burkina and do my internship at SERLI. Like all interns in this company the topic of my internship focuses on advanced topics like the integration of WebDriver as backend for Selenium IDE. Selenium IDE is currently built upon Selenium Core for interacting with web pages. Selenium Core has several major limitations, including the inability to fire native events. To avoid these limitations and produce more robust tests, I am investigating Selenium IDE to using WebDriver in place of Selenium Core.

I’m mentored by Eric Allen from SauceLabs, my lead mentor, and by Jérémy Hérault from SERLI, his second but not least ;).

Eric has already done most of this integration earlier this year. The goal of his work is mostly to show what’s possible with Selenium IDE and the Selenium 2.0 Firefox driver. It is based on an asynchronous communication between the Firefox WebDriver extension and Selenium IDE, Se-IDE waiting for that WebDriver says to him that the current command has been passed with success (or not) to call the next command of the current test case (use of callback function). The goal of my mission is to finalize this integration. However, Eric being a crazy man, and he has done it quickly and together we though to another way to do this merge.

Our new thinking is based on a synchronous communication between both of them. To do it, I get the FirefoxDriver instance and play with it like a normal object, by calling its methods. But the behaviour of FirefoxDriver isn’t as simple as I was thinking. JavaScript being a powerfull language (yes, it can make you shiver), I’ve had just to replace some objects (like Response object) and to use a Proxy (and a bit of IoC-like code) to simplify my life and the code to do. You can see my work on GitHub and follow it.

Currently, I think that more than 95% of the Selenium API commands are usable with WebDriver as backend in Selenium IDE. The process was basically to go through the seleniumemulation package and port all of the Java classes into JavaScript methods on the WebDriver class.

Now, I’m working on Unit tests to cover any of the 2.0 work I’ve done. I managed to get all of the Selenium Core tests to run through IDE. I’ve some refactorings to do to optimize the code and add more comments for a bigger comprehension of my work. I have almost finished.

I hope you enjoy what I’m doing and we hope (me and my mentors) that this work can be included in the wave of Selenium 2.

A Smattering of Selenium #22

Happy Simcoe Day. Only a handful of links this week to mention.

Happy Simcoe Day. Only a handful of links this week to mention.

How to use Selenium 2 with Maven

There are several ways to use Selenium 2!

There are several ways to use Selenium 2:

  1. If you don’t have Selenium 1.x legacy code, you might want to directly use on of the new WebDriver implemenations like ChromeDriver, HtmlUnitDriver, FirefoxDriver, or InternetExplorerDriver which provide a nice, small and easy to learn API.
  2. If you have Selenium 1.x legacy code, you can still use the well known DefaultSelenium class or the new WebDriverBackedSelenium, which extends DefaultSelenium but uses one of the WebDriver implementations internally.

Whichever option you prefer, if you have want to use Maven, all you need to do is add the following dependency to your pom.xml:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium</artifactId>
    <version>2.0a5</version>
</dependency>

If you know, that you will only use a certain WebDriver implementation, e.g. the FirefoxDriver, you don’t need to depend on the selenium artifact (which has dependencies to all WebDriver implementations as well as the support classes). Instead you can add the dependency to just the artifact you need, e.g.

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-firefox-driver</artifactId>
    <version>2.0a5</version>
</dependency>

When using a WebDriver implementation, there is no need to start a Selenium server – the browser will be directly started and remote controlled.

But if you are using DefaultSelenium (or the RemoteWebDriver implementation), you still need to start a Selenium server.

The best way is to download the standalone Selenium server jar and just use it.

Furthermore you can also embed the Selenium server into your own project, if you add the following dependency to your pom.xml:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>2.0a5</version>
</dependency>

Now you can create a SeleniumServer instance yourself and start it.

Be aware, that the selenium-server artifact has a dependency to the servlet-api-2.5 artifact, which you need to exclude, if your project will be run in a web application container.

Well, I hope that covers everything you need to know on how to use Selenium 2 with Maven.

Michael

A Smattering of Selenium #21

I thought it had been a slow week — until I looked at how many browser windows I had open.

I thought it had been a slow week — until I looked at how many browser windows I had open. I wonder if that was why things were feeling a bit sluggish…

The Current Status of Selenium 1 and Selenium 2

In the beginning there was Se1, and it was good. But it could have been better — in ways that WebDriver was starting to be good at.

In the beginning there was Se1, and it was good. But it could have been better — in ways that WebDriver was starting to be good at. Thus the brilliant idea was hatched to merge the two projects.

And then the confusion began. Let’s see if I can start to address some of it via a ficticious conversation that consolidates the Se-user list and #selenium irc channel.

There are a couple annoying bugs in Se-RC 1.03; when is the 1.0.4 release?

Se-RC 1.0.4 is planned for sometime towards the end of July 2010

I’ve heard rumours that 1.0.4 the to be the final release?

Yes. 1.0.4 is planned on being the final 1.x release

That’s crazy talk! I can’t use a .0 or ‘alpha’ release for my mission critical application

Actually, its not all that crazy — and needs a bit more explanation. Se2 is truly a merger of the two projects, in fact 2.0a1 was literally the Se code from the OpenQA repository and the WebDriver code its Google Code repository merged into a new one. This meant that from the first release of the 2.x series, it has contained 100% of the 1.x code which means 100% backwards compatibility. Later releases in the 2.x series have been driven primarily by evolutions of the code that came from WebDriver, not from Se 1.x.

OK, so 100% of Se 1.x is in 2.x; I get that. But how are you making sure that fixes to one get into the other?

Here is another ‘secret’ — don’t tell anyone, but there hasn’t been any pure 1.x development since the merging of the codebases. Every 1.x release since the merger has really been a 2.x release — but all packaged up to make it look like a 1.x release. This is why observant people have noticed a log message that looks something like 11:09:37.507 INFO – v2.0 [a4], with Core v2.0 [a4] when they start up their 1.x server.

So you’ve been releasing alpha code disguised as a stable release? Jerks!

Woah! Relax! Recall what I said above about it being backwards compatible by default. The ‘alpha’ tag is there because the API for the new code is still being developed and features flushed out. The 1.x code is however, still stable and still production quality.

Alright, I take back calling you folks jerks, but I really don’t like the alpha tag. When will it be out of ‘alpha’?

There is only one or two more features to implement (like handling alerts) in the WebDriver code and some cleanup before the betas start. But hope for a 2.0.0 final by the end of the year. And while we’re on the topic of ‘alpha’ vs. ‘beta’, this the team’s working definitions of each.

  • Alpha – APIs can, and likely will change. Possibly in dramatic ways.
  • Beta – With the APIs set, make sure they work with the major browsers

‘Major Browsers’ eh, what exactly does that mean?

Right now it means Firefox, Internet Explorer and at least one WebKit based one (Safari or Chrome)

In short… it is a requirement of Se2 that the server be backwards compatible with Se-RC 1.x and that has already been accomplished by building the code from a common source repository. This means that if you are using Se-RC, you can switch out the server for a 2.x one and have no impact on the execution of the scripts. Plus you can start to experiment with the new stuff that came over from WebDriver.

A Smattering of Selenium #20

12 hours late, but I was driving draft horses all day so that’s my excuse and I’m sticking with it.

12 hours late, but I was driving draft horses all day so that’s my excuse and I’m sticking with it. Enjoy. I’m going for a nap.

GSoC 2010 – Remote Storage

What’s new for Selenium this summer ? The GSoC of course !!!!

What’s new for Selenium this summer ? The GSoC of course !!!!

I’m Jérémy, a french engineer and I work at SERLI, a services company based in France.
I’m working on Selenium since a year and this summer I’m mentoring Aleksejs for the GSoC 2010. I’m helped by David Burns when I’m on vacation or offline. His experience is really useful to me, and David is involved on student supervising regularly.

Aleksejs comes from Latvia in Europe (yes I know you know but perhaps Geography wasn’t your favorite subject at school ;)). His work was initiated by Patrick and myself. We thought to a remote system that allows Selenium users to save and get remote test cases, directly with Selenium, without any other installations like SVN.

What’s better than record a test case with Selenium IDE and save it on your remote storage? what’s better than share your test cases with colleagues without any other installations, just by using Selenium IDE or a Selenium Remote Storage client?

For myself I don’t know what’s better 🙂

Aleksejs has already coded the server side of the remote storage mechanism with all the necessary unit tests. He has also created a web interface to use it directly through the browser. With his work, you can put, get and delete a test case, and you can also browse the directory where test cases are stored. His work has been done in Java, and he used JSON, for data representation for the communication protocol. This system is really simply to use, based on REST technology, you only have to call URLs with the good parameters.

The next step of his work is to create a Se-IDE plugin based on the API done by Adam (thanks to him). This part has to be done in less than a month and I think it’s a hard task, but it’s so cool to write your own plugin. In this case, Aleksejs will use JavaScript, AJAX and XUL technologies. It’s really good to learn a lot of technologies for its own culture, it’s so trainer.

I hope you’re enthousiastic to get this new feature, but wait until October, when the work will be finalized 🙂

Enjoy guys, Aleksejs, David and I are ready to discuss on it if you have any questions. And good luck with the end of this adventure Aleksejs.

Selenium 2.0a5 Released

I’m pleased to announce the release of Selenium 2.0a5, available for immediate download.

I’m pleased to announce the release of Selenium 2.0a5, available for immediate download. This release brings a host of changes under the hood, and represents the efforts of many contributors. Highlights include:

  • New interfaces (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-frame.html) for dealing with HTML 5 elements.
  • An API for implicit waits (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html): quietly waiting until an element is present before continuing with a test. You can use them like this: driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS)
  • A revamped Firefox driver.
  • More shared code between Selenium and WebDriver.
  • You can now pass firefox profiles to the remote webdriver (this includes extensions and proxy settings!)
  • Improved .Net bindings: lots of updates to help bring them more in-line with the Java equivalents.

Waiting in the wings for release soon is an AndroidDriver, which opens up the world of testing webapps on Android devices through the Selenium WebDriver API.

If you’re a pythonista or rubyist, you’ve not been left out of this bonaza of new hotness. There have been regular updates for these languages, which can be installed via “easy_install -U selenium” or “gem install selenium-webdriver” depending on your language of choice.

Hopefully the next alpha will be the last before we plunge bravely into the betas. Exciting times are ahead!

A Smattering of Selenium #19

I’ve got a full day of driving ahead of me to go to a client so this is the early-morning (for me) edition of the Smattering post.

I’ve got a full day of driving ahead of me to go to a client so this is the early-morning (for me) edition of the Smattering post. That of course means there will be an absolute link explosion in about 20 minutes.

And lastly, BrowserMob, which was started by Se Core member Patrick Lightbody announced that it has been acquired by Neustar Webmetrics. Congrats! Now stop drinking the champagne and get back to work! 🙂

Selenium IDE – Looking back and looking forward

Its been around six months and three releases since I took the reins of Selenium-IDE.

Its been around six months and three releases since I took the reins of Selenium-IDE. The fundamental change in that time has been the adoption of a plugin model like the fine folks over that Firebug. (We’re also self-hosting it which is big from a project internals perspective.)

Right now, you can add custom user-extensions and formatters, but in the very near future you will be able to add location strategies as well.

So what does the future look like for Se-IDE?

  • 1.0.8 – A whack of bug fixes, and maybe the location strategies via plugins
  • 1.0.9 – If location strategies doesn’t get into 1.0.8, it will be here. And likely bug fixes.
  • 1.0.10 – Remove UI-Element from Se-IDE and make it a plugin

There is also work on reworking the internals of Se-IDE from a synchronous model to an asynchronous through Google Summer of Code. If that is successful and we decide to use it, that will trigger a bump to 1.1.0.

Timelines you ask? Well, when I took over Se-IDE the plan was to do it monthly. That was either naive or overly optimistic so they are starting to stretch a bit. 1.0.8 is going to stretch it some more too. Look for a beta of 1.0.8 towards the end of the month with a final version by mid-August.

I know you are likely wondering what cool, superdidooper features will you be seeing in Se-IDE over the next while? Ummm, well, actually none. At least not from the core Se-IDE. There will be significant pushback on any new ‘feature’ or change that adds something to Se-IDE. If you cannot accomplish your goal through a plugin, then I would consider than an omission in terms of the API.

Thats where we are from the maintainer perspective, but end-users also have sway over this as well to some degree. We’re now using the Google Code Issue Tracker for managing the project. If you bug is not there, there is a significantly smaller chance of it being addressed. And if an issue has a number of stars on it, that is also an indicator we should be looking at it.

Now to hack on locators…

A Smattering of Selenium #18

Not too much this week with various holidays around the world, but still managed to dig some things up.

Not too much this week with various holidays around the world, but still managed to dig some things up.

And lastly, the Selenium Stack Exchange proposal has progressed to the next level which is getting people to commit to using it. The number of commits is a convoluted formula, but every one counts. If you think the Se-Users mailing list is too crazy, this format might be better for you.

A Smattering of Selenium #17

Here are the posts dealing with Se, and/or automation in general that caught my eye and interest.

Here are the posts dealing with Se, and/or automation in general that caught my eye and interest.

  • Selenium Unit Test Reuse illustrates one way of iterating through environments and browsers in a script without using Se-Grid. I’ve done similar tricks to this to some success — the problem is usually reporting though, but you are all clever folks so I’m sure you could add it in.
  • Adding a custom header is sometimes required when writing a script, but its not really that documented so Kevin wrote How to Perform Basic Authentication in Selenium which combines how to do basic auth and header injection.
  • Not running your scripts inside CI yet? Shame on you! Hudson creator Kohsuke Kawaguchi gave a talk at Digg which they recorded. I haven’t watched it yet, but Se gets a mention according to the notes at the bottom.
  • Haven’t heard of the HAR (HTTP ARchive) format? Don’t worry, I hadn’t either until a bit of a discussion about the captureNetworkTraffic was had and its future in Se
  • The Faker/Sham combination is established in the Ruby (and Perl) world as the way to generate random data of a prescribed format. Anthony has release a similar module for Python with some pythonic twists called Picka (as in ‘Pick a card, any card’ erm, well, name or address actually)
  • Looking for an example of Page Objects in C#? I was last week and Dave convienently enough posted a page object pattern tutorial
  • Adieu to QTP. Now for a closer look at Selenium makes the list just because it uses ‘QTP’ and ‘Chinese bile farm’ in the same sentence.
  • Browsermob opensourced sep4j (which I think stands for ‘Se Parallel for Java’) which is a Collection of utilities for Java-based projects to enable Selenium test parallelization using Selenium Grid or Sauce
    Labs.
  • Richard presented at the LJC Unconference on ‘Agile Acceptance Testing with Cucumber, Cuke4Duke, Groovy & Selenium’ and has posted his slides
  • Speaking of acceptance tests, Gojko has a post on the Anatomy of a good acceptance test
  • Last thing on acceptance tests for this week is actually multiple things. Markus recently did a Weekend Testers event using RobotFramework and ParkCalc and has started a series of posts about it: Getting Started, ParkCalc automation – Refactoring a data-driven test and ParkCalc automation – Refactoring a keyword-driven test are the first three posts in it. Hopefully there will be more too.
  • And I’ll finish with one of my posts from this week which was on how to deal with pesky file downloads in Se. (hint: don’t use Se for downloading files)

A Smattering of Selenium #16

I’m going to start posting the Smattering posts here on the main Selenium blog, hopefully each Monday.

I’m going to start posting the Smattering posts here on the main Selenium blog, hopefully each Monday. For past ones see my personal blog’s archive

Selenium Grid 1.0.8 Released

We’re pleased to announce the release of Selenium Grid 1.0.8

We’re pleased to announce the release of Selenium Grid 1.0.8. This release fixes multithreaded issues with the Selenium Grid hub that appeared randomly under heavy load. If you’ve ever seen a log message about HttpClient being accessed by multiple threads, you definitely want to upgrade. Even if you haven’t, this release is highly recommended for all.

You can download it now or view the changelog. The list of changes is:

  • Multi-threaded issue with access to HttpClient has been resolved, fixing random crashes on a heavily loaded grids

Many thanks go out to Chris Gulley for identifying and fixing the problem. As always, patches and bug reports are appreciated:

I mentioned in the release notes for 1.0.7 that barring any major issues, 1.1 would be the next release. This fix was major enough to warrant an intermediate release. We are still planning to put out 1.1 as the next feature release.

If you have any questions about Selenium Grid, please use either the user or the developer list, as is most appropriate for the nature of your question. Ongoing discussion about grid development should take place on the developer list.

Selenium IDE 1.0.7 – Now with Drag-and-Drop!

So its a month later than planned, but Selenium IDE 1.0.7 is now available.

So its a month later than planned, but Selenium IDE 1.0.7 is now available. The delay was due to some internal build changes and not code, but one of the code changes that is there more than makes up for the delay.

That’s right, drag-and-drop has finally arrived to Se-IDE — though credit lies with Jérémy Hérault for implementing it.

Oh, and if you are Swedish, there is now a localization for you. Yes, a real one. Not just one that makes everything say Bork as was suggested to me. Although a Pirate locale might be arrr-some.

For those with version 1.0.5 or newer, the update will be pushed to you automatically over the next couple days. Those new to Selenium IDE or with 1.0.4 or older will want to install it now.

Other things of note around this release

Selenium Grid 1.0.7 Released

Following up on the Selenium Grid 1.0.6 release, we’re pleased to announce the release of Selenium Grid 1.0.7

Following up on the Selenium Grid 1.0.6 release, which was mostly a bug fix release, we’re pleased to announce the release of Selenium Grid 1.0.7. This is another bug fix release that focuses primarily on how Selenium Grid handles browser sessions.

You can download it now or view the changelog. The list of changes are:

  • Hub now instructs remote controls to shutdown a session if the hub is going to remove it due to being idle for too long
  • Added ability to specify timeout period when waiting for remote controls to become available. Now the client can timeout gracefully and decide what it would like to do next
  • Handle common case of session ID not being found, either because it timed out or was already closed; rather than raising a NullPointerException we now raise a NoSuchSessionException
  • Truncate long command response bodies to 128 characters
  • Retry remote control checks up to three times before deciding that a remote control is unreliable or unresponsive. This prevents aggressive unregistration of hosts that are busy or suffer from network issues

As always, patches and bug reports are appreciated:

Barring any critical issues, the next release of Selenium Grid will be 1.1 and will feature an enhanced Web view as well as a status API. After that, we will be moving from GitHub to Google Code to live alongside the other Selenium projects.

If you have any questions about Selenium Grid, please use either the user or the developer list, as is most appropriate for the nature of your question. Ongoing discussion about grid development should take place on the developer list.

The Future of Selenium Grid

As you likely know by now, after years of stewardship Philippe has stepped down as maintainer of Selenium Grid and has named me the new maintainer.

As you likely know by now, after years of stewardship Philippe has stepped down as maintainer of Selenium Grid and has named me the new maintainer. In this post, I hope to address the most immediate questions about what this means for the future of Selenium Grid.

Background

I realize many of you may not know who I am. I’ve been using Selenium in some capacity for close to five years now. I love working on open source software and do so primarily through my membership in the Apache Software Foundation and through my GitHub account. I hang out on the #selenium channel with the handle “nirvdrum” and have a personal page that includes some articles I’ve written and other things I’m involved with. Perhaps more importantly, I also rely on Selenium Grid for my latest start-up so I’m very keen on seeing the project mature and evolve.

Project Resources

The new canonical project repository on GitHub is the nirvdrum fork. However, within in the next month or so the project will be migrated from git and GitHub to subversion and the Selenium project on Google Code. As much as I personally prefer GitHub to Google Code, it makes the most sense from a community perspective for all Selenium projects to be hosted in the same location. The move will be made after Selenium Grid stabilizes a bit more. The 1.0.6 release was the first step in that process, but there may be one or two more minor patch releases. After the move, I’ll try to maintain a synchronized mirror of the code on GitHub so those that prefer to develop patches with git can continue to do so.

The canonical issue tracker is the Selenium issue tracker on Google Code. We will not be using either JIRA or GitHub Issues. I’ll try to migrate what I can over to the new tracker, but if I miss anything, please re-open the issue over there.

Project Evolution

Selenium Grid currently only works with Selenium 1.x, and consequently the 1.x compatibility interface in Selenium 2. There is currently no support for WebDriver. However, I fully intend to steer the product in that direction, while maintaining support for existing Selenium Grid installations (i.e., based on Selenium 1.x).

Since the project is moving to Google Code, all of the existing Selenium committers will have the ability to commit to the codebase. This should make the project’s evolution a much more collaborative effort. I’ll kickstart the process and likely lead the development effort, but the role of maintainer will be diminished (in a positive way) by allowing the entire core team equal access to the project.

Others are welcome to chime as well. Selenium Grid development discussion will be taking place on the Selenium developers list. Please continue to use the Selenium users list for usage and support inquiries.

Selenium 2.0a3 Released

Selenium 2.0a3 has been released. This is a major update to 2.0 and all users are encouraged to update.

Selenium 2.0a3 has been released and can be downloaded from the Selenium project site. This is a major update to 2.0 and all users are encouraged to update. The new features include:

  • An improved remote protocol.
  • Updating the version of HtmlUnit used to 2.7.
  • Improved support for simulating user interactions with the browser via native events on Linux.
  • Better support for Firefox 3.6.
  • Bug fixes

The .Net, Python and Ruby bindings will be updated soon, as will the maven artefacts.

The next release will be Selenium 2.0a4, and it is planned to include the following when it is released in late May:

  • Android support
  • A new API to support writing tests involving complex user interactions.
  • Far more integration of the underlying architecture.

Selenium Grid 1.0.6 Released

Following up on the Selenium Grid 1.0.5 release, we’re pleased to announce the release of Selenium Grid 1.0.6

Following up on the Selenium Grid 1.0.5 release, which added self-healing features to ease grid management, we’re pleased to announce the release of Selenium Grid 1.0.6. This is a bug fix release for 1.0.5 with some minor new additions.

You can download it now or view the changelog. The summary of changes are:

  • Fixed some concurrent modification issues that may have resulted in NullPointerExceptions
  • Fixed issue with shutting down workers with Rakefile
  • Added PID file support for hub and worker started via Rakefile, making it easier to use a process monitor such as monit

In case you missed the announcement, Philippe is no longer maintaining Selenium Grid. We thank him for his years of effort and helping the project get to where it is today. This is my first release as the new Selenium Grid maintainer. I will be getting out a new post shortly that lays out the future for the project [UPDATE: The promised post is live]. In the meanwhile, please note the new location of several key resources:

If you have any questions about Selenium Grid, please use either the user or the developer list, as is most appropriate for the nature of your question. Ongoing discussion about grid development should take place on the developer list. We look forward to hearing what you think about how we can improve the project.

Selenium 1.0.3 Released

Hot off the heals of 1.0.2, we’re releasing Selenium Remote Control 1.0.3!

Hot off the heals of 1.0.2, we’re releasing Selenium Remote Control 1.0.3. You can download it now (http://selenium.googlecode.com/files/selenium-remote-control-1.0.3.zip).

There is no functional difference between this version and 1.0.2, other than it is packaged up a little nicer and we’ve clarified the relationship between selenium-server and the client drivers. That is: we are not releasing new client drivers with future 1.x releases. The reason is that we locked down the API in version 1.0.1 and so there is no need to push out the same code each time. As such, when you download 1.0.3, you’ll see all the client drivers are labeled version 1.0.1, which is expected.

This release also is zipped up in a way that is compatible with all operating systems. The 1.0.2 release had some reported issues on Windows that have been fixed.

Finally, we also had many requests from Maven users. While we no longer use Maven to build Selenium, we are including pom releases for both the standalone server (ie: selenium-server.jar) and the “coreless” server (ie: selenium-server-coreless.jar). We hope they will be in the central repository shortly.

Selenium 1.0.2 Released: Firefox 3.6 and Snow Leopard Support

Today we’re happy to announce that Selenium Remote Control 1.0.2 has been released!

Today we’re happy to announce that Selenium Remote Control 1.0.2 has been released. While most of our efforts are on Selenium 2.0, we understand that there are millions of Selenium users that still need the 1.x line supported. That’s why we’ve said from the start that our goal is make 2.x 100% backwards compatible with 1.x. And that’s why we’re releasing a new version of Selenium RC today.

Download it here (http://selenium.googlecode.com/files/selenium-remote-control-1.0.2.zip).

In addition to many bug fixes, the biggest improvements in this version are support for both Firefox 3.6 and OS X Snow Leopard.

Welcome to the official Selenium blog!

Since we moved away from Clearspace for our forums, it’s time we also did the same for our blogging platform. We hope to be much better about posting news, tips, and tricks here going forward.

Since we moved away from Clearspace for our forums, it’s time we also did the same for our blogging platform. As such, the new location for the official Selenium blog will now be:

http://seleniumhq.wordpress.com

We hope to be much better about posting news, tips, and tricks here going forward.