<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Selenium – Selenium</title><link>https://trunk--polite-jelly-cc0866.netlify.app/</link><description>Recent content on Selenium</description><generator>Hugo -- gohugo.io</generator><atom:link href="https://trunk--polite-jelly-cc0866.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Selenium 4.18 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-4-18-released/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-4-18-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v120, v121, and v122 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Selenium Manager &lt;a href="https://plausible.io/manager.selenium.dev">records usage&lt;/a> has been decreased to reduce impact on users.&lt;/li>
&lt;li>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 &lt;code>--headless=new&lt;/code> (see: &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/headless-is-going-away/">Headless is going away&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="noteworthy-changes-per-language">Noteworthy changes per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Enabling Grid to use self-signed certificate for debugging&lt;/li>
&lt;li>Added explicit target locator events to the listener support classes in &lt;code>WebDriverListener&lt;/code>.&lt;/li>
&lt;li>Add missing event handlers for TargetLocator interface in &lt;code>WebDriverListener&lt;/code>.&lt;/li>
&lt;li>Several &lt;a href="https://github.com/w3c/webdriver-bidi">BiDi&lt;/a> additions: Browsing context destroyed event, Network intercept commands, command &lt;code>continuewithAuth&lt;/code>, between others.&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Several &lt;a href="https://github.com/w3c/webdriver-bidi">BiDi&lt;/a> additions: Browsing context destroyed event, realm destroyed event, command &lt;code>continuewithAuth&lt;/code>, between others.&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Fix protocol cdp version for &lt;code>RemoteWebDriver&lt;/code>.&lt;/li>
&lt;li>Fix network response data encoding.&lt;/li>
&lt;li>Explicitly support passing the full path to driver in Service constructor&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Python for &lt;a href="https://test.pypi.org/project/selenium/">nightly releases&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Add timestamps to Selenium Manager logs&lt;/li>
&lt;li>Selenium Manager decreases frequency of statistics reporting&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-team-membersteam">&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a>&lt;/h4>
&lt;p>&lt;strong>Thanks as well to all the team members who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.17 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-4-17-released/</link><pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-4-17-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v119, v120, and v121 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Selenium Manager &lt;a href="https://plausible.io/manager.selenium.dev">records usage&lt;/a> set
environment variable &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/selenium_manager/#data-collection">&lt;code>SE_AVOID_STATS&lt;/code> to &lt;code>&amp;quot;true&amp;quot;&lt;/code>&lt;/a> to avoid sending information.&lt;/li>
&lt;li>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 &lt;code>--headless=new&lt;/code> (see: &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/headless-is-going-away/">Headless is going away&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="noteworthy-changes-per-language">Noteworthy changes per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Remove deprecated event listener classes; update to EventFiringDecorator and WebDriverListener classes&lt;/li>
&lt;li>Allow disabling Grid UI&lt;/li>
&lt;li>Deprecated FirefoxBinary class and legacy Error Codes&lt;/li>
&lt;li>Deprecated HTML5 features for offline storage, location, and network connection&lt;/li>
&lt;li>No longer accepting session requests with desiredCapabilities keyword&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Remove deprecated headless methods and associated references&lt;/li>
&lt;li>Implemented remote file downloading&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Improvements to the new logging implementation&lt;/li>
&lt;li>Removed previously deprecated code&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Updated WPEWebKit support&lt;/li>
&lt;li>Removed previously deprecated code&lt;/li>
&lt;li>Deprecated FirefoxBinary and several outdated FirefoxProfile methods&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Logger defaults output to stderr instead of stdout&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Use latest browser from cache when browser path is not discovered&lt;/li>
&lt;li>Throw a descriptive message when error parsing JSON from response&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-team-membersteam">&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a>&lt;/h4>
&lt;p>&lt;strong>Thanks as well to all the team members who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium Vs … blog posts</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-vs-blog-posts/</link><pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2024/selenium-vs-blog-posts/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>However, some particular misconceptions regularly reappear across these blog posts.&lt;/p>
&lt;h2 id="its-too-hard-to-set-up-browsers-and-drivers-compared-to-playwright-and-cypress">It’s too hard to set up browsers and drivers compared to Playwright and Cypress&lt;/h2>
&lt;p>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.&lt;/p>
&lt;p>For over a year now, Selenium handles this automatically. If it can’t find a ChromeDriver or EdgeDriver, it will download it using &lt;a href="https://www.selenium.dev/blog/2022/introducing-selenium-manager/">Selenium Manager&lt;/a>. 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&amp;rsquo;s not forget that it uses the browser that &lt;a href="https://developer.chrome.com/blog/chrome-for-testing/">Google recommends you use for testing&lt;/a>.&lt;/p>
&lt;h2 id="setting-up-a-test-runner-is-hard-work-where-playwright-and-cypress-have-it-built-in">Setting up a test runner is hard work where Playwright and Cypress have it built in…&lt;/h2>
&lt;p>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 &lt;a href="https://www.selenium.dev/ecosystem/#frameworks">SeleniumBase, Nightwatch, Serenity, and so on&lt;/a>, might be the right tool for you.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h2 id="playwright-and-cypress-can-do-network-interception-and-allow-me-to-write-event-driven-code-unlike-selenium">Playwright and Cypress can do network interception and allow me to write event-driven code unlike Selenium&lt;/h2>
&lt;p>Selenium has been able to offer this since Selenium 4 came out. It’s so good that even &lt;a href="https://playwright.dev/docs/selenium-grid">Playwright suggest you use it for scaling your tests&lt;/a>. 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 &lt;code>NetworkInterceptor&lt;/code>, that isolate your tests from the underlying technology being used.&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>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?&lt;/p></description></item><item><title>Blog: Removal of AbstractEventListener + EventFiringWebDriver + WebDriverEventListener</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-removal-of-deprecated-events-classes/</link><pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-removal-of-deprecated-events-classes/</guid><description>
&lt;h3 id="upgrading-to-webdriverlistener-and-eventfiringdecorator">Upgrading to WebDriverListener and EventFiringDecorator&lt;/h3>
&lt;p>Decorating the webdriver&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">EventFiringWebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span> &lt;span style="color:#8f5902;font-style:italic">// Old approach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">EventFiringDecorator&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">().&lt;/span>&lt;span style="color:#c4a000">decorate&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span> &lt;span style="color:#8f5902;font-style:italic">// New approach
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="implementing-method-wrappers">Implementing method wrappers&lt;/h3>
&lt;p>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.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">WebDriverWrapper&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">private&lt;/span> &lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">WebDriverWrapper&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">By&lt;/span> &lt;span style="color:#000">by&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">by&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">testDecorator&lt;/span> &lt;span style="color:#204a87;font-weight:bold">extends&lt;/span> &lt;span style="color:#000">EventFiringDecorator&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#000">Object&lt;/span> &lt;span style="color:#000">call&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Decorated&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;?&amp;gt;&lt;/span> &lt;span style="color:#000">target&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Method&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Object&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#204a87;font-weight:bold">throws&lt;/span> &lt;span style="color:#000">Throwable&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">String&lt;/span> &lt;span style="color:#000">methodName&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;findElement&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">equals&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">methodName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">WebDriverWrapper&lt;/span> &lt;span style="color:#000">newDriver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">WebDriverWrapper&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">((&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#000">target&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getOriginal&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">());&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#000">newDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">((&lt;/span>&lt;span style="color:#000">By&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#204a87;font-weight:bold">super&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">call&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">target&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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&amp;rsquo;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 ).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">WebElementWrapper&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">private&lt;/span> &lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">WebElementWrapper&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">element&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">By&lt;/span> &lt;span style="color:#000">by&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">by&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">WebElementDecorator&lt;/span> &lt;span style="color:#204a87;font-weight:bold">extends&lt;/span> &lt;span style="color:#000">EventFiringDecorator&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#000">Decorated&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">WebElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#000">createDecorated&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">original&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">DefaultDecorated&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&amp;gt;(&lt;/span>&lt;span style="color:#000">original&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#204a87;font-weight:bold">this&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#000">Object&lt;/span> &lt;span style="color:#000">call&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Method&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Object&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#204a87;font-weight:bold">throws&lt;/span> &lt;span style="color:#000">Throwable&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">String&lt;/span> &lt;span style="color:#000">methodName&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;findElement&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">equals&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">methodName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#000">WebElementWrapper&lt;/span> &lt;span style="color:#000">element&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">WebElementWrapper&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">getOriginal&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">());&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">((&lt;/span>&lt;span style="color:#000">By&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#204a87;font-weight:bold">super&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">call&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">};&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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.&lt;/p>
&lt;h3 id="registering-listeners">Registering Listeners&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">EventFiringWebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">).&lt;/span>&lt;span style="color:#c4a000">register&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">listener1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">).&lt;/span>&lt;span style="color:#c4a000">register&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">listener2&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span> &lt;span style="color:#8f5902;font-style:italic">// Old approach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">EventFiringDecorator&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">listener1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">listener2&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span> &lt;span style="color:#8f5902;font-style:italic">// New approach
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="listening-to-events">Listening to Events&lt;/h3>
&lt;p>A quality of life change that is featured in WebDriverListener class is the use of ‘default’.
In Java, the &lt;code>default&lt;/code> 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&amp;rsquo;t need or care about.&lt;/p>
&lt;h4 id="listening-to-specific-events-using-beforeafter-methods-call">Listening to specific events using before/after methods call&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// Old approach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">AlertListener&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebDriverEventListener&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">beforeAlertAccept&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// implement every method in interface
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// New approach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">AlertListener&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebDriverListener&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">beforeAccept&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Alert&lt;/span> &lt;span style="color:#000">alert&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">// custom implementation goes here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// does not need to implement every method in interface
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="listening-to-generic-events">Listening to Generic Events&lt;/h4>
&lt;p>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.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">Listener&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebDriverEventListener&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">private&lt;/span> &lt;span style="color:#204a87;font-weight:bold">static&lt;/span> &lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">Logger&lt;/span> &lt;span style="color:#000">LOGGER&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Logger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getLogger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Listener&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">());&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">beforeAnyCall&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Object&lt;/span> &lt;span style="color:#000">target&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Method&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Object&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">logger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">debug&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Thread: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Thread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">currentThread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">().&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Name: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Args: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Arrays&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">toString&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">Listener&lt;/span> &lt;span style="color:#204a87;font-weight:bold">implements&lt;/span> &lt;span style="color:#000">WebDriverEventListener&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">private&lt;/span> &lt;span style="color:#204a87;font-weight:bold">static&lt;/span> &lt;span style="color:#204a87;font-weight:bold">final&lt;/span> &lt;span style="color:#000">Logger&lt;/span> &lt;span style="color:#000">LOGGER&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Logger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getLogger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Listener&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">());&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">beforeAnyWebDriverCall&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Method&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Object&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">logger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">debug&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Thread: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Thread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">currentThread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">().&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Name: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Args: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Arrays&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">toString&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#5c35cc;font-weight:bold">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">beforeAnyWebElementCall&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">WebElement&lt;/span> &lt;span style="color:#000">element&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Method&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#000">Object&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">logger&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">debug&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Thread: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Thread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">currentThread&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">().&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Name: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">method&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getName&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34; | Method Args: &amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">+&lt;/span> &lt;span style="color:#000">Arrays&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">toString&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">args&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So that&amp;rsquo;s some general examples on how to transition your code!
Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.16 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-16-released/</link><pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-16-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v118, v119, and v120 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Users may now opt in to Selenium Manager by specifying a &lt;code>browserVersion&lt;/code> that is different from what is found on the System&lt;/li>
&lt;li>All bindings now &lt;a href="https://www.selenium.dev/documentation/webdriver/troubleshooting/logging/">log Selenium information&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="noteworthy-changes-per-language">Noteworthy changes per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Improve Grid usage of Selenium Manager by always allowing browser version of &amp;ldquo;stable&amp;rdquo;&lt;/li>
&lt;li>Implement CDP script pinning for Chrome-based browsers&lt;/li>
&lt;li>Allow reusing devtools instance with JDK 11 client&lt;/li>
&lt;li>Moved org.openqa.selenium.remote.http.jdk to selenium-http&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Fix logging levels in http.js and webdriver.js&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Allow overriding default Actions duration&lt;/li>
&lt;li>Remove System.Drawing.Common as package dependency&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Remove deprecated Safari parameters for reuse_service and quiet&lt;/li>
&lt;li>Fix bug to allow Remote WebDriver to use custom Chrome-based commands&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Added initial typing support with rbs files&lt;/li>
&lt;li>Fix bug preventing Selenium Manager from working with Unix and Cygwin&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Use online mapping to discover proper geckodriver version&lt;/li>
&lt;li>Fix webview2 support when browser path is set&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-team-membersteam">&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a>&lt;/h4>
&lt;p>&lt;strong>Thanks as well to all the team members who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Novelties in Selenium Manager 0.4.15</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/novelties_in_selenium_manager_0.4.15/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/novelties_in_selenium_manager_0.4.15/</guid><description>
&lt;h3 id="support-for-firefox-esr">Support for Firefox ESR&lt;/h3>
&lt;p>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 &lt;code>esr&lt;/code> in the browser version. Bindings languages set this browser version (like other accepted labels for browser versions, such as &lt;code>stable,&lt;/code> &lt;code>beta,&lt;/code> &lt;code>dev,&lt;/code> &lt;code>canary,&lt;/code> and &lt;code>nightly&lt;/code>) using a browser option called &lt;a href="https://www.selenium.dev/documentation/webdriver/drivers/options/#browserversion">browserVersion&lt;/a>.&lt;/p>
&lt;h3 id="support-for-edge-webview2">Support for Edge WebView2&lt;/h3>
&lt;p>Selenium Manager 0.4.15 allows automated driver management for &lt;a href="https://developer.microsoft.com/microsoft-edge/webview2">Microsoft Edge WebView2&lt;/a>. 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.&lt;/p>
&lt;p>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 &lt;code>webview2&lt;/code> to handle WebView2, detecting its version based on &lt;a href="https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#detect-if-a-suitable-webview2-runtime-is-already-installed">registry queries&lt;/a>. In the bindings, WebView2 is enabled through a browser option called &lt;code>useWebView&lt;/code>.&lt;/p>
&lt;h3 id="support-for-mirror-repositories">Support for mirror repositories&lt;/h3>
&lt;p>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 &lt;a href="https://chromedriver.storage.googleapis.com/">chromedriver&lt;/a>, &lt;a href="https://googlechromelabs.github.io/chrome-for-testing/">Chrome for Testing&lt;/a>, etc.). These arguments are:&lt;/p>
&lt;ul>
&lt;li>&lt;code>--driver-mirror-url&lt;/code>: Mirror URL for driver repositories.&lt;/li>
&lt;li>&lt;code>--browser-mirror-url&lt;/code>: Mirror URL for browser repositories.&lt;/li>
&lt;/ul>
&lt;p>As usual, these values can be configured using the config file or environment variable (e.g., &lt;code>SE_DRIVER_MIRROR_URL&lt;/code> or &lt;code>SE_BROWSER_MIRROR_URL&lt;/code>). Moreover, there are browser and driver-specific configuration keys, i.e. &lt;code>chrome-mirror-url&lt;/code>, &lt;code>firefox-mirror-url&lt;/code>, &lt;code>edge-mirror-url&lt;/code>, etc. (in the configuration file), and &lt;code>SE_CHROME_MIRROR_URL&lt;/code>, &lt;code>SE_FIREFOX_MIRROR_URL&lt;/code>, &lt;code>SE_EDGE_MIRROR_URL&lt;/code>, etc. (as environment variables).&lt;/p>
&lt;p>Here is an example of this feature calling Selenium Manager from the shell:&lt;/p>
&lt;pre tabindex="0">&lt;code>./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=&amp;#39;C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe&amp;#39; get Version /value
DEBUG Output: &amp;#34;\r\r\n\r\r\nVersion=117.0.5938.150\r\r\n\r\r\n\r\r\n\r&amp;#34;
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
&lt;/code>&lt;/pre>&lt;h3 id="debug-release">Debug release&lt;/h3>
&lt;p>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 &lt;a href="https://github.com/SeleniumHQ/selenium/actions/workflows/build-selenium-manager.yml">workflow in GitHub Actions&lt;/a>. 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.&lt;/p>
&lt;p>&lt;img src="selenium-manager-workflow-debug.png" alt="Selenium Manager workflow screenshot">&lt;/p>
&lt;h3 id="selenium-manager-in-cache-only-for-java-bindings">Selenium Manager in cache (only for Java bindings)&lt;/h3>
&lt;p>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 &lt;code>~/.cache/selenium/manager/0.4.15&lt;/code>). 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 &lt;code>selenium-java&lt;/code> artifacts).&lt;/p>
&lt;h3 id="next-steps">Next steps&lt;/h3>
&lt;p>Look at &lt;a href="https://www.selenium.dev/documentation/selenium_manager/">Selenium Manager documentation&lt;/a> for a detailed description of its features. Also, you can trace the status of the development activities in the &lt;a href="https://github.com/orgs/SeleniumHQ/projects/5">Selenium Manager project dashboard&lt;/a>.&lt;/p></description></item><item><title>Blog: Selenium 4.15 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-15-released/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-15-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v117, v118, and v119 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Implemented &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/drivers/remote_webdriver/#downloads">Remote File Downloads&lt;/a>&lt;/li>
&lt;li>Selenium Manager supports webview2, Firefox ESR and Driver and Browser Mirrors&lt;/li>
&lt;/ul>
&lt;h4 id="noteworthy-changes-per-language">Noteworthy changes per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Numerous BiDi implementations&lt;/li>
&lt;li>Remove CDP version dependencies in the server&lt;/li>
&lt;li>Selenium Manager now gets copied to cache directory instead of being used from temp directory&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Replaced calls to console.log with managed loggers&lt;/li>
&lt;li>Added several BiDi methods&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Improved nuget packages metadata&lt;/li>
&lt;li>Allows starting service object directly&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Remove selenium manager accommodation for Conda&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Included debug and split-debuginfo in dev profile&lt;/li>
&lt;li>Changed windows target to stable-i686-pc-windows-gnu&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium Open Space Conference Oct 28th</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-open-space-conference/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-open-space-conference/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>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 &lt;a href="https://selenium.dev/sosc">event site&lt;/a>, and a mechanism to enroll: by pull request or issue to the &lt;a href="https://github.com/SeleniumHQ/sosc">site in github&lt;/a>.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.
&lt;img src="sosc-welo.jpg" alt="Welo">
&lt;img src="sosc-miro.png" alt="Miro">&lt;/p>
&lt;p>Welcome from the organizers, would be lovely to see you join us all.&lt;/p></description></item><item><title>Blog: Status of Selenium Manager in October 2023</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/status_of_selenium_manager_in_october_2023/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/status_of_selenium_manager_in_october_2023/</guid><description>
&lt;p>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 (&lt;code>se-config.toml&lt;/code>) and environment variables (e.g., &lt;code>SE_BROWSER&lt;/code>). Moreover, these recent releases include new features, as explained below.&lt;/p>
&lt;h3 id="search-for-the-best-driver-possible-in-the-cache">Search for the best driver possible in the cache&lt;/h3>
&lt;p>By default, Selenium Manager needs to request online endpoints (such as &lt;a href="https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints">Chrome for Testing JSON API&lt;/a> or &lt;a href="https://wiki.mozilla.org/Release_Management/Product_details">Firefox product-details JSON API&lt;/a>
to discover, download, and maintain the proper drivers and browsers that Selenium requires. The downloaded artifacts are stored in the cache (by default, &lt;code>~/.cache/selenium&lt;/code>) and reused from there.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h3 id="locating-selenium-manager-binary-with-an-environment-variable">Locating Selenium Manager binary with an environment variable&lt;/h3>
&lt;p>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 &lt;code>SE_MANAGER_PATH&lt;/code>. 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).&lt;/p>
&lt;h3 id="automated-edge-management">Automated Edge management&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>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):&lt;/p>
&lt;pre tabindex="0">&lt;code>./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
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code>./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
&lt;/code>&lt;/pre>&lt;p>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 &lt;a href="https://stackoverflow.com/questions/77132922/extract-parse-resources-from-portable-executable-pe-file">Stack Overflow post that summarized the problem&lt;/a>). All in all, the only solution we found is to install Edge in Windows using the MSI installer, and so, administrator grants are required.&lt;/p>
&lt;p>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:&lt;/p>
&lt;pre tabindex="0">&lt;code>./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
&lt;/code>&lt;/pre>&lt;p>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):&lt;/p>
&lt;pre tabindex="0">&lt;code>./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
&lt;/code>&lt;/pre>&lt;h3 id="chromium-support">Chromium support&lt;/h3>
&lt;p>Chromium is released as portable binaries, distributed as zip files for Windows, Linux, and macOS (see &lt;a href="https://www.chromium.org/getting-involved/download-chromium/">Chromium download page&lt;/a>). 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 &lt;code>atp&lt;/code> or &lt;code>snap&lt;/code>, for instance, as follows:&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo snap install chromium
&lt;/code>&lt;/pre>&lt;p>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 &lt;code>snap&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>./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: &amp;#34;Chromium 117.0.5938.149 snap&amp;#34;
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
&lt;/code>&lt;/pre>&lt;h3 id="next-steps">Next steps&lt;/h3>
&lt;p>We are close to implementing all the features initially planned for Selenium Manager. You can trace the status of the development activities in the &lt;a href="https://github.com/orgs/SeleniumHQ/projects/5">Selenium Manager project dashboard&lt;/a>.&lt;/p></description></item><item><title>Blog: Selenium 4.13 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-13-0-released/</link><pubDate>Mon, 25 Sep 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-13-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v115, v116, and v117 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Reminder: this is the last version of Selenium with &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-8-support/">Java 8 support&lt;/a>.
Please upgrade to at least Java 11.&lt;/li>
&lt;li>The location of Selenium Manager can be set manually in all bindings with &lt;code>SE_MANAGER_PATH&lt;/code> environment variable.&lt;/li>
&lt;/ul>
&lt;h4 id="relevant-improvements-per-language">Relevant improvements per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Deprecated setScriptTimeout(), use scriptTimeout()&lt;/li>
&lt;li>Fixed several bugs related to logging driver output&lt;/li>
&lt;li>Removed a number of previously deprecated methods&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Minor bug fixes&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Users can now start a service before creating the driver object instance&lt;/li>
&lt;li>Removed Microsoft.IdentityModel.Tokens as dependency&lt;/li>
&lt;li>Fixed several bugs and made improvements to DevTools implementations&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Removed deprecated headless methods&lt;/li>
&lt;li>Fixed bug preventing using performance logging in Chrome and Edge&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Fixed bug preventing using performance logging in Chrome and Edge&lt;/li>
&lt;li>Users can now start a service before creating the driver object instance&lt;/li>
&lt;li>Removed deprecated driver extensions for location and network connection&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Various bug fixes for improved Selenium Manager functionality&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.14 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-14-released/</link><pubDate>Mon, 25 Sep 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-14-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v116, v117, and v118 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>If you are using Java, this release requires Java 11! (see post on &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-8-support/">Java 8 support&lt;/a>)&lt;/li>
&lt;li>Selenium supports automatic downloading and management of the Microsoft Edge browser&lt;/li>
&lt;/ul>
&lt;h4 id="relevant-improvements-per-language">Relevant improvements per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Removed support for Async HTTP Client, the default is now the default Java library&lt;/li>
&lt;li>Allow setting SSL context in client config for HttpClient&lt;/li>
&lt;li>Several logging message improvements&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Saving screenshots with different image formats is deprecated&lt;/li>
&lt;li>Removed IdentityModel dependency&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Fix bug that didn&amp;rsquo;t close log_output in Service classes&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Provide public access to atom scripts&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Rust
&lt;ul>
&lt;li>Automated Edge management&lt;/li>
&lt;li>Recognizes and handles webview2&lt;/li>
&lt;li>Locates existing Chromium browsers when specifying Chrome&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.12.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-12-0-released/</link><pubDate>Thu, 31 Aug 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-12-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v114, v115, and v116 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Quite a few fixes for Selenium Manager, and now with Firefox browser management!
Read about all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats_new_in_selenium_manager_0.4.12_shipped_with_selenium_4.12.0/">new Selenium Manager features&lt;/a>&lt;/li>
&lt;li>.NET only explicitly targets &lt;code>netstandard2.0&lt;/code>&lt;/li>
&lt;li>Python no longer supports Python 3.7&lt;/li>
&lt;li>Ruby no longer supports &lt;code>:capabilities&lt;/code> arguments for local drivers (must use &lt;code>:options&lt;/code> now)&lt;/li>
&lt;/ul>
&lt;h4 id="relevant-improvements-per-language">Relevant improvements per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Several improvements in working with Selenium Manager&lt;/li>
&lt;li>Allow deleting remote downloaded files from grid (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12501">#12501&lt;/a>)&lt;/li>
&lt;li>Removed deprecated &lt;code>UNEXPECTED_ALERT_BEHAVIOR&lt;/code>, &lt;code>BROWSER_LOGFILE&lt;/code>, &lt;code>createPointerDown&lt;/code>, &lt;code>createPointerUp&lt;/code> and JWP &lt;code>/file&lt;/code> endpoint&lt;/li>
&lt;li>Deprecated &lt;code>disableNativeEvents&lt;/code> and Remote Response status field&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>Fix how browsers and drivers are discovered (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12456">#12456&lt;/a>)&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Several big fixes for improving DevTools execution (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12486">#12486&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12614">#12614&lt;/a>, &lt;a href="https://github.com/SeleniumHQ/selenium/pull/12592">#12592&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12591">#12591&lt;/a>)&lt;/li>
&lt;li>Bug fix for how driver location is specified in Service class (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12473">#12473&lt;/a>)&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>Support Selenium Manager in conda installs (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12536">#12536&lt;/a>)&lt;/li>
&lt;li>Several bug fixes in Typing suggestions (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12477">#12477&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12477">#12464&lt;/a>)&lt;/li>
&lt;li>allow setting http client certifications with REQUESTS_CA_BUNDLE env (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/11957">#11957&lt;/a>)&lt;/li>
&lt;li>Fix bugs for &lt;a href="#12462">ElementScrollBehavior&lt;/a>, &lt;a href="https://github.com/SeleniumHQ/selenium/pull/12474">sending keys with long strings&lt;/a>
and &lt;a href="https://github.com/SeleniumHQ/selenium/pull/12499">getting capabilities from options&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Fix bug preventing good error messages in Selenium Manager when stdout empty&lt;/li>
&lt;li>Fix bug with Firefox not loading net/http library by default (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12506">#12506&lt;/a>)&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">See all changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: What's new in Selenium Manager 0.4.12, shipped with Selenium 4.12.0</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats_new_in_selenium_manager_0.4.12_shipped_with_selenium_4.12.0/</link><pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats_new_in_selenium_manager_0.4.12_shipped_with_selenium_4.12.0/</guid><description>
&lt;p>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 &lt;em>0&lt;/em>. Thus, Selenium &lt;strong>4.12.0&lt;/strong> is shipped with Selenium Manager &lt;strong>0.4.12&lt;/strong>.&lt;/p>
&lt;p>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) &lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md">changelog file&lt;/a>.&lt;/p>
&lt;p>Besides, for this release, we made a significant update to the &lt;a href="https://www.selenium.dev/documentation/selenium_manager/">documentation page of Selenium Manager&lt;/a>. This page contains all the fine-grained information related to automated driver and browser management, configuration, etc. Also, it has several &lt;strong>TL;DR&lt;/strong> summarizing the main ideas for the eager reader.&lt;/p>
&lt;h3 id="automated-firefox-management">Automated Firefox management&lt;/h3>
&lt;p>After shipping automated browser management based on &lt;a href="https://googlechromelabs.github.io/chrome-for-testing/">Chrome for Testing&lt;/a> on the previous release, Selenium Manager 0.4.12 continues the job by providing automated &lt;strong>Firefox&lt;/strong> 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.&lt;/p>
&lt;p>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 &lt;a href="https://www.selenium.dev/documentation/webdriver/drivers/options/#browserversion">browserVersion&lt;/a> to specify a particular Firefox release (e.g., 114, 115, etc.). Finally, the label &lt;code>stable&lt;/code> allows us to manage the current stable Firefox release explicitly, and the labels &lt;code>beta&lt;/code>, &lt;code>dev&lt;/code>, and &lt;code>nightly&lt;/code> as used for unstable Firefox releases.&lt;/p>
&lt;p>This feature is possible thanks to the remarkable work of the Firefox team by maintaining current and old releases in their &lt;a href="https://ftp.mozilla.org/pub/firefox/releases/">public repository&lt;/a>. Moreover, the Firefox version discovery in Selenium Manager is made thanks to the availability of the &lt;a href="https://wiki.mozilla.org/Release_Management/Product_details">product-details JSON API&lt;/a>, also maintained by the Firefox team.&lt;/p>
&lt;h3 id="improved-configuration">Improved configuration&lt;/h3>
&lt;p>Custom setup is sometimes necessary for browser automation. For that reason, Selenium Manager already provides different features for &lt;a href="https://www.selenium.dev/documentation/selenium_manager/#configuration">rich configuration&lt;/a>. Selenium Manager 0.4.12 extends this feature by delivering a new configuration argument called &lt;code>--cache-path&lt;/code>. This argument allows changing the path of the local folder used to store downloaded assets (drivers and browsers) by Selenium Manager (by default, &lt;code>~/.cache/selenium&lt;/code>). As usual, this argument can also be changed by including an entry in the configuration file or using an environment variable (&lt;code>SE_CACHE_PATH&lt;/code>). Regarding the former, the name of the configuration file has been renamed to &lt;code>se-config.toml&lt;/code> 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.&lt;/p>
&lt;h3 id="other-changes">Other changes&lt;/h3>
&lt;p>A minor change in Selenium Manager 0.4.12 is related to the metadata file, now called &lt;code>se-metadata.json&lt;/code>. 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 &lt;em>time-to-live&lt;/em> (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, &lt;code>browser_ttl&lt;/code> and &lt;code>driver_ttl&lt;/code>) in a single one called &lt;code>ttl&lt;/code> (with a default value of 3600 seconds, i.e., 1 hour). For further details, visit the Selenium Manager page about &lt;a href="https://www.selenium.dev/documentation/selenium_manager/#caching">caching&lt;/a>.&lt;/p>
&lt;p>Last but not least, the Selenium Manager binary compiled for macOS is &lt;em>universal&lt;/em>, in the sense that it can be executed both in &lt;em>x64&lt;/em> and &lt;em>arm64&lt;/em> architectures out of the box. Previously, the binary was compiled for &lt;em>x64&lt;/em>, and so, &lt;a href="https://support.apple.com/en-us/HT211861">Rosetta&lt;/a> should be available in &lt;em>arm64&lt;/em> macOS machines (i.e., M1 or M2). With the new Selenium Manager macOS binary, Rosetta is no longer mandatory.&lt;/p>
&lt;h3 id="next-steps">Next steps&lt;/h3>
&lt;p>The next release of Selenium Manager will continue delivering automated browser management, this time for &lt;strong>Edge&lt;/strong>, and other features. As usual, you can trace the work in progress in the &lt;a href="https://github.com/orgs/SeleniumHQ/projects/5">Selenium Manager project dashboard&lt;/a>.&lt;/p></description></item><item><title>Blog: Selenium 4.11.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-11-0-released/</link><pubDate>Mon, 31 Jul 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-11-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v113, v114, and v115 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Support for &lt;a href="https://googlechromelabs.github.io/chrome-for-testing/">Chrome for Testing (CfT)&lt;/a> through Selenium Manager. Read more at the new Selenium Manager features &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats-new-in-selenium-manager-with-selenium-4.11.0/">blog post&lt;/a>.&lt;/li>
&lt;li>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.&lt;/li>
&lt;li>&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads/#nightly">Nightly builds&lt;/a> are being pushed for Ruby and Java. Support for other languages is coming soon.&lt;/li>
&lt;li>Ignore process id match when finding the window handle - IE Mode on Edge. (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12246">#12246&lt;/a>) (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12279">#12279&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="relevant-improvements-per-language">Relevant improvements per language&lt;/h4>
&lt;ul>
&lt;li>Java
&lt;ul>
&lt;li>Make user defined SlotMatcher used everywhere in Grid code (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12240">#12240&lt;/a>)&lt;/li>
&lt;li>Add support for &lt;a href="https://fedidcg.github.io/FedCM/">FedCM&lt;/a> commands (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12096">#12096&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>JavaScript
&lt;ul>
&lt;li>&lt;a href="https://github.com/w3c/webdriver-bidi">BiDi&lt;/a> Add Network module events (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12197">#12197&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>.NET
&lt;ul>
&lt;li>Implementation of event wrapped shadow root element (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12073">#12073&lt;/a>)&lt;/li>
&lt;li>Allow setting a different pointer, keyboard, or wheel on input device (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/11513">#11513&lt;/a>)&lt;/li>
&lt;li>Add move to location method to Actions (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/11509">#11509&lt;/a>)&lt;/li>
&lt;li>Add support for Safari Technology Preview (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12342">#12342&lt;/a>)&lt;/li>
&lt;li>Fix error when we send non-base64 data for fetch command (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12431">#12431&lt;/a>)&lt;/li>
&lt;li>Fix continueResponse method in CDP (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12445">#12445&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Python
&lt;ul>
&lt;li>removed redundant attributes &lt;code>capabilities&lt;/code> and &lt;code>set_capability&lt;/code> in wpewebkit/options.py (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12169">#12169&lt;/a>)&lt;/li>
&lt;li>improve driver logging, implement log_output() for flexibility and consistency of driver logging (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12103">#12103&lt;/a>)&lt;/li>
&lt;li>let users pass service args to IE driver (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12272">#12272&lt;/a>)&lt;/li>
&lt;li>Expose &lt;code>WPEWebKitService&lt;/code> and &lt;code>WebKitGTKService&lt;/code> in the public API&lt;/li>
&lt;li>Remove deprecated &lt;code>ActionChains.scroll(...)&lt;/code>&lt;/li>
&lt;li>Add creation flag for windows in selenium_manager (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12435">#12435&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;ul>
&lt;li>Ruby
&lt;ul>
&lt;li>Made network interception threads fail silently (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12226">#12226&lt;/a>)&lt;/li>
&lt;li>Remove deprecated code (&lt;a href="https://github.com/SeleniumHQ/selenium/pull/12417">#12417&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="d-flex justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: What's new in Selenium Manager with Selenium 4.11.0</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats-new-in-selenium-manager-with-selenium-4.11.0/</link><pubDate>Mon, 31 Jul 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/whats-new-in-selenium-manager-with-selenium-4.11.0/</guid><description>
&lt;p>As of version &lt;a href="https://www.selenium.dev/blog/2022/introducing-selenium-manager/">4.6.0&lt;/a>, all releases of Selenium (Java, JavaScript, Python, Ruby, and .Net) are shipped with &lt;strong>Selenium Manager&lt;/strong>. &lt;a href="https://www.selenium.dev/documentation/selenium_manager/">Selenium Manager&lt;/a> is a binary tool (implemented in Rust) that provides automated driver management for Selenium. &lt;a href="https://www.selenium.dev/documentation/selenium_manager/">Selenium Manager&lt;/a> is still in beta, although it is becoming a relevant component of Selenium.&lt;/p>
&lt;p>So far, the main feature of Selenium Manager is called &lt;em>automated driver management&lt;/em>. I use the term &lt;em>management&lt;/em> for this feature (and not just &lt;em>download&lt;/em>) since this process is broader and implies different steps:&lt;/p>
&lt;ol>
&lt;li>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., &lt;code>google-chrome --version&lt;/code>).&lt;/li>
&lt;li>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., &lt;a href="https://chromedriver.chromium.org/downloads">chromedriver&lt;/a>, &lt;a href="https://github.com/mozilla/geckodriver/releases">geckodriver&lt;/a>, or &lt;a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/">msedgedriver&lt;/a>) are used.&lt;/li>
&lt;li>Driver download. With the resolved driver version, the driver URL is obtained; with that URL, the driver artifact is downloaded, uncompressed, and stored locally.&lt;/li>
&lt;li>Driver cache. Uncompressed driver binaries are stored in a local cache folder (&lt;code>~/.cache/selenium&lt;/code>). The next time the same driver is required, if the driver is already in the cache, it will be used from there.&lt;/li>
&lt;/ol>
&lt;h3 id="drivers-on-the-path">Drivers on the PATH&lt;/h3>
&lt;p>Driver management through Selenium Manager is &lt;em>opt-in&lt;/em> for the Selenium bindings. Thus, users can continue managing their drivers manually (putting the driver in the &lt;code>PATH&lt;/code> or using system properties) or rely on a third-party &lt;em>manager&lt;/em> 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 &lt;code>PATH&lt;/code>.&lt;/p>
&lt;p>Let&amp;rsquo;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 &lt;code>PATH&lt;/code>. Your Selenium tests execute. Everything is fine. But the &lt;em>problem&lt;/em> here is that Chrome is &lt;em>evergreen&lt;/em>. This name refers to Chrome&amp;rsquo;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&amp;rsquo;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: &lt;em>&amp;ldquo;session not created: This version of ChromeDriver only supports Chrome version 113&amp;rdquo;&lt;/em>.&lt;/p>
&lt;p>This problem is the primary reason for the existence of the so-called &lt;em>driver managers&lt;/em>. And as of Selenium 4.11, Selenium Manager helps to understand potential issues related to the drivers in the &lt;code>PATH&lt;/code>. When an incompatible driver release is found in the &lt;code>PATH&lt;/code>, a warning message like the following is displayed to the user:&lt;/p>
&lt;pre tabindex="0">&lt;code>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
&lt;/code>&lt;/pre>&lt;h3 id="entering-chrome-for-testing-cft">Entering Chrome for Testing (CfT)&lt;/h3>
&lt;p>The Chrome team started a very relevant initiative for the testing community in 2023: &lt;a href="https://googlechromelabs.github.io/chrome-for-testing/">Chrome for Testing (CfT)&lt;/a>. CfT is a reduced release of Chrome primarily addressed to the testing use case.&lt;/p>
&lt;p>One of the key differences between a regular Chrome release and CfT is that Chrome is &lt;em>evergreen&lt;/em>, 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 &lt;a href="https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints">CfT JSON endpoints&lt;/a>.&lt;/p>
&lt;p>As of version 114, the chromedriver team has stopped publishing the chromedriver releases and metadata using their traditional &lt;a href="https://chromedriver.chromium.org/downloads">chromedriver download repository&lt;/a>. This way, and as of version 115, chromedriver releases can only be discovered programmatically using the abovementioned &lt;a href="https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints">CfT JSON endpoints&lt;/a>.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h3 id="automated-browser-management">Automated browser management&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>Let&amp;rsquo;s suppose we want to driver Chrome with Selenium (see the doc about how to &lt;a href="https://www.selenium.dev/documentation/webdriver/getting_started/first_script/#1-start-the-session">start a session with Selenium&lt;/a>). 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.&lt;/p>
&lt;p>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 &lt;code>~/.cache/selenium/chrome&lt;/code>). 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).&lt;/p>
&lt;p>To set a browser version with Selenium, we use a browser option called &lt;a href="https://www.selenium.dev/documentation/webdriver/drivers/options/#browserversion">browserVersion&lt;/a>.
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.&lt;/p>
&lt;p>Let&amp;rsquo;s consider a simple example. Suppose we set &lt;code>browserVersion&lt;/code> to &lt;code>114&lt;/code> using &lt;a href="https://www.selenium.dev/documentation/webdriver/browsers/chrome/">Chrome options&lt;/a>. 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.&lt;/p>
&lt;p>But there is even more. In addition to fixed browser versions (e.g., &lt;code>113&lt;/code>, &lt;code>114&lt;/code>, &lt;code>115&lt;/code>, etc.), we can use the following labels for &lt;code>browserVersion&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>stable&lt;/code>: Current CfT version.&lt;/li>
&lt;li>&lt;code>beta&lt;/code>: Next version to stable.&lt;/li>
&lt;li>&lt;code>dev&lt;/code>: Version in development at this moment.&lt;/li>
&lt;li>&lt;code>canary&lt;/code>: Nightly build for developers.&lt;/li>
&lt;/ul>
&lt;p>When these labels are specified, Selenium Manager first checks if a given Chrome is already installed (&lt;code>beta&lt;/code>, &lt;code>dev&lt;/code>, etc.), and when it is not detected, CfT is automatically managed.&lt;/p>
&lt;h3 id="under-the-hood">Under the hood&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>For most users, Selenium Manager should work silently and transparently. But if you want to &lt;em>play&lt;/em> 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 &lt;a href="https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager">Selenium main repository&lt;/a>.&lt;/p>
&lt;p>For instance, to manage Chrome/chromedriver, the Selenium Manager command we need to invoke from the shell is the following (notice that the flag &lt;code>--debug&lt;/code> is optional, but it helps us to understand what Selenium Manager is doing):&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;gt; selenium-manager --browser chrome --debug
DEBUG Checking chromedriver in PATH
DEBUG Running command: chromedriver --version
DEBUG Output: &amp;#34;&amp;#34;
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=&amp;#39;C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe&amp;#39; get Version /value
DEBUG Output: &amp;#34;\r\r\n\r\r\nVersion=115.0.5790.110\r\r\n\r\r\n\r\r\n\r&amp;#34;
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
&lt;/code>&lt;/pre>&lt;p>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).&lt;/p>
&lt;p>Let&amp;rsquo;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):&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;gt; selenium-manager --browser chrome --debug --browser-version beta
DEBUG Checking chromedriver in PATH
DEBUG Running command: chromedriver --version
DEBUG Output: &amp;#34;&amp;#34;
DEBUG chromedriver not found in PATH
DEBUG Checking chrome in PATH
DEBUG Running command: where chrome
DEBUG Output: &amp;#34;&amp;#34;
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
&lt;/code>&lt;/pre>&lt;h3 id="troubleshooting-in-the-bindings">Troubleshooting in the bindings&lt;/h3>
&lt;p>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 &lt;a href="https://www.selenium.dev/documentation/webdriver/troubleshooting/logging/">Selenium troubleshooting page&lt;/a> for details.&lt;/p>
&lt;h3 id="next-steps">Next steps&lt;/h3>
&lt;p>You can trace the work in progress in the &lt;a href="https://github.com/orgs/SeleniumHQ/projects/5">Selenium Manager project dashboard&lt;/a>. The following features to be implemented in Selenium Manager will continue the automated browser management mechanism, this time for &lt;strong>Firefox&lt;/strong> and &lt;strong>Edge&lt;/strong>. Stay tuned!&lt;/p></description></item><item><title>Blog: Building Selenium</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/building-selenium/</link><pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/building-selenium/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>Enter &lt;a href="https://bazel.build">Bazel&lt;/a>. 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!&lt;/p>
&lt;p>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”.&lt;/p>
&lt;p>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!&lt;/p>
&lt;p>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 &lt;a href="https://github.com/seleniumhq/selenium">our
repo&lt;/a>, 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.&lt;/p>
&lt;p>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 &lt;a href="https://www.youtube.com/watch?v=lqqXHEBvU0Y">see this in
action in this video&lt;/a>,
but needless to say, this can save us a huge amount of time! We can
also ask Bazel to re-run flaky tests&lt;/p>
&lt;p>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
&lt;a href="https://www.engflow.com">EngFlow&lt;/a> 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!&lt;/p>
&lt;p>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.&lt;/p></description></item><item><title>Blog: Java 8 support in Selenium</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-8-support/</link><pubDate>Fri, 09 Jun 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/java-8-support/</guid><description>
&lt;p>“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
&lt;strong>Selenium will stop supporting Java 8 on September 30, 2023&lt;/strong>. This applies for
both the Java bindings and the Selenium Grid.&lt;/p>
&lt;p>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
&lt;a href="https://endoflife.date/java">over a year ago&lt;/a>. In addition, our default HTTP
Client has not had a major release in several years, and a
&lt;a href="https://github.com/SeleniumHQ/selenium/issues/9528">bug&lt;/a> has been found that we can not fix.
We have decided to &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/using-java11-httpclient/">move to the native Java HTTP Client&lt;/a>,
but it requires using Java 11 or greater. The sooner we make this change, the sooner
we can avoid dealing with this issue.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>Please let us know your questions, concerns, and feedback through our
&lt;a href="https://www.selenium.dev/support/#ChatRoom">community chat&lt;/a>.&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.10.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-10-0-released/</link><pubDate>Wed, 07 Jun 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-10-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v112, v113, and v114 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Selenium Manager supports proxy usage by using the proxy information set in the browser options.&lt;/li>
&lt;li>Adding support for &lt;a href="https://learn.microsoft.com/en-us/microsoft-edge/webview2/how-to/webdriver">&lt;code>webview2&lt;/code>&lt;/a> in Edge for Java, JavaScript, and Ruby&lt;/li>
&lt;li>Error messages across bindings now include links to the Selenium documentation.&lt;/li>
&lt;li>Overhaul of the service classes and logging output options.&lt;/li>
&lt;li>Logger in Ruby updated default behavior to match other languages and added features to improve filtering types of logging.&lt;/li>
&lt;li>Python - removal of several sections of deprecated code.
&lt;ul>
&lt;li>Most of them were arguments that can be set in the &lt;a href="https://www.selenium.dev/documentation/webdriver/drivers/options/">&lt;code>Options&lt;/code> classes&lt;/a> (browser values) or &lt;a href="https://www.selenium.dev/documentation/webdriver/drivers/service/">&lt;code>Service&lt;/code> classes&lt;/a> (browser driver values).&lt;/li>
&lt;li>They have been deprecated since the &lt;a href="https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/#python-1">first Selenium 4 release&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;h4 id="seleniumhttpsgithubcomseleniumhqselenium">&lt;a href="https://github.com/SeleniumHQ/selenium">Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;p>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/p>
&lt;p>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>&lt;/p>
&lt;/div>
&lt;/div>
&lt;h4 id="selenium-docs--websitehttpsgithubcomseleniumhqseleniumhqgithubio">&lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io">Selenium Docs &amp;amp; Website&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="docker-seleniumhttpsgithubcomseleniumhqdocker-selenium">&lt;a href="https://github.com/SeleniumHQ/docker-selenium">Docker Selenium&lt;/a>&lt;/h4>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: InvalidSelectorException has changed</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/invalid-selector-exception-has-changed/</link><pubDate>Fri, 21 Apr 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/invalid-selector-exception-has-changed/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>For example, let&amp;rsquo;s check the following code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ArrayList&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;?&lt;/span> &lt;span style="color:#204a87;font-weight:bold">extends&lt;/span> &lt;span style="color:#000">Exception&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#000">expectedExceptions&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ArrayList&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&amp;gt;();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">expectedExceptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">add&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">org&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">openqa&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">NoSuchElementException&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">expectedExceptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">add&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">org&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">openqa&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">StaleElementReferenceException&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">expectedExceptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">add&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">org&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">openqa&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">ElementNotInteractableException&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">expectedExceptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">add&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">org&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">openqa&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">InvalidElementStateException&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">FluentWait&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">&amp;lt;&amp;gt;(&lt;/span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">withTimeout&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Duration&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">ofMillis&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">ELEMENT_IDENTIFICATION_TIMEOUT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">pollingEvery&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Duration&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">ofMillis&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">ELEMENT_IDENTIFICATION_POLLING_DELAY&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">ignoreAll&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">expectedExceptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">until&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">nestedDriver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">nestedDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">findElement&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">By&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">xpath&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;invalid-xpath&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)).&lt;/span>&lt;span style="color:#c4a000">click&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The expected result &lt;em>before this change&lt;/em> would be that the driver waits until the timeout expires and then throw an &lt;code>InvalidSelectorException&lt;/code>.&lt;/p>
&lt;p>This doesn&amp;rsquo;t make much sense because a broken/invalid selector would never fix itself, and hence should throw immediately.&lt;/p>
&lt;p>This was discussed and agreed during the &lt;a href="https://www.selenium.dev/meetings/2022/tlc-08-17/#proposals">TLC meeting on August 17, 2022&lt;/a>,
and implemented through the pull request &lt;a href="https://github.com/SeleniumHQ/selenium/pull/11727">11727&lt;/a> and the following
&lt;a href="https://github.com/SeleniumHQ/selenium/commit/f28144eb72ae1df18f267a5250db6b9b41dc1fdc">commit&lt;/a>.&lt;/p>
&lt;p>With the changes mentioned above, an invalid selector will throw an &lt;code>InvalidSelectorException&lt;/code> immediately.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.9.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-9-0-released/</link><pubDate>Fri, 21 Apr 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-9-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v110, v111, and v112 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Maven BOM for the Java bindings.&lt;/li>
&lt;li>Remote file downloads are &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/grid/configuration/cli_options/#enabling-managed-downloads-by-the-node">now possible through Selenium Grid&lt;/a>.&lt;/li>
&lt;li>First steps taken to phase out CDP in Firefox and replace it with the BiDi implementation.&lt;/li>
&lt;li>&lt;code>InvalidSelectorException&lt;/code> &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/invalid-selector-exception-has-changed/">now extends &lt;code>WebDriverException&lt;/code> instead of &lt;code>NoSuchElementException&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Selenium Manager uses information set in the browser options to get the correct browser driver.&lt;/li>
&lt;li>A &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/grid/configuration/cli_options/#router">sub-path&lt;/a> can be set in Selenium Grid to have a custom Grid url.&lt;/li>
&lt;li>Complete removal of &lt;a href="https://www.selenium.dev/blog/2022/legacy-protocol-support/">Json Wire Protocol support in Java and Grid&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Let's meet at SeleniumConf, Once Again!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/lets-meet-in-person-at-seleniumconf-2023/</link><pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/lets-meet-in-person-at-seleniumconf-2023/</guid><description>
&lt;p>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&amp;rsquo;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!&lt;/p>
&lt;h3 id="heres-a-quick-list-of-what-to-expect">Here&amp;rsquo;s a quick list of what to expect!&lt;/h3>
&lt;h3 id="whats-cooking-in-keynotes">What&amp;rsquo;s cooking in Keynotes?&lt;/h3>
&lt;p>We have Diego Molina kicking things off with
&amp;lsquo;&lt;a href="https://seleniumconf.com/agenda/#selenium-state-of-the-union">Selenium: State of the Union&lt;/a>&amp;rsquo; 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!&lt;/p>
&lt;p>Next up is Erika Chestnut&amp;rsquo;s &amp;lsquo;&lt;a href="https://seleniumconf.com/agenda/#bigger-than-the-box">Bigger Than The Box&lt;/a>&amp;rsquo; 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.&lt;/p>
&lt;p>On day 2, we have first-time SeleniumConf keynote speaker Mark Winteringham from the Ministry of Testing talking about
&amp;lsquo;&lt;a href="https://seleniumconf.com/agenda/#what-exactly-do-you-do-in-test-automation">What Exactly Do You Do in Test Automation?&lt;/a>&amp;rsquo;
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!&lt;/p>
&lt;h3 id="talks-talks-and-more-talks">Talks, talks, and more talks&lt;/h3>
&lt;p>We&amp;rsquo;ve cast our net far and wide this time around.&lt;/p>
&lt;p>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 &lt;a href="https://seleniumconf.com/agenda/">here&lt;/a>.&lt;/p>
&lt;p>Also, we&amp;rsquo;ve got a session on how testing with
&lt;a href="https://seleniumconf.com/agenda/#solving-unemployment-in-africa-with-testing-and-selenium">Selenium is solving unemployment in Africa&lt;/a>.&lt;/p>
&lt;p>The cherry on the cake is the Q&amp;amp;A with the Selenium Committer&amp;rsquo;s &lt;a href="https://seleniumconf.com/agenda/#q-amp-a-with-the-selenium-committers-panel">Panel&lt;/a>
where you&amp;rsquo;ll get to pick the brains of the very people who&amp;rsquo;ve built Selenium.&lt;/p>
&lt;p>In a way, we&amp;rsquo;ve truly tried our best to touch upon the technology, people, and process aspects of testing. We&amp;rsquo;d love to
have you over to catch these experts in action!&lt;/p>
&lt;h3 id="getting-your-hands-dirty-with-tailored-workshops">Getting your hands dirty with tailored workshops&lt;/h3>
&lt;p>Testing is all about exploring. How about exploring and diving into something new?&lt;/p>
&lt;p>We&amp;rsquo;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.&lt;/p>
&lt;p>We truly believe that nothing beats hearing it from the horse&amp;rsquo;s mouth.&lt;/p>
&lt;h3 id="whats-more">What&amp;rsquo;s more?&lt;/h3>
&lt;p>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&amp;rsquo;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.&lt;/p>
&lt;p>What can be more beautiful than getting to interact with the very community that has built and grown Selenium?&lt;/p>
&lt;p>What are you waiting for? &lt;a href="https://seleniumconf.com/register/">Register now&lt;/a>! We can&amp;rsquo;t wait to welcome you to Chicago!&lt;/p></description></item><item><title>Blog: Headless is Going Away!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/headless-is-going-away/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/headless-is-going-away/</guid><description>
&lt;p>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&amp;rsquo;s bindings there is a
convenience method to set this execution mode while setting the browser options. However,
&lt;a href="https://www.selenium.dev/blog/2023/selenium-4-8-0-released/">Selenium 4.8.0&lt;/a> will be deprecated this method
and now users need to set it through arguments when setting the browser options.&lt;/p>
&lt;h3 id="why-is-selenium-doing-this">Why is Selenium doing this?&lt;/h3>
&lt;p>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 &lt;code>true&lt;/code> via the convenience method in Selenium,
it is using the initial method provided by Chromium based browsers.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h3 id="what-are-the-two-headless-modes">What are the two headless modes?&lt;/h3>
&lt;p>The traditional &lt;code>--headless&lt;/code>, 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
&lt;code>--headless=chrome&lt;/code>, after version 109 &lt;code>--headless=new&lt;/code>.&lt;/p>
&lt;p>Using &lt;code>--headless=new&lt;/code> should bring a better experience when using headless with Selenium.&lt;/p>
&lt;p>Thanks to &lt;a href="https://github.com/mdmintz">Michael Mintz&lt;/a> for the detailed
&lt;a href="https://stackoverflow.com/questions/45631715/downloading-with-chrome-headless-and-selenium/73840130#73840130">explanation&lt;/a>!&lt;/p>
&lt;p>Check more details about the &lt;a href="https://developer.chrome.com/articles/new-headless/">new headleass mode at the official Chrome blog&lt;/a>.&lt;/p>
&lt;h3 id="how-can-i-set-headless-mode-from-now-on">How can I set headless mode from now on?&lt;/h3>
&lt;p>In short, users can add the headless mode they want to use through arguments in browser options.&lt;/p>
&lt;h4 id="before">Before&lt;/h4>
&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
data-td-tp-persist="java" aria-controls="tabs-00-00" aria-selected="true">
Java
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
data-td-tp-persist="javascript" aria-controls="tabs-00-01" aria-selected="false">
JavaScript
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
data-td-tp-persist="csharp" aria-controls="tabs-00-02" aria-selected="false">
CSharp
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab"
data-td-tp-persist="ruby" aria-controls="tabs-00-03" aria-selected="false">
Ruby
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-04-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-04" role="tab"
data-td-tp-persist="python" aria-controls="tabs-00-04" aria-selected="false">
Python
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-pane fade show active"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Java" data-lang="Java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ChromeOptions&lt;/span> &lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeOptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">setHeadless&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">get&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;https://selenium.dev&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">quit&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">let&lt;/span> &lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">env&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">builder&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">setChromeOptions&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Options&lt;/span>&lt;span style="color:#000;font-weight:bold">().&lt;/span>&lt;span style="color:#000">headless&lt;/span>&lt;span style="color:#000;font-weight:bold">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">build&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-CSharp" data-lang="CSharp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// C# did not have a convenience method&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-00-03" role="tabpanel" aria-labelled-by="tabs-00-03-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Ruby" data-lang="Ruby">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">Chrome&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">Options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">new&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">headless!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">for&lt;/span> &lt;span style="color:#4e9a06">:chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">options&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000">options&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-00-04" role="tabpanel" aria-labelled-by="tabs-00-04-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Python" data-lang="Python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">ChromeOptions&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">headless&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">True&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">webdriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;http://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h4 id="after">After&lt;/h4>
&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
data-td-tp-persist="java" aria-controls="tabs-01-00" aria-selected="true">
Java
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
data-td-tp-persist="javascript" aria-controls="tabs-01-01" aria-selected="false">
JavaScript
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
data-td-tp-persist="csharp" aria-controls="tabs-01-02" aria-selected="false">
CSharp
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-03" role="tab"
data-td-tp-persist="ruby" aria-controls="tabs-01-03" aria-selected="false">
Ruby
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-04-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-04" role="tab"
data-td-tp-persist="python" aria-controls="tabs-01-04" aria-selected="false">
Python
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-1-content">
&lt;div class="tab-pane fade show active"
id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Java" data-lang="Java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ChromeOptions&lt;/span> &lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeOptions&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">addArguments&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;--headless=new&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">WebDriver&lt;/span> &lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">get&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;https://selenium.dev&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">quit&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">();&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-JavaScript" data-lang="JavaScript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">let&lt;/span> &lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">env&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">builder&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">setChromeOptions&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">addArguments&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;--headless=new&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">build&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">await&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-CSharp" data-lang="CSharp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">options&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeOptions&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">AddArgument&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;--headless=new&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">ChromeDriver&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Navigate&lt;/span>&lt;span style="color:#000;font-weight:bold">().&lt;/span>&lt;span style="color:#000">GoToUrl&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;https://selenium.dev&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Quit&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-01-03" role="tabpanel" aria-labelled-by="tabs-01-03-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Ruby" data-lang="Ruby">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">Options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">args&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;--headless=new&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">Selenium&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">::&lt;/span>&lt;span style="color:#000">WebDriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">for&lt;/span> &lt;span style="color:#4e9a06">:chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">options&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000">options&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-01-04" role="tabpanel" aria-labelled-by="tabs-01-04-tab" tabindex="1">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Python" data-lang="Python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">ChromeOptions&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">add_argument&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;--headless=new&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">webdriver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Chrome&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">options&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;http://selenium.dev&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">quit&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>If you have any questions or comments, please reach out through any of all the available options
shown at our &lt;a href="https://www.selenium.dev/support/">support page&lt;/a>.&lt;/p>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.8.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-8-0-released/</link><pubDate>Mon, 23 Jan 2023 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/selenium-4-8-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v107, v108, and v109 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>Large JS executions have the name as a comment to help understand what payload being sent to/from server/driver.&lt;/li>
&lt;li>Deprecation of headless convenience method. Read more about in the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2023/headless-is-going-away/">headless blog post&lt;/a>.&lt;/li>
&lt;li>Ruby overhauls Options classes (again)&lt;/li>
&lt;li>Initial &lt;a href="https://github.com/w3c/webdriver-bidi">BiDi&lt;/a> support in JavaScript, Ruby, and improvements in Java.&lt;/li>
&lt;li>We&amp;rsquo;re continuing to remove &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/legacy-protocol-support/">Legacy Protocol&lt;/a> classes in Java and Grid.&lt;/li>
&lt;li>Accommodate ability to specify sub-paths in Grid.&lt;/li>
&lt;li>Plus various language specific bug fixes; see the full list of changes in the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads#bindings">Changelogs&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Blog: Year End Review 2022</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/end-of-year-review/</link><pubDate>Fri, 23 Dec 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/end-of-year-review/</guid><description>
&lt;p>It was an amazing year here at the Selenium project, and we wanted to remind you of some of the great things we accomplished.&lt;/p>
&lt;p>In terms of releases, we continued to build on top of Selenium 4 which was launched in October 2021.
This year we published
&lt;a href="https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.2.0">v4.2&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.3.0">v4.3&lt;/a>,
&lt;a href="https://www.selenium.dev/blog/2022/selenium-4-4-0-released/">v4.4&lt;/a>,
&lt;a href="https://www.selenium.dev/blog/2022/selenium-4-5-0-released/">v4.5&lt;/a>,
&lt;a href="https://www.selenium.dev/blog/2022/selenium-4-6-0-released/">v4.6&lt;/a>, and
&lt;a href="https://www.selenium.dev/blog/2022/selenium-4-7-0-released/">v4.7&lt;/a>.
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.&lt;/p>
&lt;p>We introduced the first (beta) version of the embedded
&lt;a href="https://www.selenium.dev/blog/2022/introducing-selenium-manager/">Selenium Manager&lt;/a>.
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
&lt;a href="https://www.selenium.dev/documentation/webdriver/actions_api/wheel/">scrolling&lt;/a> 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: &lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG">Java&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES">Python&lt;/a>, &lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES">Ruby&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md">Javascript&lt;/a>,
&lt;a href="https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG">DotNet&lt;/a>.&lt;/p>
&lt;p>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
&lt;a href="https://www.youtube.com/playlist?list=PL9Z-JgiTsOYRfoG_mcRBlTUIFPIknhQ6S">here&lt;/a>.&lt;/p>
&lt;p>We also held 2 test automation summits: one in
&lt;a href="https://www.eventbrite.com/e/test-automation-summit-san-francisco-tickets-484039263467">San Francisco&lt;/a> and one in
&lt;a href="https://www.selenium.dev/blog/2022/test-automation-summit/">Berlin&lt;/a>. 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
&lt;a href="https://w3c.github.io/webdriver-bidi/">BiDi protocol&lt;/a>, while during the second one the focus was on
&lt;a href="https://appium.io/">Appium&lt;/a> and mobile automation.&lt;/p>
&lt;p>We are kicking off next year with a few surprises.
The &lt;a href="https://www.selenium.dev/blog/2022/seleniumconf-chicago-2023-update/">Selenium Conference in Chicago&lt;/a>
just announced the &lt;a href="https://seleniumconf.com/">Speaker Lineup&lt;/a>. Stay tuned for further details!&lt;/p>
&lt;p>&lt;strong>Many thanks to &lt;a href="https://www.selenium.dev/project/structure">everyone who has contributed to the Selenium project&lt;/a> for all their hard work this year!&lt;/strong>&lt;/p>
&lt;p>And special thanks to all of you who are using, following and supporting the Selenium project.&lt;/p>
&lt;p>From everyone here at SeleniumHQ, may you have the best holidays and an amazing new year. See you in 2023!&lt;/p></description></item><item><title>Blog: SeleniumConf Chicago 2023 Speakers Announced</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/seleniumconf-chicago-2023-update/</link><pubDate>Thu, 22 Dec 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/seleniumconf-chicago-2023-update/</guid><description>
&lt;p>As many of you know, the &lt;a href="https://seleniumconf.com">Selenium Conference&lt;/a> returns to an in-person event next March 28-30, 2023 in Chicago, IL. The Program Chairs &amp;amp; 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&amp;rsquo;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!&lt;/p>
&lt;h3 id="keynote-sessions">Keynote Sessions&lt;/h3>
&lt;p>There will be four plenary keynote presentations across the 2-day conference. Selenium Core Committer &lt;strong>Diego Molina&lt;/strong> will open the conference on Wednesday with the &amp;ldquo;Selenium: State of the Union&amp;rdquo; presentation, followed by Quality &amp;amp; Leadership Coach &lt;strong>Erika Chestnut&lt;/strong> presenting &lt;a href="https://seleniumconf.com/agenda/#bigger-than-the-box">&amp;ldquo;Bigger Than The Box&amp;rdquo;&lt;/a>, 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 &lt;strong>Mark Winteringham&lt;/strong>, Ministry of Testing OpsBoss, presenting &lt;a href="https://seleniumconf.com/agenda/#what-exactly-do-you-do-in-test-automation">&amp;ldquo;What Exactly Do You Do In Test Automation&amp;rdquo;&lt;/a>. The final keynote session will be a &lt;strong>Q&amp;amp;A with the Selenium Committers&lt;/strong> panel.&lt;/p>
&lt;h3 id="confirmed-track-session-presenters">Confirmed Track Session Presenters&lt;/h3>
&lt;p>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:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Anand Bagmar&lt;/strong>, Software Quality Evangelist, Essence of Testing - &lt;a href="https://seleniumconf.com/agenda/#metrics-to-make-your-quality-practices-effective">Metrics to Make Your Quality Practices Effective&lt;/a>&lt;/li>
&lt;li>&lt;strong>Andrew Knight&lt;/strong>, Developer Advocate, Applitools - &lt;a href="https://seleniumconf.com/agenda/#managing-the-test-data-nightmare">Managing the Test Data Nightmare&lt;/a>&lt;/li>
&lt;li>&lt;strong>Benjamin Bischoff&lt;/strong>, Test Automation Engineer, Trivago N.V. - &lt;a href="https://seleniumconf.com/agenda/#identifying-code-smells">Identifying Code Smells&lt;/a>&lt;/li>
&lt;li>&lt;strong>Bijoya Chatterjee&lt;/strong>, Director, Software QE, Sony Playstation - &lt;a href="https://seleniumconf.com/agenda/#using-a-proxy-to-create-a-full-stack-automation-suite">Using A Proxy To Create A Full Stack Automation Suite&lt;/a>&lt;/li>
&lt;li>&lt;strong>Boni García&lt;/strong>, Staff Software Engineer, Sauce Labs - &lt;a href="https://seleniumconf.com/agenda/#selenium-manager-automated-driver-amp-browser-management-for-selenium-webdriver">Selenium Manager: Automated Driver &amp;amp; Browser Management for Selenium WebDriver&lt;/a>&lt;/li>
&lt;li>&lt;strong>Christian Bromann&lt;/strong>, WebdriverIO Project Lead | Software Engineer, Stateful - &lt;a href="https://seleniumconf.com/agenda/#component-testing-with-webdriverio">Component Testing with WebdriverIO&lt;/a>&lt;/li>
&lt;li>&lt;strong>Corina-Adina Pip&lt;/strong>, QA Lead , Deloitte Digital - &lt;a href="https://seleniumconf.com/agenda/#whats-new-and-good-in-selenium">What’s New and Good in Selenium&lt;/a>&lt;/li>
&lt;li>&lt;strong>David Burns&lt;/strong>, Selenium Core Committer | Head of Open Source Program Office, BrowserStack - &lt;a href="https://seleniumconf.com/agenda/#why-browser-engines-real-desktop-browsers-mobile-browsers">Why Browser Engines ≠ Real Desktop Browsers ≠ Mobile Browsers&lt;/a>&lt;/li>
&lt;li>&lt;strong>Dmitriy Gumeniuk&lt;/strong>, Head of Testing Products, EPAM Systems - &lt;a href="https://seleniumconf.com/agenda/#building-quality-gates-and-automated-decisions-in-cicd-pipelines-lessons-learned-with-200000-regressions">Building Quality Gates and Automated Decisions in CI/CD Pipelines. Lessons Learned with 200,000 Regressions.&lt;/a>&lt;/li>
&lt;li>&lt;strong>Eric Frankenberger&lt;/strong>, DevOps Engineer, Genesys Telecommunications - &lt;a href="https://seleniumconf.com/agenda/#deploying-a-large-selenium-grid-with-video-recording-and-autoscaling-when-docker-swarm-amp-kubernetes-are-not-an-option">Deploying a Large Selenium Grid with Video Recording and Autoscaling When Docker Swarm &amp;amp; Kubernetes Are Not an Option&lt;/a>&lt;/li>
&lt;li>&lt;strong>Ibironke Yekinni&lt;/strong>, Sr. Quality Assurance Engineer, Testify Limited - &lt;a href="https://seleniumconf.com/agenda/#solving-unemployment-in-africa-with-testing-and-selenium">Solving Unemployment in Africa with Testing and Selenium&lt;/a>&lt;/li>
&lt;li>&lt;strong>Jan Molak&lt;/strong>, SerenityJS Project Lead, SmartCode Ltd - &lt;a href="https://seleniumconf.com/agenda/#creating-faster-and-more-reliable-web-tests-with-blended-testing">Creating Faster and More Reliable Web Tests with Blended Testing&lt;/a>&lt;/li>
&lt;li>&lt;strong>Jason Huggins&lt;/strong>, Jason Huggins, Creator of Selenium | Founder, Tapster - &lt;a href="https://seleniumconf.com/agenda/#testing-with-real-robots-over-the-internet-what-could-go-wrong">Testing With Real Robots Over the Internet: What Could Go Wrong?&lt;/a>&lt;/li>
&lt;li>&lt;strong>Josh Grant&lt;/strong>, Developer Advocate, Code Intelligence - &lt;a href="https://seleniumconf.com/agenda/#selenium-in-the-clouds-using-cloud-service-providers-with-selenium-webdriver">Selenium in the Clouds: Using Cloud Service Providers with Selenium WebDriver&lt;/a>&lt;/li>
&lt;li>&lt;strong>Liza Ivanova&lt;/strong>, Principal Software Engineer, Salesforce - &lt;a href="https://seleniumconf.com/agenda/#declarative-utam-page-objects">Declarative UTAM Page Objects&lt;/a>&lt;/li>
&lt;li>&lt;strong>Maksim Sadym&lt;/strong>, Software Engineer, Google - &lt;a href="https://seleniumconf.com/agenda/#webdriver-bidi-selenium-why-and-how">WebDriver BiDi + Selenium. Why and How?&lt;/a>&lt;/li>
&lt;li>&lt;strong>Michael Mintz&lt;/strong>, Creator of SeleniumBase | Director of Automation, iboss - &lt;a href="https://seleniumconf.com/agenda/#python-selenium-fundamentals-to-frameworks-with-seleniumbase">Python Selenium: Fundamentals to Frameworks (with SeleniumBase)&lt;/a>&lt;/li>
&lt;li>&lt;strong>Robin Gupta&lt;/strong>, Associate Vice President, Provar - &lt;a href="https://seleniumconf.com/agenda/#do-you-use-selenium-only-for-test-automation">Do You Use Selenium Only for Test Automation?&lt;/a>&lt;/li>
&lt;li>&lt;strong>Roger Abelenda&lt;/strong>, CTO, Abstracta - &lt;a href="https://seleniumconf.com/agenda/#evolve-your-selenium-scripts-into-performance-scripts">Evolve Your Selenium Scripts Into Performance Scripts&lt;/a>&lt;/li>
&lt;li>&lt;strong>Shi Ling Tai&lt;/strong>, CEO, UI-licious - &lt;a href="https://seleniumconf.com/agenda/#untestable-its-just-pressing-a-button-how-hard-could-it-be">UNTestable: It&amp;rsquo;s Just Pressing a Button, How Hard Could it Be?&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="new-workshop-added---state-model-based-testing-using-selenium">New Workshop Added - State Model-Based Testing Using Selenium&lt;/h3>
&lt;p>We&amp;rsquo;re pleased to announce a new addition to the optional pre-conference workshop day, &lt;a href="https://seleniumconf.com/agenda/#state-model-based-testing-using-selenium">State Model-Based Testing Using Selenium&lt;/a>, led by &lt;strong>Ru Cindrea&lt;/strong>, Managing Partner and Senior Test Consultant, Altom Consulting &amp;amp; &lt;strong>Alex Rotaru&lt;/strong>, Co-owner, Altom Consulting. If you haven&amp;rsquo;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.&lt;/p>
&lt;p>This workshop rounds out the core pre-conference workshop offerings, which include a &lt;a href="https://seleniumconf.com/agenda/#selenium-deep-dive">Selenium Deep Dive&lt;/a> session led by Selenium Project Core Committer, &lt;strong>Titus Fortner&lt;/strong>; &lt;a href="https://seleniumconf.com/agenda/#driving-observability-with-selenium-grid-4">Driving Observability with Selenium Grid 4&lt;/a>, led by &lt;strong>Manoj Kumar&lt;/strong>, VP, Developer Relations at LambdaTest and Selenium Project Leadership Committee member, and &lt;a href="https://seleniumconf.com/agenda/#advanced-appium-20">Advanced Appium 2.0&lt;/a>, with &lt;strong>Srini Sekar&lt;/strong> &amp;amp; &lt;strong>Sai Krishna&lt;/strong>, Lead Consultants at Thoughtworks and long-time Appium workshop instructors.&lt;/p>
&lt;p>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. &lt;a href="https://seleniumconf.com/register/">Register today&lt;/a> and make sure you get a seat at the Conference + Workshop session of your choice.&lt;/p>
&lt;h3 id="wait-wait---where-is-the-fix-a-bug-become-a-committer-workshop">Wait, Wait - Where is the Fix a Bug, Become a Committer Workshop?&lt;/h3>
&lt;p>If you&amp;rsquo;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 &lt;a href="https://seleniumconf.com/workshops/#fix-a-bug-become-a-committer">&amp;ldquo;Fix a Bug, Become a Committer&amp;rdquo;&lt;/a>. 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&amp;rsquo;s not a learning session, per se, but more of a doing session, and we thought we&amp;rsquo;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 &lt;a href="https://forms.gle/3iJf81w1x66a2veg8">apply&lt;/a>. Scholarship applicants (more below) are also welcome to apply.&lt;/p>
&lt;h3 id="announcing-the-seleniumconf-chicago-2023-scholarship-program">Announcing the SeleniumConf Chicago 2023 Scholarship Program&lt;/h3>
&lt;p>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&amp;rsquo;re setting aside a number of free tickets, and covering travel expenses, as part of our SeleniumConf Chicago 2023 scholarship program.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h3 id="ready-to-go-but-your-manager-needs-more-convincing">Ready to Go, But Your Manager Needs More Convincing?&lt;/h3>
&lt;p>You&amp;rsquo;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 &lt;a href="https://seleniumconf.com/wp-content/uploads/2022/12/selenium-conf-chicago-2023-convince-your-boss-template.docx">&amp;ldquo;Convince Your Boss&amp;rdquo;&lt;/a> email template and tailor it to your specific rationale using the details you&amp;rsquo;ve gleaned from this post. We&amp;rsquo;d really like to see you next March in Chicago - so &lt;a href="https://seleniumconf.com/register/">register here&lt;/a>!&lt;/p></description></item><item><title>Blog: Selenium 4.7.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-7-0-released/</link><pubDate>Fri, 02 Dec 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-7-0-released/</guid><description>
&lt;p>We&amp;rsquo;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
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Chrome DevTools support is now: v106, v107, and v108 (Firefox still uses v85 for all versions)&lt;/li>
&lt;li>&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/introducing-selenium-manager/">Selenium Manager&lt;/a> now supports IE Driver &amp;amp; has improved error logging.&lt;/li>
&lt;li>Using Edge in IE Mode no longer requires ignoring zoom levels.&lt;/li>
&lt;li>We&amp;rsquo;re continuing to remove &lt;a href="https://www.selenium.dev/blog/2022/legacy-protocol-support/">Legacy Protocol&lt;/a> classes in Java and Grid.&lt;/li>
&lt;li>Java adds WebDriver-BiDi support for Logging.&lt;/li>
&lt;li>.NET includes an explicit target for net6.0 framework.&lt;/li>
&lt;li>Ruby is now publishing &lt;a href="https://github.com/SeleniumHQ/selenium/packages/">nightly gems&lt;/a>&lt;/li>
&lt;li>Plus various language specific bug fixes; see the full list of changes in the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads#bindings">Changelogs&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="contributors">Contributors&lt;/h3>
&lt;p>&lt;strong>Special shout-out to everyone who helped the Selenium Team get this release out!&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Thanks as well to all the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure">Selenium Team Members&lt;/a> who contributed to this release:&lt;/strong>&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Blog: BELLATRIX Test Automation Framework for C# and JAVA</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/</link><pubDate>Wed, 16 Nov 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/</guid><description>
&lt;p>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 &lt;a href="https://www.linkedin.com/in/angelovstanton/">Anton Angelov&lt;/a>. 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.&lt;/p>
&lt;h2 id="bellatrix-test-automation-framework">BELLATRIX Test Automation Framework&lt;/h2>
&lt;p>The first version of &lt;strong>&lt;a href="https://bellatrix.solutions/">BELLATRIX&lt;/a>&lt;/strong> 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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>&lt;a href="https://bellatrix.solutions/">&lt;strong>BELLATRIX official website, download and releases info&lt;/strong>&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/AutomateThePlanet/BELLATRIX">&lt;strong>BELLATRIX official C# GitHub Page&lt;/strong>&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/AutomateThePlanet/BELLATRIX-Java">&lt;strong>BELLATRIX official Java GitHub Page&lt;/strong>&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://docs.bellatrix.solutions/overview/">&lt;strong>BELLATRIX C# Documentation&lt;/strong>&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://docs.java.bellatrix.solutions/overview/">&lt;strong>BELLATRIX Java Documentation&lt;/strong>&lt;/a>&lt;/p>
&lt;p>Let&amp;rsquo;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:
&lt;figure class="img-responsive w-50">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/login-form.png"/>
&lt;/figure>
&lt;/p>
&lt;ol>
&lt;li>Open the &lt;strong>BellatrixTestFramework.sln&lt;/strong>&lt;/li>
&lt;/ol>
&lt;figure class="img-responsive w-50">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/open_the_sln.png"/>
&lt;/figure>
&lt;ol start="2">
&lt;li>Under the &lt;strong>starthere&lt;/strong> folder, find the project you prefer: web, mobile, desktop, API&lt;/li>
&lt;/ol>
&lt;figure class="img-responsive w-50">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/bellatrix-projects-structure.png"/>
&lt;/figure>
&lt;ol start="3">
&lt;li>Open the &lt;strong>BellatrixLoginTest.cs&lt;/strong> file. There you will find a sample test automating the login.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c4a000">[TestClass]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">class&lt;/span> &lt;span style="color:#000">LoginTestsMSTest&lt;/span> &lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000">MSTest&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">WebTest&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">override&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">TestInit&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Navigation&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Navigate&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;http://demos.bellatrix.solutions/my-account/&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c4a000">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#c4a000"> [TestMethod]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">public&lt;/span> &lt;span style="color:#204a87;font-weight:bold">void&lt;/span> &lt;span style="color:#000">SuccessfullyLoginToMyAccount&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">userNameField&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Components&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CreateById&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">TextField&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;username&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">passwordField&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Components&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CreateById&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Password&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;password&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">loginButton&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Components&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CreateByXpath&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Button&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;//button[@name=&amp;#39;login&amp;#39;]&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">userNameField&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">SetText&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;info@yourverybusywebsite.com&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">passwordField&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">SetPassword&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;yourverysecretp4ssw0rd$&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">loginButton&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Click&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">myAccountContentDiv&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Components&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CreateByClass&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Div&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;woocommerce-MyAccount-content&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">myAccountContentDiv&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ValidateInnerTextContains&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Hello John&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">var&lt;/span> &lt;span style="color:#000">logoutLink&lt;/span> &lt;span style="color:#000;font-weight:bold">=&lt;/span> &lt;span style="color:#000">App&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Components&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CreateByInnerTextContaining&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Anchor&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Log out&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">logoutLink&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ValidateIsVisible&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">logoutLink&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Click&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>All available services are available through the main &lt;strong>App&lt;/strong> class. The &lt;strong>Components&lt;/strong> property provides various &lt;strong>Create&lt;/strong> 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.&lt;/p>
&lt;h2 id="why-bellatrix">Why BELLATRIX?&lt;/h2>
&lt;p>Let&amp;rsquo;s quickly list some of the essential things the framework brings to the table:&lt;/p>
&lt;h3 id="multiple-test-environments-configuration">Multiple Test Environments Configuration&lt;/h3>
&lt;p>Every aspect of the framework can be controlled via a rich JSON configuration designed to work for many test environments. &lt;a href="https://docs.bellatrix.solutions/web-automation/control-browser/#configuration">&lt;strong>Web Project Configuration&lt;/strong>&lt;/a>.&lt;/p>
&lt;h3 id="customization">Customization&lt;/h3>
&lt;p>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 &lt;a href="https://bellatrix.solutions/features/web/extend-the-framework-to-fit-your-needs/">&lt;strong>writing your own plug-ins&lt;/strong>&lt;/a>.&lt;/p>
&lt;h3 id="test-reliability">Test Reliability&lt;/h3>
&lt;p>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 &lt;a href="https://bellatrix.solutions/features/web/boost-test-reliability/">&lt;strong>waiting for elements&lt;/strong>&lt;/a>. Furthermore, when you perform an action or assertion against an element, we guarantee that once returned, it will be present.&lt;/p>
&lt;p>A significant part of your tests are the assertions - checking whether some conditions are met. To handle such scenarios, we created elements &lt;strong>Validate&lt;/strong> methods. They internally handle the whole complexity of waiting for some condition to happen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">updateCart&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ValidateIsDisabled&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">totalSpan&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ValidateInnerTextIs&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;120.00€&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">timeout&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">30&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">sleepInterval&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">messageAlert&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ValidateIsNotVisible&lt;/span>&lt;span style="color:#000;font-weight:bold">();&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="complex-controls">Complex Controls&lt;/h3>
&lt;p>BELLATRIX provides API that makes handling HTML tables and grids much easier &lt;strong>&lt;a href="https://docs.bellatrix.solutions/web-automation/complex-components/">HTML tables and grids&lt;/a>&lt;/strong>.
&lt;figure class="img-responsive w-50">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/bellatrix-test-automation-framework/grid-html-example.png"/>
&lt;/figure>
Here is an example for asserting grid cells:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-csharp" data-lang="csharp">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">TestGrid&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ForEachCell&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">cell&lt;/span> &lt;span style="color:#000;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">cell&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">AssertFontSize&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;14px&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">TestGrid&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">GetCell&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Firstname&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">).&lt;/span>&lt;span style="color:#000">ValidateInnerTextIs&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;Mary&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">TestGrid&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">GetCell&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">).&lt;/span>&lt;span style="color:#000">ValidateInnerTextIs&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;John&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">TestGrid&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">GetCell&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#000">Employee&lt;/span>&lt;span style="color:#000;font-weight:bold">&amp;gt;(&lt;/span>&lt;span style="color:#000">cell&lt;/span> &lt;span style="color:#000;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#000">cell&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">PersonalEmail&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">).&lt;/span>&lt;span style="color:#000">ValidateInnerTextIs&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;mary@hotmail.com&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There is much more complex stuff that you can do with both components so check the &lt;strong>&lt;a href="https://docs.bellatrix.solutions/web-automation/complex-components/">official documentation&lt;/a>&lt;/strong>.&lt;/p>
&lt;h2 id="integrations">Integrations&lt;/h2>
&lt;p>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.&lt;/p>
&lt;h3 id="dynamic-test-cases">Dynamic Test Cases&lt;/h3>
&lt;p>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.&lt;/p>
&lt;h3 id="ai-validation-of-pdfs-and-image">AI Validation of PDFs and Image&lt;/h3>
&lt;p>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.&lt;/p>
&lt;h3 id="email-testing">Email Testing&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>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.
&lt;strong>&lt;a href="https://docs.bellatrix.solutions/product-integrations/">All BELLATRIX Integrations&lt;/a>&lt;/strong>&lt;/p>
&lt;p>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 &lt;strong>&lt;a href="https://bellatrix.solutions/roadmap/release-3-6-0-0-chamaeleon/">release notes history&lt;/a>&lt;/strong>. 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.&lt;/p>
&lt;p>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 &lt;strong>&lt;a href="https://bellatrix.solutions/contact-us/">contact us form&lt;/a>&lt;/strong>.&lt;/p></description></item><item><title>Blog: Introducing Selenium Manager</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/introducing-selenium-manager/</link><pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/introducing-selenium-manager/</guid><description>
&lt;p>Most people&amp;rsquo;s first experience with Selenium ends up with an error message like this one:&lt;/p>
&lt;pre tabindex="0">&lt;code>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
&lt;/code>&lt;/pre>&lt;p>Then they have to search the web for instructions on what to do with the drivers they download.&lt;/p>
&lt;h3 id="selenium-now-with-batteries-included">Selenium: now with batteries included!&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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 &lt;code>PATH&lt;/code>.&lt;/p>
&lt;p>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&amp;rsquo;d like to help us test it, though,
delete your drivers or remove your third party driver manager and things should still &amp;ldquo;just work.&amp;rdquo; If they don&amp;rsquo;t,
please file a &lt;a href="https://github.com/SeleniumHQ/selenium/issues">bug report&lt;/a>.&lt;/p>
&lt;p>Future releases of Selenium Manager will eventually even download browsers if necessary.&lt;/p>
&lt;h3 id="inspired-by-open-source-and-the-selenium-community">Inspired by Open Source and the Selenium Community&lt;/h3>
&lt;p>Selenium Manager is not a completely new solution. Over the years, several third-party projects in the Selenium
ecosystem emerged. Such as: &lt;a href="https://bonigarcia.dev/webdrivermanager/">WebDriverManager&lt;/a> for Java,
&lt;a href="https://pypi.org/project/webdriver-manager/">webdriver-manager&lt;/a> for Python,
&lt;a href="https://github.com/titusfortner/webdrivers">webdrivers&lt;/a> for Ruby, and
&lt;a href="https://github.com/rosolko/WebDriverManager.Net">WebDriverManager.Net&lt;/a> for C#.&lt;/p>
&lt;p>All these projects served as an
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/troubleshooting/errors/driver_location/#driver-management-libraries">inspiration&lt;/a>
and as a clear sign that the community needed this feature to be
built-in Selenium. In addition, a &lt;a href="https://www.selenium.dev/blog/2021/selenium-survey-results/">survey&lt;/a>
done on January 2021 showed that most Selenium users want to get rid of the driver management
problem. Plus, the fact that the
&lt;a href="https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location/">driver installation&lt;/a> page is
by far the most visited one in the Selenium documentation.&lt;/p>
&lt;h3 id="selenium-manager-in-detail">Selenium Manager in detail&lt;/h3>
&lt;p>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 &lt;code>PATH&lt;/code> or no third party driver manager is being used.&lt;/p>
&lt;p>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
&lt;a href="https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager">Selenium repository&lt;/a>. Check the different
parameters and options by running the following command:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ ./selenium-manager --help
&lt;/code>&lt;/pre>&lt;p>A quick example showing how &lt;code>ChromeDriver&lt;/code> gets configured can be seen below:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ ./selenium-manager --browser chrome
INFO /home/boni/.cache/selenium/chromedriver/linux64/106.0.5249.61/chromedriver
&lt;/code>&lt;/pre>&lt;p>If you maintain a WebDriver based project and would like to use Selenium Manager as well,
join us in our &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/support/#ChatRoom">community channels&lt;/a> and we would be happy to help.
Also, if you are interested in contributing, for detailed instructions and information
check the project&amp;rsquo;s &lt;a href="https://github.com/SeleniumHQ/selenium/tree/trunk/rust">README&lt;/a>.&lt;/p>
&lt;h3 id="next-steps">Next steps&lt;/h3>
&lt;p>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 &lt;a href="https://github.com/SeleniumHQ/selenium/issues">issue tracker&lt;/a> and join
the conversation through our &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/support/#ChatRoom">community channels&lt;/a>. Looking forward to your feedback!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium 4.6.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-6-0-released/</link><pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-6-0-released/</guid><description>
&lt;p>We&amp;rsquo;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
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Adding support for CDP released in Chrome v105, v106, and v107, while v104 was removed&lt;/li>
&lt;li>Initial implementation of &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/introducing-selenium-manager/">Selenium Manager&lt;/a> across bindings&lt;/li>
&lt;li>Improvements to the new Java HTTP 11 client and important Grid fixes.&lt;/li>
&lt;li>Observability enabled in the &lt;a href="https://github.com/SeleniumHQ/docker-selenium#tracing-in-grid">Docker-Selenium images&lt;/a>.&lt;/li>
&lt;li>Various language specific bug fixes; see the full list of changes in the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads#bindings">Changelogs&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Huge thanks to all the contributors who made this version possible:&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Blog: Selenium 4.5.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-5-0-released/</link><pubDate>Wed, 28 Sep 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-5-0-released/</guid><description>
&lt;p>We&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">Downloads Page&lt;/a>.&lt;/p>
&lt;h3 id="highlights">Highlights&lt;/h3>
&lt;ul>
&lt;li>Adding support for CDP released in Chrome v105 and v106, while v102 and v103 were removed&lt;/li>
&lt;li>Updates to &lt;a href="https://www.selenium.dev/documentation/webdriver/support_features/select_lists/">Select functionality&lt;/a>&lt;/li>
&lt;li>Improved experience for &lt;a href="https://www.selenium.dev/documentation/webdriver/browsers/firefox#add-ons">Firefox Add-ons&lt;/a>&lt;/li>
&lt;li>IE driver automatically uses &lt;a href="https://titusfortner.com/2022/09/28/edge-ie-mode.html">Edge in IE Mode if IE is not present&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.selenium.dev/blog/2022/using-java11-httpclient">Java 11 HTTP Client supported&lt;/a> for Java users running Java versions 11+&lt;/li>
&lt;li>Various language specific bug fixes; see the full list of changes in the
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads#bindings">Changelogs&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Huge thanks to all the external contributors who made this version possible:&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Blog: Using Java 11+ HTTP Client in Selenium 4.5.0 and beyond</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/using-java11-httpclient/</link><pubDate>Fri, 16 Sep 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/using-java11-httpclient/</guid><description>
&lt;h3 id="current-http-client-used-in-selenium">Current HTTP client used in Selenium&lt;/h3>
&lt;p>Selenium uses an HTTP client and associated WebSocket client for multiple purposes&lt;/p>
&lt;ul>
&lt;li>To send commands to the WebDriver&lt;/li>
&lt;li>To send commands from the Selenium client library to the Grid&lt;/li>
&lt;li>For various Grid components to communicate with each other depending on the Grid mode&lt;/li>
&lt;li>To create ChromeDevTools protocol and BiDi protocol sessions&lt;/li>
&lt;/ul>
&lt;p>Currently, Selenium uses &lt;a href="https://github.com/AsyncHttpClient/async-http-client">AsyncHttpClient&lt;/a>.
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.&lt;/p>
&lt;h3 id="why-does-selenium-want-to-move-to-java-11-http-client">Why does Selenium want to move to Java 11+ HTTP Client?&lt;/h3>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>So as a first step towards this move, the Java 11+ HTTP client from Selenium 4.5.0 and above.&lt;/p>
&lt;h3 id="using-java-11-http-client-in-selenium">Using Java 11+ HTTP Client in Selenium&lt;/h3>
&lt;h4 id="prerequisites">Prerequisites:&lt;/h4>
&lt;ul>
&lt;li>Project configured to use Java 11+&lt;/li>
&lt;li>Using Selenium 4.5.0 as a minumum version, find the latest in the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads&lt;/a> page.&lt;/li>
&lt;/ul>
&lt;h4 id="integrating-the-java-11-client">Integrating the Java 11+ client&lt;/h4>
&lt;p>Java 11+ HTTP client sits in its own artifact. It can be imported into projects that use Java 11+.&lt;/p>
&lt;h5 id="add-the-artifact-the-pom">Add the artifact the POM&lt;/h5>
&lt;p>Add the follow dependencies to your pom.xml&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;lt;dependency&amp;gt;
&amp;lt;groupId&amp;gt;org.seleniumhq.selenium&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;selenium-java&amp;lt;/artifactId&amp;gt;
&amp;lt;version&amp;gt;4.5.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
&amp;lt;groupId&amp;gt;org.seleniumhq.selenium&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;selenium-http-jdk-client&amp;lt;/artifactId&amp;gt;
&amp;lt;version&amp;gt;4.5.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code>&lt;/pre>&lt;p>&lt;strong>NOTE&lt;/strong>: In the dependencies above version &lt;code>4.5.0&lt;/code> is shown, however we recommend you to check the
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads&lt;/a> page to use the latest version released. Make sure the versions used are
matching.&lt;/p>
&lt;h5 id="set-the-system-property">Set the system property&lt;/h5>
&lt;p>Set the system property to indicate that Java 11+ Http client needs to be used.
By default, it uses the AsyncHttpClient.&lt;/p>
&lt;pre tabindex="0">&lt;code> System.setProperty(&amp;#34;webdriver.http.factory&amp;#34;, &amp;#34;jdk-http-client&amp;#34;);
&lt;/code>&lt;/pre>&lt;p>You are all set up to leverage the newly supported client.
The user-experience remains the unchanged. Everything else works as expected.&lt;/p>
&lt;h4 id="using-the-java-11-client-in-grid">Using the Java 11+ client in Grid&lt;/h4>
&lt;p>To do that, you will need to download the &lt;code>selenium-http-jdk-client&lt;/code> jar file and
use the &lt;code>--ext&lt;/code> flag to make it available in the Grid jar&amp;rsquo;s classpath.&lt;/p>
&lt;p>The jar file can be downloaded directly from &lt;a href="https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-http-jdk-client/4.5.0/">repo1.maven.org&lt;/a>
and then start the Grid in the following way:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>java -Dwebdriver.http.factory&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>jdk-http-client -jar selenium-server-4.5.0.jar -—ext selenium-http-jdk-client-4.5.0.jar standalone
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>An alternative to downloading the &lt;code>selenium-http-jdk-client&lt;/code> jar file is to use &lt;a href="https://get-coursier.io/docs/cli-installation">Coursier&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>java -Dwebdriver.http.factory&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>jdk-http-client -jar selenium-server-4.5.0.jar —-ext &lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>coursier fetch -p org.seleniumhq.selenium:selenium-http-jdk-client:4.5.0&lt;span style="color:#204a87;font-weight:bold">)&lt;/span> standalone
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you are using the Hub/Node(s) mode or the Distributed mode, setting the &lt;code>-Dwebdriver.http.factory=jdk-http-client&lt;/code> and &lt;code>—-ext&lt;/code> flags
needs to be done for each one of the components.&lt;/p>
&lt;p>&lt;strong>NOTE&lt;/strong>: In the dependencies above version &lt;code>4.5.0&lt;/code> is shown, however we recommend you to check the
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">downloads&lt;/a> page to use the latest version released. Make sure the versions used are
matching.&lt;/p>
&lt;p>Huge thanks to Simon Stewart (&lt;a href="https://twitter.com/shs96c">@shs96c&lt;/a>) for making this possible with his contribution!&lt;/p></description></item><item><title>Blog: Dev and Beta Channel Browsers via Docker Selenium</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/dev-and-beta-channel-browsers-via-docker-selenium/</link><pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/dev-and-beta-channel-browsers-via-docker-selenium/</guid><description>
&lt;p>The Docker Selenium browser Beta and Dev channel releases are now regularly published to &lt;a href="https://hub.docker.com/u/selenium">Docker Hub&lt;/a> 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 &lt;em>before&lt;/em> those issues have an impact on their users.&lt;/p>
&lt;h3 id="what-are-release-channels">What are &amp;ldquo;release channels&amp;rdquo;?&lt;/h3>
&lt;p>Here&amp;rsquo;s some background on release channels: Google, Mozilla, and Microsoft all maintain different &amp;ldquo;channels&amp;rdquo; for their respective browser releases. Most end users use the &amp;ldquo;Stable&amp;rdquo; channel. The Stable channel releases have passed rigorous testing, and these versions are considered &amp;ldquo;production-ready&amp;rdquo;. Up until now, this was the only option for a tester or developer when using Docker Selenium. Today, we&amp;rsquo;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.&lt;/p>
&lt;p>For clarity, here is Google&amp;rsquo;s description of these 3 channels from &lt;a href="https://www.chromium.org/getting-involved/dev-channel/">their &amp;ldquo;Chrome Release Channels&amp;rdquo; page&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Stable channel:&lt;/strong> 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&amp;rsquo;s updated roughly every two-three weeks for minor releases, and every 6 weeks for major releases.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&lt;strong>Beta channel:&lt;/strong> If you are interested in seeing what&amp;rsquo;s next, with minimal risk, Beta channel is the place to be. It&amp;rsquo;s updated every week roughly, with major updates coming every six weeks, more than a month before the Stable channel will get them.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>&lt;strong>Dev channel:&lt;/strong> If you want to see what&amp;rsquo;s happening quickly, then you want the Dev channel. The Dev channel gets updated once or twice weekly, and it shows what we&amp;rsquo;re working on right now. There&amp;rsquo;s no lag between major versions, whatever code we&amp;rsquo;ve got, you will get. While this build does get tested, it is still subject to bugs, as we want people to see what&amp;rsquo;s new as soon as possible.&lt;/p>
&lt;/blockquote>
&lt;h3 id="standalone-usage">Standalone Usage:&lt;/h3>
&lt;p>To use these new Docker Selenium container images in Standalone mode, run the following commands:&lt;/p>
&lt;p>&lt;strong>Chrome Beta:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:beta
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Chrome Dev:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-chrome:dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Firefox Beta:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:beta
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Firefox Dev:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-firefox:dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Edge Beta:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:beta
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Edge Dev:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ docker run --rm -it -p 4444:4444 -p 7900:7900 --shm-size 2g selenium/standalone-edge:dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="selenium-grid">Selenium Grid&lt;/h3>
&lt;p>To run these container images in a Selenium Grid, we&amp;rsquo;ll use docker-compose. For instance, this example shows how to run a Selenium Grid with Chrome, Firefox, and Edge on the Beta channel:&lt;/p>
&lt;p>&lt;strong>docker-compose-v3-beta-channel.yml:&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># To execute this docker-compose yml file use `docker-compose -f docker-compose-v3-beta-channel.yml up`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Add the `-d` flag at the end for detached execution&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3-beta-channel.yml down`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>version: &lt;span style="color:#4e9a06">&amp;#34;3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>services:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> chrome:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> image: selenium/node-chrome:beta
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shm_size: 2gb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> depends_on:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> environment:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_HOST&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_PUBLISH_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4442&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_SUBSCRIBE_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> edge:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> image: selenium/node-edge:beta
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shm_size: 2gb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> depends_on:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> environment:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_HOST&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_PUBLISH_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4442&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_SUBSCRIBE_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> firefox:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> image: selenium/node-firefox:beta
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shm_size: 2gb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> depends_on:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> environment:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_HOST&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_PUBLISH_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4442&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#000">SE_EVENT_BUS_SUBSCRIBE_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> selenium-hub:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> image: selenium/hub:latest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> container_name: selenium-hub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ports:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#4e9a06">&amp;#34;4442:4442&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#4e9a06">&amp;#34;4443:4443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#4e9a06">&amp;#34;4444:4444&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To run on the more cutting edge &amp;ndash; and hence potentially more buggy &amp;ndash; Dev channel, simply replace the &amp;ldquo;beta&amp;rdquo; tags with &amp;ldquo;dev&amp;rdquo;.&lt;/p>
&lt;h3 id="support">Support&lt;/h3>
&lt;p>These Beta and Dev images represent pre-release browsers and WebDrivers, and they&amp;rsquo;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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/support/">various support channels&lt;/a>.&lt;/p></description></item><item><title>Blog: Scaling a Kubernetes Selenium Grid with KEDA</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/scaling-grid-with-keda/</link><pubDate>Fri, 19 Aug 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/scaling-grid-with-keda/</guid><description>
&lt;h2 id="the-issue">The Issue&lt;/h2>
&lt;p>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.&lt;/p>
&lt;p>The issue is described quite well in &lt;a href="https://sahajamit.medium.com/spinning-up-your-own-auto-scalable-selenium-grid-in-kubernetes-part-2-15b11f228ed8">this blog post&lt;/a>.
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:&lt;/p>
&lt;ol>
&lt;li>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&amp;rsquo;t enough CPU usage for the HPA to decide
that a scale-up is needed, leaving tests waiting in the queue unnecessarily.&lt;/li>
&lt;li>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.&lt;/li>
&lt;/ol>
&lt;h2 id="how-keda-helps">How KEDA Helps&lt;/h2>
&lt;p>&lt;a href="https://keda.sh/">KEDA&lt;/a> is a &lt;strong>free and open-source&lt;/strong> Kubernetes
event-driven autoscaling solution that extends the feature set of
K8S&amp;rsquo; HPA. This is done via plugins written by the community that
feed KEDA&amp;rsquo;s metrics server with the information it needs to scale
specific deployments up and down.&lt;/p>
&lt;p>Specifically for Selenium Grid, we have a &lt;a href="https://keda.sh/docs/latest/scalers/selenium-grid-scaler/">plugin&lt;/a>
that will tie into our grid to get the information it needs. Example of the used trigger:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">triggers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-grid&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">url&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;http://selenium-grid-url-or-ip:4444/graphql&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">browserName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;chrome&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>All of this gets saved as a Scaled-Object like so:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">keda.sh/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ScaledObject&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-scaledobject&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">&amp;lt;namespace of your browser pods&amp;gt;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">deploymentName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-node-deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">minReplicaCount&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">maxReplicaCount&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">80&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">scaleTargetRef&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-node-deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">triggers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-grid&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">url&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium-grid-url-or-ip:4444/graphql&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">browserName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;chrome&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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.&lt;/p>
&lt;p>Check more details at &lt;a href="https://keda.sh/docs/latest/concepts/scaling-deployments/">the documentation for Scaled-Object in KEDA&lt;/a>.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h2 id="using-prestop-and-drain">Using PreStop and Drain&lt;/h2>
&lt;p>To combat this we are going to use a combination of K8s
&lt;a href="https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks">PreStop&lt;/a>
and Selenium Grid&amp;rsquo;s &lt;a href="https://www.selenium.dev/documentation/grid/advanced_features/endpoints/#drain-node">Drain&lt;/a>
functionality.&lt;/p>
&lt;ul>
&lt;li>&lt;code>PreStop&lt;/code> allows us to set a command or chain of commands that is run to completion before the container is told to stop.&lt;/li>
&lt;li>Drain tells the selenium browser pod to finish its current test and then shut down.&lt;/li>
&lt;/ul>
&lt;p>Together these look like so in our browser pod yaml:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">terminationGracePeriodSeconds&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">3600&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">containers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">lifecycle&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">preStop&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">exec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">command&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;/bin/sh&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;-c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;curl --request POST &amp;#39;localhost:5555/se/grid/node/drain&amp;#39; --header &amp;#39;X-REGISTRATION-SECRET;&amp;#39;; tail --pid=$(pgrep -f &amp;#39;[n]ode --bind-host false --config /opt/selenium/config.toml&amp;#39;) -f /dev/null; sleep 30s&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="breaking-this-down">Breaking this down&lt;/h4>
&lt;ul>
&lt;li>&lt;code>terminationGracePeriodSeconds&lt;/code> 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.&lt;/li>
&lt;li>When the pod is told to stop, the &lt;code>PreStop&lt;/code> command is ran first.&lt;/li>
&lt;li>We curl the &lt;code>localhost&lt;/code> 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 &lt;a href="https://www.selenium.dev/documentation/grid/advanced_features/endpoints/#drain">can be found in the Selenium Grid documentation&lt;/a>.&lt;/li>
&lt;li>We then tail the internal node process that will continue to run until the node has been drained.&lt;/li>
&lt;li>After this we give the pod 30 seconds to finish anything else before giving the full termination command.&lt;/li>
&lt;/ul>
&lt;p>And with that our application can now safely scale down our selenium browser deployments!&lt;/p>
&lt;h2 id="from-start-to-finish">From Start to Finish&lt;/h2>
&lt;h3 id="install-keda">Install KEDA&lt;/h3>
&lt;ul>
&lt;li>You need to use version 2.8.0 or later, you can find the latest version number at the
&lt;a href="https://keda.sh/docs/latest/scalers/selenium-grid-scaler/">Selenium Grid Scaler docs&lt;/a>.&lt;/li>
&lt;li>&lt;code>kubectl apply -f https://github.com/kedacore/keda/releases/download/&amp;lt;Version_Number_Here&amp;gt;/keda-&amp;lt;Version_Number_Here&amp;gt;.yaml&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="create-and-apply-your-scaled-objects">Create and apply your scaled object(s)&lt;/h3>
&lt;p>As described earlier your &lt;a href="https://keda.sh/docs/latest/scalers/selenium-grid-scaler/">scaled object&lt;/a> will look like so:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">keda.sh/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ScaledObject&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-scaledobject&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">&amp;lt;namespace of your browser pods&amp;gt;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">deploymentName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-node-deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">minReplicaCount&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">maxReplicaCount&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">80&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">scaleTargetRef&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-chrome-node-deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">triggers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-grid&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">url&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium-grid-url-or-ip:4444/graphql&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">browserName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;chrome&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will need one of these for every browser you wish to scale.&lt;/p>
&lt;p>Things to edit:&lt;/p>
&lt;ol>
&lt;li>&lt;code>namespace&lt;/code> should be the namespace that your selenium browser pods exist in&lt;/li>
&lt;li>&lt;code>deploymentName&lt;/code> are the name of your browser deployment&lt;/li>
&lt;li>&lt;code>name&lt;/code> (within spec) is also the name of your browser deployment&lt;/li>
&lt;li>&lt;code>url&lt;/code> is the url of your selenium grid&lt;/li>
&lt;li>&lt;code>browserName&lt;/code> is the name of the browser you are using&lt;/li>
&lt;li>&lt;code>minReplicaCount&lt;/code> and &lt;code>maxReplicaCount&lt;/code> are the min and maximum pod count you want to have&lt;/li>
&lt;/ol>
&lt;p>If you plan to scale with Edge you will need at least version &lt;code>2.8.0&lt;/code> of KEDA and will
need to include &lt;code>sessionBrowserName&lt;/code> as well in the trigger metadata:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">triggers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">type&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">selenium-grid&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">url&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://selenium-grid-url-or-ip:4444/graphql&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">browserName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;MicrosoftEdge&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">sessionBrowserName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;msedge&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is due to a name change between the Edge sessions in the queue and the active
sessions and is &lt;a href="https://github.com/kedacore/keda/pull/3062">addressed through this pull request&lt;/a>.&lt;/p>
&lt;p>Once you have that ready just save it as a yaml file and apply with:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kubectl apply -f ./&amp;lt;scaled-object-file-name&amp;gt;.yaml --namespace=&amp;lt;browser_namespace&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="add-prestop-commands-to-your-browser-pods">Add PreStop commands to your browser pods&lt;/h3>
&lt;ol>
&lt;li>Set your &lt;code>terminationGracePeriodSeconds&lt;/code> 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.&lt;/li>
&lt;li>Add the &lt;code>PreStop&lt;/code> command to the container lifecycle spec:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">terminationGracePeriodSeconds&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">3600&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">containers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">lifecycle&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">preStop&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">exec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">command&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;/bin/sh&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;-c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;curl --request POST &amp;#39;localhost:5555/se/grid/node/drain&amp;#39; --header &amp;#39;X-REGISTRATION-SECRET;&amp;#39;; tail --pid=$(pgrep -f &amp;#39;[n]ode --bind-host false --config /opt/selenium/config.toml&amp;#39;) -f /dev/null; sleep 30s&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That is it, your Selenium Grid pods should now scale up and down properly without any lost sessions!&lt;/p></description></item><item><title>Blog: Selenium 4.4.0 Released!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-4-0-released/</link><pubDate>Tue, 09 Aug 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/selenium-4-4-0-released/</guid><description>
&lt;p>We&amp;rsquo;re very happy to announce the release of Selenium 4.4.0. We&amp;rsquo;re shipping
this for Java, .Net, Python, Ruby, and JavaScript, so if you&amp;rsquo;re using any
of those languages, go and grab it from your package manager of choice!&lt;/p>
&lt;p>Some of the main highlights are:&lt;/p>
&lt;ul>
&lt;li>Adding support for CDP released in Chrome v104, while v101 was removed&lt;/li>
&lt;li>Virtual authenticator feature was completed across languages.&lt;/li>
&lt;li>All language bindings will throw an error when &lt;code>w3c: false&lt;/code> is set in &lt;code>ChromeOptions&lt;/code>&lt;/li>
&lt;li>Improved health checks and requests with non W3C locators for Relay Nodes in Grid&lt;/li>
&lt;/ul>
&lt;p>Check the complete changelog and download the artifacts at the
&lt;a href="https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.4.0">Selenium 4.4.0 release in GitHub&lt;/a>
or directly from the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">Selenium site&lt;/a>.&lt;/p>
&lt;p>Huge thanks to all the contributors who made this version possible:&lt;/p>
&lt;div class="row justify-content-center">
&lt;div class="col-11 p-4 bg-transparent">
&lt;div class="row justify-content-center">
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;div class="alert alert-primary bg-transparent col-10 ps-lg-5 m-4" role="alert">
&lt;h4 class="alert-heading">&lt;code>SELENIUM_CI_TOKEN&lt;/code> not set&lt;/h4>
&lt;p>
If you want to render content fetched from the GitHub API, please create a
&lt;a
href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
target="_blank"
>
personal access token
&lt;/a> and set it as an environment variable named &lt;code>SELENIUM_CI_TOKEN&lt;/code>. More information about token scopes can
be seen at
&lt;a
href="https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes"
target="_blank"
>
available scopes GitHub docs
&lt;/a>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Blog: Test Automation Summit Berlin</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/test-automation-summit/</link><pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/test-automation-summit/</guid><description>
&lt;p>Have you ever wanted to contribute to an open source testing project, but couldn&amp;rsquo;t figure out where to start?
If so, fill out &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSe6u6_bS59njqhhSwfnWSlGxlqQaNJ8xouDBR6YM-7pQYvJFQ/viewform">this form&lt;/a>
to apply for an invitation to join the Open Source Test Automation Summit on August 26 in Berlin,
sponsored by &lt;a href="https://www.selenium.dev">Selenium&lt;/a> and hosted by &lt;a href="https://saucelabs.com/">Sauce Labs&lt;/a>.
You can review the list of available projects below and select the one that you&amp;rsquo;d like to contribute to. We&amp;rsquo;ll be in touch soon if you
are selected to join us.
&lt;br/>&lt;/p>
&lt;p>&lt;strong>Update 7/22/2022:&lt;/strong>
Application deadline is July 28! We&amp;rsquo;ll contact everyone by Friday, July 29.&lt;/p>
&lt;figure class="img-responsive w-50">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/test-automation-summit/TAS_Berlin.png"/>
&lt;/figure>
&lt;p>This will &lt;em>&lt;strong>not&lt;/strong>&lt;/em> 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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;h3 id="objectives">Objectives&lt;/h3>
&lt;p>At the end of the session you will be able to:&lt;/p>
&lt;ul>
&lt;li>Build the project on your computer&lt;/li>
&lt;li>Execute the existing test suite for the project&lt;/li>
&lt;li>Write new tests for the project&lt;/li>
&lt;li>Add a feature or fix a bug&lt;/li>
&lt;/ul>
&lt;h3 id="agenda-subject-to-change">Agenda (subject to change)&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Start&lt;/th>
&lt;th>End&lt;/th>
&lt;th>Activity&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>0900&lt;/td>
&lt;td>0930&lt;/td>
&lt;td>Breakfast&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0930&lt;/td>
&lt;td>1000&lt;/td>
&lt;td>Talk: &amp;ldquo;State of WebDriver Ecosystem&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>1100&lt;/td>
&lt;td>Lightning talks about participating projects&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1100&lt;/td>
&lt;td>1200&lt;/td>
&lt;td>Split into working groups and walk through projects&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1200&lt;/td>
&lt;td>1300&lt;/td>
&lt;td>Lunch&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1300&lt;/td>
&lt;td>1630&lt;/td>
&lt;td>Continue with working sessions&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1630&lt;/td>
&lt;td>1700&lt;/td>
&lt;td>Wrap up&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1700&lt;/td>
&lt;td>&lt;/td>
&lt;td>Happy hour&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="participating-projects">Participating Projects&lt;/h3>
&lt;p>The following maintainers are will be present to assist you in working on their project:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Maintainer&lt;/th>
&lt;th>Project(s)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/asolntsev">Andrei Solntsev&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://selenide.org/">Selenide&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/boni_gg">Boni Garcia&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/bonigarcia/webdrivermanager">WebDriverManager&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/bromann">Christian Bromann&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://webdriver.io/">WebdriverIO&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/AutomatedTester">David Burns&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://wpt.fyi/results/webdriver/tests">W3C Web Platform Tests&lt;/a>, &lt;a href="https://www.selenium.dev/">Selenium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/diegofmolina">Diego Molina&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://www.selenium.dev/">Selenium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.linkedin.com/in/filip-cynarski-39b3b260/">Filip Cynarski&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/FluentLenium/FluentLenium">FluentLenium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/JanMolak">Jan Molak&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://serenity-js.org/">Serenity/JS&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://www.linkedin.com/in/mikkonenjani/">Jani Mikkonen&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://robotframework.org/SeleniumLibrary/">Robot Framework&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/mykola-mokhnach">Nick Mokhnach&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://appium.io/">Appium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/HtmlUnit">Ronald Brill&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/SeleniumHQ/htmlunit-driver">HTMLUnit Driver&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/shs96c">Simon Stewart&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://www.selenium.dev/">Selenium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/titusfortner">Titus Fortner&lt;/a>&lt;/td>
&lt;td>&lt;a href="http://watir.com/">Watir&lt;/a>, &lt;a href="https://www.selenium.dev/">Selenium&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://twitter.com/YevgenShunevych">Yevgeniy Shunevych&lt;/a>&lt;/td>
&lt;td>&lt;a href="https://github.com/atata-framework/atata/">Atata&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Update 7/20/2022:&lt;/strong>
&lt;a href="https://twitter.com/HtmlUnit">Ronald Brill&lt;/a>, maintainer of
&lt;a href="https://github.com/SeleniumHQ/htmlunit-driver">HTMLUnit Driver&lt;/a> will now be joining us!&lt;/p>
&lt;p>&lt;strong>Update 7/25/2022:&lt;/strong>
&lt;a href="https://twitter.com/YevgenShunevych">Yevgeniy Shunevych&lt;/a>, maintainer of
&lt;a href="https://github.com/atata-framework/atata/">Atata&lt;/a> will now be joining us!&lt;/p>
&lt;p>&lt;strong>Update 7/26/2022:&lt;/strong> &lt;a href="https://twitter.com/shs96c">Simon Stewart&lt;/a>, creator of WebDriver, will now be joining us!&lt;/p>
&lt;h3 id="other-projects">Other Projects&lt;/h3>
&lt;p>Do you maintain an open source project in the WebDriver ecosystem?&lt;br>
Have you written a test framework that uses Selenium that is (or you want to make) open source?&lt;br>
Please fill out &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSdr21sc1j8a4yqq-TQnc6ATC4r7she2CuSSfZylvC_YOX3JFA/viewform">this form&lt;/a>
(provide additional relevant details in the comments), and we will be in touch about future events.&lt;/p></description></item><item><title>Blog: Removing Legacy Protocol Support</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/legacy-protocol-support/</link><pubDate>Fri, 20 May 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/legacy-protocol-support/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>TL/DR:&lt;/p>
&lt;ul>
&lt;li>Support for the legacy &lt;a href="https://www.selenium.dev/documentation/legacy/json_wire_protocol/">JSON Wire Protocol&lt;/a>
will be removed from Java Selenium 4.9 (other languages have already removed this support)&lt;/li>
&lt;li>Protocol conversions will stop in Selenium 4.9 Grid&lt;/li>
&lt;li>You can ensure your sessions are W3C compliant by using
&lt;a href="https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/#after">Browser Options classes&lt;/a>
instead of the deprecated Desired Capabilities classes (and avoid using &amp;ldquo;set capability&amp;rdquo; methods directly)&lt;/li>
&lt;li>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&lt;/li>
&lt;/ul>
&lt;p>By far the biggest challenge in the past seven years of Selenium development has been
transitioning the underlying implementation from the legacy &lt;a href="https://www.selenium.dev/documentation/legacy/json_wire_protocol/">JSON Wire Protocol&lt;/a>
to the new standardized &lt;a href="https://w3c.github.io/webdriver/">W3C WebDriver Protocol&lt;/a>.
Because the WebDriver specification was being actively developed at the time,
Selenium 3 supported both protocols simultaneously.
We implemented &amp;ldquo;handshake&amp;rdquo; 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+).&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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&amp;rsquo;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.&lt;/p>
&lt;p>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&amp;rsquo;t any surprises.&lt;/p>
&lt;p>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
&lt;a href="https://github.com/SeleniumHQ/selenium/issues/10374">Selenium Issue #10374&lt;/a>.&lt;/p>
&lt;p>For more information on ensuring compatibility with the Grid, please follow our
&lt;a href="https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/">Selenium 4 Upgrade Guide&lt;/a>&lt;/p></description></item><item><title>Blog: Locate your locators - Python bindings changes upcoming</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/python-locators-se4/</link><pubDate>Tue, 01 Feb 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/python-locators-se4/</guid><description>
&lt;p>In real estate, the mantra for finding a new house or office space is
&amp;ldquo;location, location, location!&amp;rdquo;.
It could be said that when working with Selenium, a critical aspect of
writing tests is &amp;ldquo;locators, locators, locators!&amp;rdquo;.
Having a robust locator strategy - in your app under test and in
your test framework - is highly important for effective testing.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>Sometime after Selenium 4.2, the Python Selenium bindings will remove
locator-specific methods for finding elements. This means that the methods&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_id&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_id&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_name&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_tag_name&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_tag&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_css_selector&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_selector&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_class_name&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_class&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_link_text&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_text&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_partial_link_text&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_other_text&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_xpath&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;some_xpath&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>will be removed. All of these methods are in fact special cases of&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">By_object&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;some_locator&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>so this approach is now preferred (required, even) with the Python bindings.&lt;/p>
&lt;p>Note that it&amp;rsquo;s good practice to use the
&lt;a href="https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.by.html#module-selenium.webdriver.common.by">By object&lt;/a>
which has specific values for using particular locator strategies. For example, this line&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_id&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;submit_button&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">click&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element_by_css_selectors&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;.myelement child&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">text&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>becomes&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">By&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">ID&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;submit_button&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">click&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">By&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">CSS_SELECTOR&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;.myelement child&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">text&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you&amp;rsquo;re really desperate however you can use strings instead of the By object:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;id&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;submit_button&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">click&lt;/span>&lt;span style="color:#000;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">find_element&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;css selector&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;.myelement child&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">text&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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&amp;rsquo;s a good time to update your locator strategy and structure.&lt;/p>
&lt;p>(This article was originally posted
&lt;a href="https://simplythetest.tumblr.com/post/674917293614039040/locate-your-locators-python-bindings-changes">here&lt;/a>.
Thanks to the Selenium core contributors for adding this here!)&lt;/p></description></item><item><title>Blog: IE Mode in Edge supported by IEDriver</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/ie-edge-support/</link><pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2022/ie-edge-support/</guid><description>
&lt;p>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.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>The Microsoft Edge team have committed to supporting IE Mode in Edge until 2029 when support for Windows 10 is retired.&lt;/p>
&lt;p>Microsoft have written up all the details on &lt;a href="https://techcommunity.microsoft.com/t5/windows-it-pro-blog/new-testing-tools-to-help-prepare-for-ie-retirement/ba-p/3059947">how to use and how to migrate your site&lt;/a>
and we recommend you go read and follow their steps to make sure you&amp;rsquo;re ready.&lt;/p></description></item><item><title>Blog: Improving &amp; refining our Docs translations</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/docs-translations/</link><pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/docs-translations/</guid><description>
&lt;p>A while ago, we started to make the Selenium &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation">documentation&lt;/a> 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.&lt;/p>
&lt;p>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&amp;rsquo;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.&lt;/p>
&lt;p>To understand which languages are getting visits, we started using
&lt;a href="https://plausible.io">Plausible&lt;/a>. After a few weeks, we combined the information collected
by the analytics tool with the translated percentage per language, and we got the following:&lt;/p>
&lt;p>Here&amp;rsquo;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:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Language&lt;/th>
&lt;th>Visitors&lt;/th>
&lt;th>Translated&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>ja&lt;/td>
&lt;td>1,700&lt;/td>
&lt;td>86%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>zh-cn&lt;/td>
&lt;td>1,500&lt;/td>
&lt;td>86%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>es&lt;/td>
&lt;td>409&lt;/td>
&lt;td>42%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>fr&lt;/td>
&lt;td>203&lt;/td>
&lt;td>31%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>pt-br&lt;/td>
&lt;td>189&lt;/td>
&lt;td>87%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>de&lt;/td>
&lt;td>88&lt;/td>
&lt;td>65%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ko&lt;/td>
&lt;td>79&lt;/td>
&lt;td>68%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>nl&lt;/td>
&lt;td>22&lt;/td>
&lt;td>6%&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>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.&lt;/p>
&lt;p>Based on this data, we decided to create a new role in the Selenium project:
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure/#docs_site_translators">translators&lt;/a>. 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.&lt;/p>
&lt;p>If you have any questions or comments, please reach out through any of all the available options
shown at our &lt;a href="https://www.selenium.dev/support/">support page&lt;/a>.&lt;/p>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Stepping Down, Stepping Up</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/stepping-down-stepping-up/</link><pubDate>Wed, 27 Oct 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/stepping-down-stepping-up/</guid><description>
&lt;p>The short version is that I&amp;rsquo;m stepping down as the Selenium project
lead, and will concentrating on pushing WebDriver Bidi
forwards. Fortunately, the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure/#tlc">Selenium TLC&lt;/a> have already been
steering the project for a while now, so it&amp;rsquo;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&amp;rsquo;m looking forward to seeing what
it holds.&lt;/p>
&lt;p>The longer version? Well, that&amp;rsquo;s more personal. Let me start at the
beginning&amp;hellip;.&lt;/p>
&lt;p>On the 3rd January, 2007 I pushed the &lt;a href="https://github.com/SeleniumHQ/selenium/commit/29393a759063a0ea7a2d05c9592d687c4b6438a9">initial commit&lt;/a> of
&amp;ldquo;WebDriver&amp;rdquo; 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, &lt;a href="https://twitter.com/hugs">Jason
Huggins&lt;/a> and I &lt;a href="https://youtu.be/Vlz-WmcrBL8">merged the Selenium and WebDriver
projects&lt;/a>, and I took over the leadership of the
project. I&amp;rsquo;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.&lt;/p>
&lt;p>By the numbers, that&amp;rsquo;s&lt;/p>
&lt;ul>
&lt;li>14 years of WebDriver&lt;/li>
&lt;li>12 years of Selenium for me
&lt;ul>
&lt;li>Though the first Selenium commits were in 2004&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>1 &lt;a href="https://www.thoughtworks.com/en-gb/insights/blog/happy-10th-birthday-selenium">10 year birthday celebration&lt;/a>&lt;/li>
&lt;li>Approximately 130 Selenium releases.&lt;/li>
&lt;li>I&amp;rsquo;ve landed just over 5100 commits
&lt;ul>
&lt;li>Which is about 20% of all the changes made to Selenium over the
years.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>3 different source control systems&lt;/li>
&lt;li>5 build systems&lt;/li>
&lt;li>14 Selenium conferences&lt;/li>
&lt;li>696 different people contributing to the project.&lt;/li>
&lt;/ul>
&lt;p>In a way, I blame Michael C for this. He and I worked together at
ThoughtWorks in Australia, and had been working with
&lt;a href="http://httpunit.sourceforge.net">HttpUnit&lt;/a>. My assertion was that its API was fine. His was
that it should be more &lt;a href="https://en.wikipedia.org/wiki/Object-oriented_programming">Object-Oriented&lt;/a>. To explore the idea, I
started writing an OO wrapper around HttpUnit, and (of course!)
Michael was right.&lt;/p>
&lt;p>Or maybe it&amp;rsquo;s &lt;a href="https://github.com/joewalnes">Joe Walnes&lt;/a> who I should be talking
about. At about the same, he&amp;rsquo;d been exploring a similar kind of
design, but where my API had a &lt;code>Browser&lt;/code>, his had the far better
sounding &lt;code>WebDriver&lt;/code>, and he was generous enough to allow me to use
the same name in my next iteration of the idea.&lt;/p>
&lt;p>Or, perhaps, it&amp;rsquo;s &lt;a href="https://paulhammant.com">Paul Hammant&lt;/a> and &lt;a href="https://www.thoughtworks.com">ThoughtWorks&lt;/a>. Paul was the
one who suggested Open Sourcing what was then &amp;ldquo;WebDriver&amp;rdquo; under the
Apache 2 license, and ThoughtWorks supported the decision to make the
code available to the world.&lt;/p>
&lt;p>In any case, on that day in 2007, I was sitting on the sofa with a
glass of red wine, creating the project on &lt;a href="https://code.google.com/archive/">Google Code&lt;/a>,
and thinking (if I was thinking deeply at all) that it&amp;rsquo;d be nice to
get the code out there, and in six months it&amp;rsquo;ll probably be
over. There was absolutely no way I could dream that the project would
grow far beyond me, emerging from the &lt;a href="https://www.nhm.ac.uk/discover/news/2019/february/the-cambrian-explosion-was-far-shorter-than-thought.html">Cambrian explosion&lt;/a>
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 &lt;a href="https://w3c.github.io/webdriver/">actual
standard&lt;/a>. It&amp;rsquo;s the only browser automation API that all the
browser vendors support.&lt;/p>
&lt;p>During these past 14 years, Selenium has been one of the constants of
my life. I joke sometimes that I&amp;rsquo;ve known it longer than my wife and
my son, but is it a joke if it&amp;rsquo;s true?&lt;/p>
&lt;p>Why spend that much time and effort on Open Source? On something that
you give away for free? Because it&amp;rsquo;s just been so incredibly
rewarding. I&amp;rsquo;ve had a chance to meet people from all over the globe,
work with amazing people from a range of companies I&amp;rsquo;d never have a
chance of working with normally, learn and practice skills I wouldn&amp;rsquo;t
have had a chance to exercise, and to write code that makes people&amp;rsquo;s
lives just a little bit easier.&lt;/p>
&lt;p>Most importantly, Selenium has been the way that I&amp;rsquo;ve met some of the
best friends I have in my life. I&amp;rsquo;ve been very lucky.&lt;/p>
&lt;p>I&amp;rsquo;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&amp;rsquo;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&amp;rsquo;ve never met in person, but who I feel I could count
as friends.&lt;/p>
&lt;p>Who knew that Open Source could be the source of so much that makes a
life bright?&lt;/p>
&lt;p>But today, I&amp;rsquo;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.&lt;/p>
&lt;p>Why, if all I said above is true, am I stepping down?&lt;/p>
&lt;p>The major reason is that the things I like to do, and that I&amp;rsquo;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.&lt;/p>
&lt;p>The other reason is that I&amp;rsquo;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&amp;rsquo;d like to pour some
energy into (just ask me how my Turkish lessons are going!)&lt;/p>
&lt;p>In my absence, the project&amp;rsquo;s &amp;ldquo;&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/project/structure/#tlc">Technical Leadership Committee&lt;/a>&amp;rdquo;
will continue to be setting the direction of the project. I&amp;rsquo;ve been
listening to the discussions about where the project can go: it&amp;rsquo;s
going to be brilliant.&lt;/p>
&lt;p>That is, while I&amp;rsquo;m stepping down, the rest of the TLC will be stepping
up. They&amp;rsquo;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&amp;rsquo;re reading this, and want to get involved, step in and &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/support/#ChatRoom">join the
fun&lt;/a>. Now&amp;rsquo;s the perfect time.&lt;/p>
&lt;p>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!&lt;/p>
&lt;p>Before finishing, I&amp;rsquo;d just like to say a heartfelt &amp;ldquo;thank you&amp;rdquo; to
everyone who&amp;rsquo;s been involved in the Selenium project. To everyone
who&amp;rsquo;s contributed in some way, or used the code we&amp;rsquo;ve written, thank
you. To everyone who&amp;rsquo;s filed a bug, thank you too. To all the people
who I&amp;rsquo;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.&lt;/p>
&lt;p>I won&amp;rsquo;t be here, but I won&amp;rsquo;t be far. See you all soon.&lt;/p></description></item><item><title>Blog: A Tour of 4: New Commands</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/a-tour-of-4-new-commands/</link><pubDate>Wed, 13 Oct 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/a-tour-of-4-new-commands/</guid><description>
&lt;p>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&amp;rsquo;re covering are in the main &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/">WebDriver documentation&lt;/a>, so if
you&amp;rsquo;re not one for reading blog posts, then feel free to dive in
there!&lt;/p>
&lt;p>You may well be familiar with how to start a Selenium server: you just
do something like &lt;code>java -jar selenium-server-4.0.0.jar standalone&lt;/code> and
away you go! But with Selenium 4, there are some more things you can
do with this jar.&lt;/p>
&lt;p>Least obviously, the server jar is an exectuable on its own. If you&amp;rsquo;re
using Linux or macOS, and have Java installed, you can make the jar
executable (eg. &lt;code>chmod 755 selenium-server-4.0.0.jar&lt;/code>), rename it to
something like &lt;code>selenium&lt;/code> and put it on your &lt;code>$PATH&lt;/code>. That way, rather
than writing &lt;code>java -jar ...&lt;/code> you can simply run &lt;code>selenium&lt;/code>.&lt;/p>
&lt;p>Now you&amp;rsquo;ve done that, if you run &lt;code>selenium&lt;/code> with &lt;code>selenium --help&lt;/code>
you&amp;rsquo;ll get a handy list of the available sub-commands you can
execute. There are the old favourites, such as &lt;code>standalone&lt;/code> (for
starting a standalone selenium server), and &lt;code>hub&lt;/code> and &lt;code>node&lt;/code> (for
starting a Selenium &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/grid/setting_up_your_own_grid/#hub-and-node">Hub and Node&lt;/a> setup), but there are
other interesting commands that are new to Selenium 4.&lt;/p>
&lt;p>The first of these is &lt;code>info&lt;/code>. We&amp;rsquo;ve added this to provide easy to find
and access documentation on common tasks when using the selenium
server. If you run &lt;code>selenium info&lt;/code> on its own, you&amp;rsquo;ll see something
like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">Info&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">====&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>You can find out more about topics concerning Selenium Grid by running the
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#34;info&amp;#34;&lt;/span> &lt;span style="color:#204a87">command&lt;/span> followed by:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* config - Help on how to configure Selenium
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* tracing - Help on how distributed tracing works with selenium
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* security - Help on how how to secure communications to and within selenium
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* sessionmap - Help on different types of sessionmap and how to start them.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Each topic will give you enough information to &lt;span style="color:#204a87">help&lt;/span> you get started, and contains
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>some pointers on our site to provide more &lt;span style="color:#204a87">complete&lt;/span> information.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To get more information on a particular topic, just add the name of
the topic, for example &lt;code>selenium info security&lt;/code>. 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.&lt;/p>
&lt;p>Although it&amp;rsquo;s incredibly flexible, the &lt;code>selenium&lt;/code> command offers a
daunting list of command line flags. How are you supposed to remember
them all? You&amp;rsquo;re not! Instead, let &lt;code>selenium completion&lt;/code> take the
strain for you. If you&amp;rsquo;re a zsh user, then just &lt;code>source &amp;lt;(selenium completion zsh)&lt;/code>, and now you have tab completion for the
sub-commands, as well as for all the flags, including examples of how
to use them.&lt;/p>
&lt;p>And, finally, there are some hidden flags. We hid them because they
can be a little bit confusing to use or understand what they&amp;rsquo;re meant
to do, but one that can be very useful when debugging how your Grid is
configured is the &lt;code>--dump-config&lt;/code> flag. When run with a server command
such as &lt;code>standalone&lt;/code> or &lt;code>hub&lt;/code>, 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.&lt;/p></description></item><item><title>Blog: Announcing Selenium 4</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/announcing-selenium-4/</link><pubDate>Wed, 13 Oct 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/announcing-selenium-4/</guid><description>
&lt;p>It’s with very great pleasure that &lt;strong>we are announcing the release of
Selenium 4&lt;/strong>. This is available for Java, .Net, Python, Ruby, and
Javascript. You can download it from your favourite package manager or
right &lt;a href="https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.0.0">from GitHub&lt;/a>!&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/getting_started/how_to_upgrade_to_selenium_4/">check our documentation&lt;/a> for
advice on how to deal with each of the common problems we’re aware of.&lt;/p>
&lt;p>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!&lt;/p>
&lt;p>We’ve introduced “&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/locating_elements/#relative-locators">relative locators&lt;/a>”. 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 &amp;ndash; that honour
belongs to &lt;a href="https://www.sahipro.com">Sahi&lt;/a> &amp;ndash; but if you’ve not used them before, we hope
you like them!&lt;/p>
&lt;p>If you’re using &lt;a href="https://www.mozilla.org/en-GB/firefox/new/">Firefox&lt;/a> or a browser that is derived from
&lt;a href="https://www.chromium.org/Home">Chromium&lt;/a>, we’ve added a slew of new capabilities
too. These include ways of handling &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/bidirectional/bidi_api/#register-basic-auth">“basic” and “digest”
authentication&lt;/a>, Network Interception (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418">Are you an HTTP
418?&lt;/a>), and also performing commonly requested tasks, like
waiting for a &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/bidirectional/bidi_api/#mutation-observation">change in the DOM&lt;/a>, or providing a way to
look at &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/bidirectional/bidi_api/#listen-to-js-exceptions">Javascript errors&lt;/a>.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>We have also rebuilt the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/grid/">Selenium Grid&lt;/a>, taking lessons from
successful projects such as &lt;a href="https://opensource.zalando.com/zalenium/">Zalenium&lt;/a> and
&lt;a href="https://aerokube.com/selenoid/latest/">Selenoid&lt;/a> 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.&lt;/p>
&lt;p>The Grid can also manage Docker containers on your local machine,
pulling images such as the &lt;a href="https://hub.docker.com/u/selenium">standalone firefox server&lt;/a> so your
infrastructure maintenance becomes just a little bit less taxing.&lt;/p>
&lt;p>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 &lt;a href="https://opentelemetry.io">OpenTelemetry&lt;/a> into the Grid, so now you
can find out exactly what’s happening, where, and when.&lt;/p>
&lt;p>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&amp;hellip;.&lt;/p>
&lt;p>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 &lt;a href="https://github.com/SeleniumHQ/selenium/pulls">Pull Requests&lt;/a>, 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!&lt;/p>
&lt;p>And finally, thank you to all the Selenium Committers,
&lt;a href="https://www.browserstack.com/">BrowserStack&lt;/a>, &lt;a href="https://saucelabs.com">Sauce Labs&lt;/a>, and our
&lt;a href="https://www.selenium.dev/sponsors/">Selenium-Level sponsors&lt;/a> for getting this release ready for
our users.&lt;/p>
&lt;p>&lt;strong>We hope you enjoy Selenium 4, and we can’t wait to see what you do
with it!&lt;/strong>&lt;/p></description></item><item><title>Blog: A Tour of 4: Authentication</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/a-tour-of-4-authentication/</link><pubDate>Sun, 10 Oct 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/a-tour-of-4-authentication/</guid><description>
&lt;p>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&amp;rsquo;re covering are in the main &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/webdriver/">WebDriver documentation&lt;/a>, so if
you&amp;rsquo;re not one for reading blog posts, then feel free to dive in
there!&lt;/p>
&lt;p>The first thing I&amp;rsquo;d like to introduce you to is Selenium 4&amp;rsquo;s new-found
ability to authenticate to websites. We&amp;rsquo;ve always been able to handle
&amp;ldquo;form-based&amp;rdquo; authentication, where a login page has some &lt;code>INPUT&lt;/code>
elements that you need to enter the user name and password, but
handling sites that use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication">basic or digest
authentication&lt;/a> 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
&lt;code>register&lt;/code> method to add a user name and password (or, in the future,
other kinds of authentication credentials)&lt;/p>
&lt;p>In short, in Selenium 4, the process has become less
complicated. Perhaps an example will help?&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
data-td-tp-persist="java" aria-controls="tabs-00-00" aria-selected="true">
Java
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
data-td-tp-persist="ruby" aria-controls="tabs-00-01" aria-selected="false">
Ruby
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-pane fade show active"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Java" data-lang="Java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// This &amp;#34;HasAuthentication&amp;#34; interface is the key!
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#000">HasAuthentication&lt;/span> &lt;span style="color:#000">authentication&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">HasAuthentication&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// You can either register something for all sites
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#000">authentication&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">register&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">UsernameAndPassword&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;admin&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;admin&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">// Or use something different for specific sites
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#000">authentication&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">register&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">-&amp;gt;&lt;/span> &lt;span style="color:#000">uri&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#c4a000">getHost&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">().&lt;/span>&lt;span style="color:#c4a000">contains&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;mysite.com&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">new&lt;/span> &lt;span style="color:#000">UsernameAndPassword&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;AzureDiamond&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;hunter2&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-Ruby" data-lang="Ruby">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">register&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">username&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;admin&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#4e9a06">password&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;admin&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Once you&amp;rsquo;ve done this, every time the &lt;code>driver&lt;/code> loads a page that needs
authentication, it will automatically use the user name and password
you&amp;rsquo;ve given it.&lt;/p>
&lt;p>This feature is currently implemented on top of Selenium 4&amp;rsquo;s &lt;a href="https://chromedevtools.github.io/devtools-protocol/">CDP&lt;/a>
support, and so only works on those browser that support that
protocol, but as we push forwards with development of &lt;a href="https://w3c.github.io/webdriver-bidi/">WebDriver
Bidi&lt;/a> implementations will switch to that when they can.&lt;/p></description></item><item><title>Blog: Selenium 4 Release Candidate 2</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-rc-2/</link><pubDate>Sat, 02 Oct 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-rc-2/</guid><description>
&lt;p>We&amp;rsquo;ve listeneed and responded to the feedback from the first release
candidate of Selenium 4, and we&amp;rsquo;re now happy to announce the second
release candidate of Selenium 4. This is shipping for .Net, Java,
Python, Ruby, and Javascript, and it&amp;rsquo;s available from all the popular
package managers. Go! Try it out!&lt;/p>
&lt;p>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&amp;rsquo;s your last chance to try it on for size and let us
know if there are any problems.&lt;/p>
&lt;p>In this release, we&amp;rsquo;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.&lt;/p>
&lt;p>If you&amp;rsquo;re a Firefox user, please make sure you&amp;rsquo;re using the very
latest version of the &lt;a href="https://github.com/mozilla/geckodriver/releases">geckodriver&lt;/a> If you don&amp;rsquo;t, there may be
problems starting sessions as we rely on new features that are
included in this new geckodriver release.&lt;/p>
&lt;p>If you&amp;rsquo;re new Selenium 4, then you may want to read this &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-new-tricks/">blog
post&lt;/a>, which explains more, but you might want to have a look at:&lt;/p>
&lt;ul>
&lt;li>Relative locators, which provide a way of finding elements by
where they are in relation to one another (like &amp;ldquo;above&amp;rdquo;, or &amp;ldquo;to
the right of&amp;rdquo;)&lt;/li>
&lt;li>Authentication on websites using basic or digest authentication&lt;/li>
&lt;li>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.&lt;/li>
&lt;/ul>
&lt;p>Thank you to everyone in the community who&amp;rsquo;s given us so much helpful
and thoughtful feedback on the first release candidate. We really hope
that you enjoy this release candidate too!&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4 RC 2 has been tagged! This is the final RC before we do our final release! Go start using it! Details of each of the bindings will be found in the thread below!&lt;/p>&amp;mdash; David @automatedtester@mastodon.social (@AutomatedTester) &lt;a href="https://twitter.com/AutomatedTester/status/1443577793871179786?ref_src=twsrc%5Etfw">September 30, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4.0 RC2 .NET bindings have been released! This will likely be the last release before 4.0 stable release, and the last chance to fix issues before then, so go try it out now. Get the bindings at &lt;a href="https://t.co/wGImsWFfCK">https://t.co/wGImsWFfCK&lt;/a> or via &lt;a href="https://twitter.com/hashtag/NuGet?src=hash&amp;amp;ref_src=twsrc%5Etfw">#NuGet&lt;/a>.&lt;/p>&amp;mdash; Jim Evans (@jimevansmusic) &lt;a href="https://twitter.com/jimevansmusic/status/1443601790092681221?ref_src=twsrc%5Etfw">September 30, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4.0.0.rc2 &lt;a href="https://twitter.com/hashtag/ruby?src=hash&amp;amp;ref_src=twsrc%5Etfw">#ruby&lt;/a> gem has been published. All of the less pleasant work went into this one - polishing and making sure things match up between the different bindings, etc. This should essentially be Selenium 4, so upgrade already and tell us what you think!&lt;/p>&amp;mdash; Titus Fortner (@titusfortner) &lt;a href="https://twitter.com/titusfortner/status/1443575623822151688?ref_src=twsrc%5Etfw">September 30, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Exciting times! Selenium 4.0 RC2 for Java has been released. We&amp;#39;re planning on this being the last release before the stable 4.0 release, so this is your last chance for you to give us feedback and for us to react before then! &lt;a href="https://twitter.com/hashtag/selenium4?src=hash&amp;amp;ref_src=twsrc%5Etfw">#selenium4&lt;/a>&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1443606189791662080?ref_src=twsrc%5Etfw">September 30, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script></description></item><item><title>Blog: Selenium 4 Release Candidate</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-rc-1/</link><pubDate>Mon, 06 Sep 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-rc-1/</guid><description>
&lt;p>We&amp;rsquo;re very happy to announce the first release candidate of Selenium
4. We&amp;rsquo;re shipping this for .Net, Java, Python, Ruby, and JavaScript,
so if you&amp;rsquo;re using any of those languages, go and grab it from your
package manager of choice!&lt;/p>
&lt;p>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.&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4 Release Candidate for &lt;a href="https://twitter.com/hashtag/ruby?src=hash&amp;amp;ref_src=twsrc%5Etfw">#ruby&lt;/a> is now available! There should be fewer problems running against latest versions of browsers now than with Selenium 3. Please update and let us know of any problems so we can get the production release out the door. &lt;a href="https://t.co/JWbwDRPcj4">https://t.co/JWbwDRPcj4&lt;/a>&lt;/p>&amp;mdash; Titus Fortner (@titusfortner) &lt;a href="https://twitter.com/titusfortner/status/1433114357047627785?ref_src=twsrc%5Etfw">September 1, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">So, big news: &lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4.0 RC1 has just been released! The .NET bindings are available via &lt;a href="https://twitter.com/hashtag/NuGet?src=hash&amp;amp;ref_src=twsrc%5Etfw">#NuGet&lt;/a>, or you can find them at our new binary release point, &lt;a href="https://t.co/CSNK7K47ue">https://t.co/CSNK7K47ue&lt;/a>. We&amp;#39;re closing in on a final, stable 4.0 release, so if you haven&amp;#39;t tried it before now, you should!&lt;/p>&amp;mdash; Jim Evans (@jimevansmusic) &lt;a href="https://twitter.com/jimevansmusic/status/1433140517819322369?ref_src=twsrc%5Etfw">September 1, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4 RC1 is out! The &lt;a href="https://twitter.com/hashtag/python?src=hash&amp;amp;ref_src=twsrc%5Etfw">#python&lt;/a> bindings are available at &lt;a href="https://t.co/B4zKI6JQkA">https://t.co/B4zKI6JQkA&lt;/a> &lt;a href="https://t.co/kMlDM4ad7I">pic.twitter.com/kMlDM4ad7I&lt;/a>&lt;/p>&amp;mdash; David @automatedtester@mastodon.social (@AutomatedTester) &lt;a href="https://twitter.com/AutomatedTester/status/1433377616065667074?ref_src=twsrc%5Etfw">September 2, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Hurrah! &lt;a href="https://twitter.com/hashtag/selenium4?src=hash&amp;amp;ref_src=twsrc%5Etfw">#selenium4&lt;/a> RC1 is out, and the Java bindings have been released! Grab them from your favourite maven repo, or download the binaries from &lt;a href="https://t.co/XUcv7RzbzL">https://t.co/XUcv7RzbzL&lt;/a> &lt;a href="https://t.co/E9T1ZTZ9jd">pic.twitter.com/E9T1ZTZ9jd&lt;/a>&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1433474873972641793?ref_src=twsrc%5Etfw">September 2, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">&lt;a href="https://twitter.com/SeleniumHQ?ref_src=twsrc%5Etfw">@SeleniumHQ&lt;/a> 4 RC 1 is out! This means that Selenium 4 is getting closer and closer 🎉🎉&lt;br>Try out the new Grid through our &lt;a href="https://twitter.com/Docker?ref_src=twsrc%5Etfw">@docker&lt;/a> images -&amp;gt; &lt;a href="https://t.co/lGUrZAQneJ">https://t.co/lGUrZAQneJ&lt;/a> &lt;a href="https://t.co/BzZxPn3p0y">pic.twitter.com/BzZxPn3p0y&lt;/a>&lt;/p>&amp;mdash; Diego Molina (@diegofmolina) &lt;a href="https://twitter.com/diegofmolina/status/1434820167360339968?ref_src=twsrc%5Etfw">September 6, 2021&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>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 &lt;a href="https://github.com/mozilla/geckodriver/releases">geckodriver&lt;/a> to
0.29.1 or later.&lt;/p>
&lt;p>Most of the new features in Selenium 4 are mentioned in this &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-new-tricks/">blog entry&lt;/a>,
but the main highlights are:&lt;/p>
&lt;ul>
&lt;li>Relative locators, for finding elements using terms that make
sense to us humans.&lt;/li>
&lt;li>The ability to intercept network traffic&lt;/li>
&lt;li>Authentication with basic or digest authentication.&lt;/li>
&lt;/ul>
&lt;p>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 &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/downloads">Selenium site&lt;/a>.&lt;/p></description></item><item><title>Blog: All Selenium downloads are now available on GitHub releases</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/downloads-now-on-github-releases/</link><pubDate>Tue, 24 Aug 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/downloads-now-on-github-releases/</guid><description>
&lt;p>We announced on a previous &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/downloads-moving-to-github-releases/">entry&lt;/a> our
decision to move all binaries from &lt;a href="https://selenium-release.storage.googleapis.com/index.html">Google Storage&lt;/a>
to &lt;a href="https://github.com/SeleniumHQ/selenium/releases">GitHub releases&lt;/a>. 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.&lt;/p>
&lt;p>In addition to that, all links on our &lt;a href="https://www.selenium.dev/downloads/">downloads&lt;/a> page
have been updated, as well as all references to Google Storage in the Selenium code base.&lt;/p>
&lt;p>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.&lt;/p>
&lt;p>If you have any questions or comments, please reach out through any of all the available options
shown at our &lt;a href="https://www.selenium.dev/support/">support page&lt;/a>.&lt;/p>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Selenium downloads will move to GitHub releases</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/downloads-moving-to-github-releases/</link><pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/downloads-moving-to-github-releases/</guid><description>
&lt;p>Thanks to Google, &lt;a href="https://selenium-release.storage.googleapis.com/index.html">Google Storage&lt;/a>
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 &lt;a href="https://www.selenium.dev/downloads/">downloads&lt;/a> page,
find the release, and download from there!&lt;/p>
&lt;p>The Selenium project hosts its source code on GitHub, and people who are familiar with GitHub
know that they can go to the &lt;a href="https://github.com/SeleniumHQ/selenium/releases">&amp;ldquo;release&amp;rdquo;&lt;/a> page
there to find any downloads for each release of a project.&lt;/p>
&lt;p>Rather than hosting the downloads in two places, the Selenium project has decided to host
everything on GitHub. We&amp;rsquo;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.&lt;/p>
&lt;p>All past releases will be available both in Google Storage and GitHub releases, but new ones
will only be present in GitHub releases.&lt;/p>
&lt;p>If you are a watcher of the Selenium &lt;a href="https://github.com/SeleniumHQ/selenium">repo&lt;/a>, 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.&lt;/p>
&lt;p>If you have any questions or comments, please reach out through any of all the available options
shown at our &lt;a href="https://www.selenium.dev/support/">support page&lt;/a>.&lt;/p>
&lt;p>Stay tuned for updates by following &lt;a href="https://twitter.com/seleniumhq">SeleniumHQ&lt;/a>!&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: The Selenium website has a new look!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/new-look-for-selenium-site/</link><pubDate>Mon, 09 Aug 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/new-look-for-selenium-site/</guid><description>
&lt;p>We have been working hard during the last few weeks redoing our
&lt;a href="//selenium.dev">website&lt;/a>. Today, we are very happy to share it
with the community and we are hoping to get as much feedback as
possible!&lt;/p>
&lt;p>We did a major revamp to our website two years ago. However, this
revamp had some &amp;ldquo;technical debt&amp;rdquo; in it&amp;hellip;&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">We&amp;#39;re happy to announce that we have (finally!) refreshed our site. Head on over to &lt;a href="https://t.co/0xAiKdHrPj">https://t.co/0xAiKdHrPj&lt;/a> and have a browse! Thanks to &lt;a href="https://twitter.com/diegofmolina?ref_src=twsrc%5Etfw">@diegofmolina&lt;/a> and &lt;a href="https://twitter.com/manoj9788?ref_src=twsrc%5Etfw">@manoj9788&lt;/a> for making this happen.&lt;/p>&amp;mdash; Selenium (@SeleniumHQ) &lt;a href="https://twitter.com/SeleniumHQ/status/1194205732347887616?ref_src=twsrc%5Etfw">November 12, 2019&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>We use &lt;a href="https://gohugo.io/">Hugo&lt;/a> to generate our website, and to
build a website with Hugo, one normally needs to select a
&lt;a href="https://themes.gohugo.io/">Hugo theme&lt;/a>. 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.&lt;/p>
&lt;p>This new website version is using the &lt;a href="https://github.com/google/docsy">Docsy&lt;/a>
theme, made by some folks at Google and used by other popular projects
such as &lt;a href="https://airflow.apache.org/">Apache Airflow&lt;/a> and
&lt;a href="https://kubernetes.io/">Kubernetes&lt;/a>. Using Docsy helps us to focus
more on the website&amp;rsquo;s content rather than spending lots of time
maintaining the underlying details of it.&lt;/p>
&lt;p>We all hope you will like the new look and please check our
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/documentation/about/contributing/">contribution guidelines&lt;/a> if
you want to contribute to the Selenium website.&lt;/p>
&lt;p>Happy testing!&lt;/p></description></item><item><title>Blog: Public Project Meeting - July 15, 2021</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/public-project-meeting-20210715/</link><pubDate>Thu, 15 Jul 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/public-project-meeting-20210715/</guid><description>
&lt;div class="row justify-content-center my-1">
&lt;div class="alert alert-blue col-10 alert-dismissible fade show mb-0 -bg-selenium-yellow" role="alert">
&lt;h4 class="alert-heading pb-2 text-center">Archived meeting minutes&lt;/h4>
&lt;div class="w-100 text-center">
All meeting minutes can now be found &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/meetings">here&lt;/a>.
&lt;/div>
&lt;button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
&lt;span aria-hidden="true">&amp;times;&lt;/span>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>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)&lt;/p>
&lt;p>Meetings are held on the &lt;code>#selenium-tlc&lt;/code> channel on &lt;a href="https://seleniumhq.slack.com/join/shared_invite/enQtODAwOTUzOTM5OTEwLTZjZjgzN2ExOTBmZGE0NjkwYzA2Nzc0MjczMGYwYjdiNGQ5YjI0ZjdjYjFhMjVlMjFkZWJmNDYyMmU1OTYyM2Y">Selenium Slack&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:00 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Here is the agenda proposal:&lt;/p>
&lt;h2 id="general-project-statistics">General project statistics&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Previous meeting: 170 open issues, 23 open pull requests&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Currently: 168 open issues, 25 open pull requests&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Pending work for the RC 1?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Server - Grid&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Hub reports Nodes going down &lt;a href="https://github.com/SeleniumHQ/docker-selenium/issues/1257">https://github.com/SeleniumHQ/docker-selenium/issues/1257&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>TimeoutException &lt;a href="https://github.com/SeleniumHQ/selenium/issues/9528">https://github.com/SeleniumHQ/selenium/issues/9528&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>IE Stopped working on beta 4 &lt;a href="https://github.com/SeleniumHQ/selenium/issues/9600">https://github.com/SeleniumHQ/selenium/issues/9600&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Language bindings&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>“se:cdpVersion” is missing in C# and JS&lt;/p>
&lt;p>Can all bindings do CDP over Grid?&lt;/p>
&lt;ul>
&lt;li>What are the features present in Selenium 4?&lt;/li>
&lt;/ul>
&lt;p>Do all bindings implement them&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:01&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>@AutomatedTester @Puja Jagani @barancev @jimevans @titusfortner @p0deje @harsha509
please tag the ones I forgot&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:02 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Documentation theme change update&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:03&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>(I know you&amp;rsquo;ve been busy)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:04 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>The python ci will be green today&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:04 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>ok, so let’s start&lt;/p>
&lt;p>Regarding bugs we had, with @Puja Jagani we fixed the queue issue, so now the Grid runs enough sessions in parallel&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:05&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>but we still have 3 open issues, mentioned in the agenda&lt;/p>
&lt;p>the timeout one has proven to be hard to reproduce, and therefore fix&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:05 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I was able to reliably recreate the timeout issue. We were hitting issues in chrome that makes us think chrome is breaking&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:06 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>really? The original issue is reported with Firefox&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:06 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Well, I am getting the timeout message, like with Firefox, with chrome 91&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:07&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>And it’s like the browser tab has hung/crashed and it manifests&lt;/p>
&lt;p>@Puja Jagani has the script and I will help reduce if I can&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:07 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I need to do some rework of NetworkInterceptor to allow everything to be intercepted&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:08&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>And I think &lt;a href="https://github.com/SeleniumHQ/selenium/issues/9594">https://github.com/SeleniumHQ/selenium/issues/9594&lt;/a> is fixed by
&lt;a href="https://github.com/SeleniumHQ/selenium/commit/0795e78559924be1b69b4c8051f5185f289a4268">https://github.com/SeleniumHQ/selenium/commit/0795e78559924be1b69b4c8051f5185f289a4268&lt;/a>
#9594 Hub reporting no available nodes after a few hours
&lt;a href="https://github.com/SeleniumHQ/selenium%7CSeleniumHQ/selenium">https://github.com/SeleniumHQ/selenium|SeleniumHQ/selenium&lt;/a>SeleniumHQ/selenium | Apr 8th | Added by GitHub&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:08 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I think @Puja Jagani saw the issue this morning, and she said she was having a look&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:09 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Darn it. I thought we had it fixed&lt;/p>
&lt;p>Though we don’t handle the case automatically. I manually tweaked things to make that work&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:09 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Shoutout to Puja for looking at ALL THE THINGS&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:10 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>+1000&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:11 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>aside from those two, now looking into the IE issue with Grid\&lt;/p>
&lt;p>as the Grid is sending and invalid JSON to the IEServer&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Jim Evans 9:12 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>um, se:cdpVersion was implemented in .NET in f10cb89&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:12 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Woot!&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:12 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>great, I will update that item :tada:&lt;/p>
&lt;p>on the client side, we still need to find time to build the feature parity doc&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:15&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Aside from those items, I can give an update on the new (or reworked) website&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:16&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:16 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>&amp;ldquo;digging into the docs&amp;rdquo; == &amp;ldquo;updating the docs theme&amp;rdquo; ?&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:16 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>so, everything below the about menu is already implemented&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:16 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>or writing the docs&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:17 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>and I still need to create pages for these links&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:18 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>that all looks great!&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:18 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>to bring context, our website is made from two different Hugo themes, glued together during the build process
and a few hacks in between&lt;/p>
&lt;p>I’ve found &lt;a href="https://www.docsy.dev/">https://www.docsy.dev/&lt;/a> a good alternative since it offers a good theme that can contain both things in one&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:19&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:20&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:21&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>if we want to reestructure, it would be nice to see proposals (like a global TOC with brief descriptions of each item)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:21&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>then we can reuse what we have currently, and add what is missing&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>So code snippets would look like this: &lt;a href="https://gist.github.com/harsha509/e690dd2c72f1f5c5785be4c8a47c87fd">https://gist.github.com/harsha509/e690dd2c72f1f5c5785be4c8a47c87fd&lt;/a>&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Lift and shift first, rework second&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>code snippets is an implementation detail&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>(That is, let’s open the door to contributions first, then figure out how things should be shaped)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I get it&amp;rsquo;s implementation&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:23&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>but that&amp;rsquo;s the piece I can help with :slightly_smiling_face:&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:23 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>right now they look similar to that, so it could be a matter of adjusting things&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:24&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>ideally, the future for code snippets is to render code stored in GitHub, so we can execute it in GitHub actions for example&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:25 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I guess the question I had about it (what I tried to figure out a few months back and failed) is if there&amp;rsquo;s a way to point to a repo like you &amp;amp; Christian built for Docusaurus :smile:
(another implementation detail)
But&amp;hellip; there&amp;rsquo;s nothing preventing us from writing that code now and figuring it out later&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:25 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I like rust for this reason… when you run tests it also tests the doc snippets&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:25 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>@p0deje implemented that for Ruby&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:26&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>it&amp;rsquo;s really neat&lt;/p>
&lt;p>I&amp;rsquo;ll try to find time to propose something here and try to get feedback from people smarter than I am about these things
&lt;a href="https://seleniumhq.slack.com/archives/CBH302726/p1626364266427200">https://seleniumhq.slack.com/archives/CBH302726/p1626364266427200&lt;/a>&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:28 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>all WIP is committed, so if someone wants to have a look, please check &lt;a href="https://github.com/SeleniumHQ/seleniumhq.github.io#wip-moving-to-hugo-docsy-theme">https://github.com/SeleniumHQ/seleniumhq.github.io#wip-moving-to-hugo-docsy-theme&lt;/a>&lt;/p>
&lt;p>SeleniumHQ/seleniumhq.github.io
Official Selenium website and documentation
Website
&lt;a href="https://selenium.dev/">https://selenium.dev/&lt;/a>&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:29 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Nice work on all of that&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Simon Stewart 9:29 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Agreed. Excellent work, @diemol. Thank you&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:29 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>hopefully I can have the site migrated in a couple of weeks, then we have focus on the docs&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:30&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I do not have any more topics, does anyone have something else?&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:31 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Hopefully I&amp;rsquo;ll have all my ${paidWork} code in a good place at that point to take a break&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:32&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I also promised the chromedriver team that I&amp;rsquo;d help fix up their Ruby code&lt;/p>
&lt;p>Lots of things to update&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:33&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Right now I&amp;rsquo;m busy updating all of my Java test examples from JUnit 4 to JUnit 5 thanks to @Puja Jagani&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:36 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>ok, so it seems we are done with today’s public meeting, thank you everyone!&lt;/p></description></item><item><title>Blog: Public Project Meeting - June 17, 2021</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/public-project-meeting-20210617/</link><pubDate>Thu, 17 Jun 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/public-project-meeting-20210617/</guid><description>
&lt;div class="row justify-content-center my-1">
&lt;div class="alert alert-blue col-10 alert-dismissible fade show mb-0 -bg-selenium-yellow" role="alert">
&lt;h4 class="alert-heading pb-2 text-center">Archived meeting minutes&lt;/h4>
&lt;div class="w-100 text-center">
All meeting minutes can now be found &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/meetings">here&lt;/a>.
&lt;/div>
&lt;button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
&lt;span aria-hidden="true">&amp;times;&lt;/span>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>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)&lt;/p>
&lt;p>Meetings are held on the &lt;code>#selenium-tlc&lt;/code> channel on &lt;a href="https://seleniumhq.slack.com/join/shared_invite/enQtODAwOTUzOTM5OTEwLTZjZjgzN2ExOTBmZGE0NjkwYzA2Nzc0MjczMGYwYjdiNGQ5YjI0ZjdjYjFhMjVlMjFkZWJmNDYyMmU1OTYyM2Y">Selenium Slack&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 8:52 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Here is the proposed agenda:&lt;/p>
&lt;h2 id="general-project-statistics">General project statistics&lt;/h2>
&lt;ul>
&lt;li>Previous meeting: 167 open issues, 28 open pull requests&lt;/li>
&lt;li>Currently: 170 open issues, 23 open pull requests&lt;/li>
&lt;/ul>
&lt;h2 id="pending-work-for-the-rc-1">Pending work for the RC 1?&lt;/h2>
&lt;ul>
&lt;li>Server - Grid&lt;/li>
&lt;li>Hub reports Nodes going down &lt;a href="https://github.com/SeleniumHQ/docker-selenium/issues/1257">https://github.com/SeleniumHQ/docker-selenium/issues/1257&lt;/a>&lt;/li>
&lt;li>TimeoutException &lt;a href="https://github.com/SeleniumHQ/selenium/issues/9528">https://github.com/SeleniumHQ/selenium/issues/9528&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="language-bindings">Language bindings&lt;/h2>
&lt;ul>
&lt;li>“se:cdpVersion” is missing in C# and JS&lt;/li>
&lt;li>Can all bindings do CDP over Grid?&lt;/li>
&lt;li>What are the features present in Selenium 4?&lt;/li>
&lt;li>Do all bindings implement them?&lt;/li>
&lt;/ul>
&lt;h2 id="release-process">Release process&lt;/h2>
&lt;p>After beta 4, we should document how each binding and the Grid are released&lt;/p>
&lt;h2 id="selenium-ide">Selenium IDE&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Who knows what the release process is? What is needed?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Who can help reviewing pull requests?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/SeleniumHQ/docker-selenium%7CSeleniumHQ/docker-selenium">#1257 Hub reporting no available nodes after a few hours&lt;/a> SeleniumHQ/docker-selenium | Apr 8th | Added by GitHub&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://github.com/SeleniumHQ/selenium%7CSeleniumHQ/selenium">#9528 java.util.concurrent.TimeoutException thrown at random netty read timeouts with RemoteWebDriver&lt;/a> SeleniumHQ/selenium | May 28th | Added by GitHub&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;em>&lt;em>&lt;strong>8:56 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:01 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Just a comment from the increased number of issues…
I believe users are starting to give more feedback, so that’s good&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:05 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I believe we can slowly jump into the first topic:
Pending work for the RC 1?&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:06 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Regarding the Grid, I would say it is feature complete&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:07 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>but we have a couple of bugs we are checking with @Puja Jagani&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:08 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I think we can sort them out during the next week
(fingers crossed :slightly_smiling_face:)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:13 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>talking about the language bindings, I think the most relevant thing for RC1 is to check feature parity&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:14 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>@AutomatedTester did the shadow Dom work you did end up in geckodriver /Firefox yet?&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:15 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I know some bindings implemented the endpoints already&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:15 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>No, it’s nearly done&lt;/p>
&lt;p>Maybe I should hand it to the Mozilla folks and maybe they could finish it off&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:15 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I kind of wanted to wait until I could make sure tests
passed and stuff because I never trust myself :)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>David Burns 9:16 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>There is an issue with something between marionette and geckodriver but those are super hard to diagnose&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:17 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>There were some accessibility endpoints? I&amp;rsquo;m not sure we&amp;rsquo;ve all added.
And I think ruby deprecated methods that other languages implemented with JS&lt;/p>
&lt;p>I&amp;rsquo;ve been meaning to do a deeper dive into the various tests, but haven&amp;rsquo;t gotten there yet.
Ruby broke CDP in last beta release, we need to figure out&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:21 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>We probably need to do a beta 4.1 just for ruby with that fix&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:22 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:23 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I&amp;rsquo;ll dedicate some time this month to helping with it&lt;/p>
&lt;p>Probably the last topic is
Release process&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>9:24 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Last week Simon recorded the Java release and shared the video so I can document it&lt;/p>
&lt;p>It’d be great if the other folks who also do releases do the same,
so we can document and potentially automate releases&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:30 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I believe that was everything we had in the agenda&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:36 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>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&lt;/p>
&lt;p>Or something. I&amp;rsquo;m not entirely certain, but sounds potentially interesting.&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:37 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>tell us more, @titusfortner :slightly_smiling_face:&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:37 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>I at least want to get a demo and see what they mean.&lt;/p>
&lt;p>I don&amp;rsquo;t know more, yet. :)&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:37 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>ah ok, they reached out to you privately :slightly_smiling_face:&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Titus Fortner 9:38 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>Yeah, I&amp;rsquo;ll loop you in when we set up a demo. Might not work for what we need&lt;/p>
&lt;p>&lt;em>&lt;em>&lt;strong>Diego Molina 9:39 PM&lt;/strong>&lt;/em>&lt;/em>&lt;/p>
&lt;p>sounds good&lt;/p></description></item></channel></rss>