<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/tags/selenium/</link><description>Recent content in selenium on Selenium</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Mon, 19 Feb 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://trunk--polite-jelly-cc0866.netlify.app/tags/selenium/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: 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: 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: 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: 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: 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: 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: 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: 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: 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: IRC channels are moving to Libera.chat</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/moving-to-libera-chat/</link><pubDate>Thu, 20 May 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/moving-to-libera-chat/</guid><description>
&lt;p>Yesterday, 19 May 2021, all the staff of Freenode, the IRC network, &lt;a href="https://fuchsnet.ch/freenode-resign-letter.txt">collectively
resigned as staff because of what they felt was a hostile takeover&lt;/a>.&lt;/p>
&lt;p>Freenode has always been seen as the home of Free and Open Software, so
it was natural that you could find us on the #selenium channel there. To maintain this openness, and inclusivity,
we are moving our IRC Channel over to &lt;a href="https://libera.chat">Libera.chat&lt;/a>. It is has been created
by the team that previously maintained Freenode.&lt;/p>
&lt;p>We are in the process of moving our Slack-to-IRC bridge over and hopefully the matrix bridge will be created
soon so that we can have a free and inclusive project on the new IRC Servers. There may be a few
hiccups so if you could bear with us.&lt;/p>
&lt;p>If you have any questions please feel free to reach out to me on &lt;a href="https://twitter.com/automatedtester">twitter&lt;/a>
or on one of the &lt;a href="https://selenium.dev/support">chat protocols&lt;/a> we support.&lt;/p>
&lt;p>Finally, thank you to &amp;ldquo;Milen from Bulgaria&amp;rdquo; for helping secure the channel for us on &lt;a href="https://libera.chat">Libera.chat&lt;/a>.&lt;/p></description></item><item><title>Blog: Observability in Selenium 4</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-observability/</link><pubDate>Mon, 26 Apr 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-observability/</guid><description>
&lt;p>Diagnosing problems when the Selenium server isn&amp;rsquo;t working has never been easy. With Selenium 4, we have integrated &lt;a href="https://opentelemetry.io/">OpenTelemetry&lt;/a> to help you troubleshoot issues, optimize performance, and provide visibility into the system. By making the Selenium server observable, we are putting more power into your hands.&lt;/p>
&lt;h3 id="need-for-observability">Need for Observability&lt;/h3>
&lt;p>Selenium server enables distributed testing. Instead of running the browsers for tests locally, the tests use a remote browser driver that points to a server. The server makes “&lt;strong>smart&lt;/strong>” decisions to run tests on different remote servers. Every such remote server is capable of hosting different types of browsers and browser versions.&lt;/p>
&lt;p>Selenium 3 uses Hub as the coordinator. It receives new session requests and directs them to the appropriate Node. The Node is the remote end where the browser itself runs.&lt;/p>
&lt;p>Selenium 4 extends this to provide users with a way to set up a full-blown distributed system. Essentially, &lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/components_of_a_grid/">Selenium 4&lt;/a> splits the Hub into different components with additional enhancements. However, the Node’s role remains the same. To ensure the backward compatibility and simplicity of setting up Grid, standalone and hub-node mode are also available in the new Selenium server.&lt;/p>
&lt;p>Now picture running a full-blown distributed Selenium Grid with hundreds of Nodes with different browsers and browser versions. Testing at scale in such an infrastructure will involve large volumes of requests. How can one keep track of these requests? Enter Selenium Observability!&lt;/p>
&lt;h3 id="how-does-selenium-provide-observability">How Does Selenium Provide Observability?&lt;/h3>
&lt;p>Selenium uses OpenTelemetry to instrument tracing and event logs. Tracing keeps track of a request’s lifecycle. As a request moves through the distributed system, the trace of the request will contain all the information of its crucial operations performed along the way. Such operations are known as spans. A span can record timed logs called events, which ideally encapsulate the current state of the system. These are event logs.&lt;/p>
&lt;p>By default, the Selenium server enables tracing. Selenium server can run in different modes:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/setting_up_your_own_grid/#standalone-mode">Standalone&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/setting_up_your_own_grid/#hub-and-node-mode">Hub and Node&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/setting_up_your_own_grid/#distributed-mode">Fully Distributed&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/SeleniumHQ/docker-selenium#readme">Docker&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Tracing and event logs are available for all the modes. The simplest way to see traces is in the form of console logs. By default, the Selenium server prints logs at the INFO level and above. To pass a logging level of choice while running a Selenium Grid use the &lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/advanced_features/observability/#visualizing-traces">log-level&lt;/a> flag. Setting the log-level to FINE will display traces and event logs as console logs.&lt;/p>
&lt;p>For a large scale system, consuming traces as logs might not be efficient.
Visualizing and querying traces will quickly help troubleshoot a request failure easily. &lt;a href="https://www.jaegertracing.io/">Jaeger&lt;/a> seamlessly integrates with OpenTelemetry to provide a rich experience of querying, visualizing and collecting request traces.&lt;/p>
&lt;p>Run &lt;code> java -jar selenium-server-&amp;lt;selenium-version&amp;gt;.jar info tracing&lt;/code>.&lt;/p>
&lt;p>It provides detailed and updated instructions to set up Jaeger with the Selenium server.
Visualizing the traces makes it easy to interpret a trace and understand request flow. Now Grid users can effortlessly trace a request, drill down into an error or query them to observe what is happening.&lt;/p>
&lt;figure>
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/images/blog/2021/trace.png"
alt="Trace example"/>
&lt;/figure>
&lt;p>Refer to &lt;a href="https://www.selenium.dev/documentation/en/grid/grid_4/advanced_features/observability/">Selenium Observability&lt;/a> for details.&lt;/p>
&lt;h3 id="full-stack-tracing">Full-Stack Tracing&lt;/h3>
&lt;p>The Java client binding supports tracing. Full-stack tracing allows tracing a request from the client to the server and back. Though the client is a single component, the client trace will contain spans that help build the request. It is easier to locate a client-side problem and fix the test if needed.&lt;/p>
&lt;p>We already saw how the server supports tracing and how to leverage it. For the client-side, add the Opentelemetry dependency to your project setup and add the necessary system properties to export the traces to Jaeger. Refer to &lt;a href="https://www.selenium.dev/documentation/en/remote_webdriver/remote_webdriver_client/#tracing-client-requests">RemoteWebdriver client&lt;/a> for detailed instructions.&lt;/p>
&lt;h3 id="leveraging-traces-and-event-logs">Leveraging Traces and Event Logs&lt;/h3>
&lt;p>The key to fixing a problem lies in knowing the error. For a known error situation, the event logs have you covered. It provides detailed error information and stack traces. Query the collected traces for a time range by the error code to identify the frequency of the error. It will help determine if the error is transient or not and accordingly take action.&lt;/p>
&lt;figure>
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/images/blog/2021/error-event-log.png"
alt="Error event log example"/>
&lt;/figure>
&lt;p>Observe the request latency to identify potential bottlenecks. Each trace will also contain time taken by each span. The issue could be in the underlying infrastructure setup, the network latency, or the code itself. Irrespective of the cause, it is easier to identify the problem area.&lt;/p>
&lt;p>Observability is slowly becoming a must-have property of a system. Selenium is now observable! Go ahead try it out. Let us know if you find anything that requires improvement on our end.&lt;/p></description></item><item><title>Blog: Selenium 4 Beta 1 Released</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-beta-1/</link><pubDate>Mon, 15 Feb 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/selenium-4-beta-1/</guid><description>
&lt;p>We&amp;rsquo;re very happy to announce the release of the first beta of Selenium
4. 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>This has been the culmination of a lot of work by so many people, not
only the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/structure/#tlc">project TLC&lt;/a>, but also of literally hundreds of people:
205 since we released Selenium 3.141.59, at the last count. A big
thank you to everybody who&amp;rsquo;s helped make this possible!&lt;/p>
&lt;p>So, what&amp;rsquo;s changed since Selenium 3? The answer is both &amp;ldquo;&lt;strong>not much&lt;/strong>&amp;rdquo;
and also &amp;ldquo;&lt;strong>almost everything&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>By &amp;ldquo;&lt;strong>not much&lt;/strong>&amp;rdquo;, I mean that if your tests are working with Selenium
3 right now, you should be able to just upgrade your dependency to
Selenium 4. You will find that things that were marked &amp;ldquo;deprecated&amp;rdquo;
are now gone, but the advantage of the long time between the last
Selenium 3 release and this is that you&amp;rsquo;ve had plenty of time to try
and find alternatives.&lt;/p>
&lt;p>If this doesn&amp;rsquo;t work, please let us know! We&amp;rsquo;ve worked hard to ensure
compatibility between the releases, but it&amp;rsquo;s possible we may have
missed some things.&lt;/p>
&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.0 or later.&lt;/p>
&lt;p>By &amp;ldquo;&lt;strong>almost everything&lt;/strong>&amp;rdquo;, I mean that under the covers there have
been substantial changes. We&amp;rsquo;ve rewritten the Selenium server to allow
it to work not only in the familiar &amp;ldquo;standalone&amp;rdquo; and &amp;ldquo;hub and node&amp;rdquo;
modes, but also in a new &amp;ldquo;distributed&amp;rdquo; mode, which makes it
signifcantly easier to deploy to something such as Kubernetes in a way
that scales well.&lt;/p>
&lt;p>The new server is also wired up with support for &lt;a href="https://opentelemetry.io">OpenTelemetry&lt;/a> and
exposes a &lt;a href="https://github.com/SeleniumHQ/selenium/blob/selenium-4.0.0-beta-1/java/server/src/org/openqa/selenium/grid/graphql/selenium-grid-schema.graphqls">GraphQL endpoint&lt;/a>, so that figuring what&amp;rsquo;s going
on in the Grid, and tracking down what&amp;rsquo;s gone wrong if something
happens, is easier than ever.&lt;/p>
&lt;p>Not all the changes are server-side. We recently wrote about the &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-new-tricks/">new
features in Selenium 4&lt;/a> that you can use in your tests, but some
of 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>We&amp;rsquo;ll be telling you more about these features in later blog posts,
and as we improve our documentation.&lt;/p>
&lt;p>If this sounds interesting, please download the beta 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: New Tricks in Selenium 4</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/what-is-coming-in-selenium-4-the-new-selenium-grid/</link><pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2021/what-is-coming-in-selenium-4-the-new-selenium-grid/</guid><description>
&lt;blockquote>
&lt;p>In the fourth and final post in his series, Simon Stewart continues talking about what&amp;rsquo;s
coming in Selenium 4 and reviews what&amp;rsquo;s new in the Selenium Grid.&lt;/p>
&lt;/blockquote>
&lt;p>We’ve covered a lot of ground in the past few blog posts, including how to contribute to the project, and some
details of what you can expect as a Selenium user. But there’s more to Selenium than just the APIs you use to write
your tests, and one of the big features we’ve not covered yet is the refreshed Selenium Grid: a mechanism that
allows you to distribute your tests across a fleet of machines.&lt;/p>
&lt;p>Before going further, it’s always nice to acknowledge where we’ve come from, not only because it’s interesting, but
also because it helps explain the “why” of the refreshed design.&lt;/p>
&lt;p>Way back in the mists of time (2008), Jennifer Bevin and Jason Huggins worked on a system called the Selenium Farm
at Google. This was a fleet of machines sitting in a cupboard somewhere that allowed you to run the original
Selenium protocol. This was, of course, at Google scale, so there was more than one cupboard :)&lt;/p>
&lt;p>This allowed people at Google to distribute their tests and scale out beyond their individual machines.
This was such a great idea that when Jennifer talked about the Farm at a Selenium meetup, Philippe
Haringou (then at ThoughtWorks) decided to write an Open Source implementation of the same thing,
which he called “Selenium Grid”.&lt;/p>
&lt;p>Selenium Grid was a lovely piece of technology, but it had one drawback: it only spoke the original
Selenium RC protocol. That was fine, but WebDriver spoke a different wire protocol, which was called the
JSON Wire Protocol, and folks wanted to be able to use both Selenium RC and WebDriver at the same time.&lt;/p>
&lt;p>This is where Francois Reynaud enters the picture. He was working at eBay, reporting to Michael Palotas,
and he had written something like the original Selenium Grid, but which also worked with the JSON Wire
Protocol. They very kindly contributed that work to the Selenium project, and it formed the basis of the
Selenium Grid 2. We decided at the time that the Selenium standalone server would effectively be a
“grid of one”: it would have everything you needed in it to set up a Selenium Grid, as well as to work as
a single standalone server. Merging the code and getting it stable took a while, but thanks to the efforts
of Francois, Kristian Rosenvold, and many others, we merged Grid 2 into the main Selenium project and shipped
Selenium 2 in 2011.&lt;/p>
&lt;p>Even if 2011 doesn’t feel that long ago, the modern world has changed quite significantly. In 2011, we didn&amp;rsquo;t
have Docker. We didn&amp;rsquo;t have Kubernetes, we didn&amp;rsquo;t really have AWS. So, the Selenium Grid didn&amp;rsquo;t know that those
things were coming in, and wasn&amp;rsquo;t written to take advantage of them. Fortunately, we did have virtual machines
back then, and the Grid 2 had been designed to be able to support them.&lt;/p>
&lt;p>This was the hook that an excellent project called Zalenium. Developed by Diego Molina, Zalenium added a really
nice UI and support for Docker and Kubernetes—all built on top of the Grid 2. This has allowed the Selenium Grid to
continue to be relevant and useful to this day, which is an amazing achievement.&lt;/p>
&lt;p>But, like I said, it took us time to stabilise Grid 2: about six months of hard work, largely led by Kristian.
That’s because while Grid 2 was sophisticated, the code was hard to read and hard to maintain—and very few people
could do that. Worse, the merging of the Grid 2 and the original Selenium server was pretty crude; effectively
there were two separate servers shipped in the same binary. This led to problems occurring in the Grid but not
when run in standalone mode, and vice versa.&lt;/p>
&lt;p>With Selenium 4 we’ve decided to bite the bullet and address these three concerns. Firstly, we want something that
was easier to work on and maintain. Secondly, we want to merge the servers into a single unit. Thirdly, we want
something that will take advantage of the world of modern infrastructure we have available to us now, not just in
the form of Docker and Kubernetes, but also to be able to use emerging technologies such as distributed tracing.&lt;/p>
&lt;p>To do this, we looked at the functionality the Grid provided, and to model each piece as a component that we can
either run “in memory” (allowing us to have a single standalone server), or in a more distributed way, allowing
the “hub and node” architecture that we’re familiar with from the original Selenium Grid, to a fully distributed
design.&lt;/p>
&lt;p>The first component is the “router”. It serves as the entry point to the Grid. You can expose it to the internet
and it directs requests to the Grid. It’s designed to be stateless, and so you can add more to Grid as you find
you need to.&lt;/p>
&lt;p>When the router sees a new session request, it places it on a “session queue.” The session queue is read by a
component called the “distributor,” which maintains a model of all the places in the Grid where a session could be
run: we call them “slots”. The slots are hosted by components called “nodes,” and each node can have one or more
slots. When the distributor pulls a new session request from the queue, it identifies the most appropriate slot
to use, and forwards the request to the node which owns the slot. Once the node has started the session, the
distributor puts the session ID and the URL of the Node that is running the test into the “session map”—you can
think of the session map as being a simple map of a session ID to URL—and the new session response is sent
back to the waiting test.&lt;/p>
&lt;p>Requests for running sessions (that is, for most webdriver calls!) are handled slightly differently. The router
will use the session map to look up which node to forward the request to, avoiding the need to involve the
distributor entirely. This means that you can just keep adding nodes to the Grid, and there are fewer bottlenecks
in the architecture to slow your requests down.&lt;/p>
&lt;p>Conceptually, there are these five moving pieces within the Grid. But there&amp;rsquo;s actually a sixth one, which is a
message bus. The five Grid components communicate internally through the message bus, but the actual components
that you need to think about when you&amp;rsquo;re thinking about the Grid are the Router, Session Queue, Distributor, and
Nodes.&lt;/p>
&lt;p>When you run Selenium Grid 4 in “standalone” mode, you actually get a “grid of one”. We wire up all these
components in a single process, but they’re all still there.&lt;/p>
&lt;p>You can also run it in the traditional Hub and Node approach that you&amp;rsquo;ve seen with Selenium Grid 2, where you
fire up a Hub and a Node and it registers. If you&amp;rsquo;ve used Selenium Grid recently, that&amp;rsquo;s probably the architecture
that you&amp;rsquo;re familiar with. In this case, most of the components (the router, session queue, and distributor) are
running in the Hub, and the Nodes run the sessions themselves.&lt;/p>
&lt;p>What’s new with Grid 4 is that you can go into a fully distributed mode if you want to. Typically, you would want
to use something like Kubernetes for this, and some of the key components are designed to store data using a
database or Redis for better reliability and scalability.&lt;/p>
&lt;p>Something to note is that when running a distributed Grid, it becomes really difficult to figure out what is
happening, particularly when something goes wrong. To alleviate that problem, we have adopted Open Telemetry to
bring observability into the Grid. What do we mean by observability? It simply means that we want to be able to
see everything that happens.&lt;/p>
&lt;p>Finally, we’d like to expose information about the running Grid in meaningful and useful ways. The original
Grid supported both JMX (a Java management API) and an HTML-based console. While nice, this didn’t make it easy
to query specific areas of the Grid that you might be interested in that weren’t surfaced by the UI (for example,
how many slots are available, or to find out which node a particular session is running on) To provide more
flexibility, we’ve chosen to provide a GraphQL endpoint for the Grid. To ensure that GraphQL endpoint is
sufficiently flexible, we’re building the new Grid console using it. That should allow you to also extract useful
metrics and information from the Grid for your monitoring needs.&lt;/p>
&lt;p>Those are some highlights of the new Selenium Grid. What are you the most excited about?&lt;/p>
&lt;p>&lt;em>This was originally posted at &lt;a href="https://saucelabs.com/blog/whats-coming-in-selenium-4-the-new-selenium-grid">https://saucelabs.com/blog/whats-coming-in-selenium-4-the-new-selenium-grid&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Blog: New Tricks in Selenium 4</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-new-tricks/</link><pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-new-tricks/</guid><description>
&lt;blockquote>
&lt;p>In the third post in his series, Simon Stewart continues talking about what&amp;rsquo;s coming in
Selenium 4 and reviews some of the tricks in the new release.&lt;/p>
&lt;/blockquote>
&lt;p>In my last posts, we talked about
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-how-can-i-contribute">how to contribute to Selenium&lt;/a>, and
&lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-why-the-major-version-bump">why we’re bumping the version number to 4&lt;/a>.
That’s enough preamble! Today, we’ll cover some details about the new tricks and capabilities
that Selenium 4 offers.&lt;/p>
&lt;h2 id="finding-elements-and-relative-locators">Finding Elements, and Relative Locators&lt;/h2>
&lt;p>You know, finding elements on a page can be really difficult. I&amp;rsquo;ve seen loads of people using
very complicated XPATH expressions, and trying to figure out complex CSS selectors and things
like that. There have been whole talks about the subject at SeleniumConf. Surely there must
be a better way to do this?&lt;/p>
&lt;p>Think about how we describe where an element is on the page. Think about how you’d do this
over the phone. You’d never talk about the raw DOM, “Ah, find the fifth DIV element nested
inside the SPAN with an ‘id’ of ‘foo’”. You’d just never say that! Instead, you’d say
something like, “just find that thing above that image, and to the right of that link,”
when talking about where things are located on the page.&lt;/p>
&lt;p>A long time ago, a project called &lt;a href="https://sahipro.com">Sahi&lt;/a> started to locate elements
like this. Sahi had &lt;a href="https://sahipro.com/docs/sahi-apis/accessor-api-basics.html#Use%20of%20Positional%20Relation%20APIs">Relation APIs&lt;/a>, which are a lovely way of finding elements,
and it was very, very fluent and pleasant to use. When I was starting WebDriver years ago,
I was talking with &lt;a href="https://twitter.com/narayanraman">Narayan&lt;/a> (creator of Sahi) and I
promised him that I was going to hold off implementing this flagship feature of Sahi. It
was something that was lovely, but it was also something Sahi was rightly proud of. However,
there are now other tools, such as Tyco, that are implementing this style of API, so it
seems like the time is right to do the same in Selenium. In Selenium 4 we call them
“relative locators.” You may sometimes see us refer to them as “friendly locators,” since the
initial implementation called them that, but “relative” better describes how they work. We
have a handful of them: near, above, below, left of, right of. They allow you to talk in human
language about where an element is on a page.&lt;/p>
&lt;p>Looking at the future, we are also planning to enable users to add new types of locators,
not only on the, on the client side, but also to the Selenium Server. For example, although
JS UI frameworks come and go (anyone else remember using jquery?), it’d be nice to be able
to add a custom locator for the current tools people like, such as React.&lt;/p>
&lt;h2 id="authenticating-to-web-sites">Authenticating to Web Sites&lt;/h2>
&lt;p>One feature that people have been asking for since we started the project has been the ability
to authenticate to a web site. Previously, you could do this by crafting the URL the browser
went to properly, but this leaks credentials to any man-in-the-middle and leaves them in server
logs, so browsers have slowly removed this piece of functionality. That’s unfortunate, since
it’s something that we know people frequently need to do in their tests. In Selenium 4, we
now offer a mechanism to register a username and password that can be used to authenticate against these sites.&lt;/p>
&lt;h2 id="intercepting-network-traffic">Intercepting Network Traffic&lt;/h2>
&lt;p>A common complaint of Selenium tests is that they’re slow and flaky. While the bindings to the
browser are excellent, and fully described by the W3C WebDriver spec, it is true that any end-to-end
test is likely to suffer more flakiness than a simple unit test—there are just more moving parts,
and more possibilities for things to go wrong.&lt;/p>
&lt;p>One way to resolve this issue is to stub out the backend of the application, intercepting network
traffic in the test and returning pre-canned responses. Tools such as &lt;a href="http://www.mbtest.org">mountebank&lt;/a>
make this easy for API testing. Wouldn’t it be nice if there was a similar tool for Selenium?&lt;/p>
&lt;p>With Selenium 4, we now provide a mechanism to do this, using the NetworkInterceptor (well, that’s
what we call it in the Java bindings). Pass it your WebDriver instance, and it’ll be called every time
the browser is about to make an HTTP request, allowing you to return almost anything you want&lt;/p>
&lt;h2 id="the-chrome-debugging-protocol">The Chrome Debugging Protocol&lt;/h2>
&lt;p>As I mentioned previously, one of the nice things about Selenium 4 is our work to ensure a stable
and modern user-facing API. What does this mean? To start, we need to acknowledge that after a long
time there’s now competition back in the browser automation space. Notably in the form of Puppeteer
and Cypress, and taking a step back, what do they offer? They build upon the
&lt;a href="https://chromedevtools.github.io/devtools-protocol/">Chrome DevTools Protocol (CDP)&lt;/a>&amp;gt;, which is a
protocol developed to enable a debugger inside Chromium-based browsers.&lt;/p>
&lt;p>Because of what it was designed to do, it is a chatty protocol, and not a user-facing API that
allows you to introspect into the browser. Worse, introduce a network hop between the test and the
browser, this chattiness leads to slower tests as the network latency increases. That is why tools
such as Puppeteer want you to run on the local machine. That’s great for the speed of an individual
test, but makes parallelisation harder, as you can&amp;rsquo;t use services such as Sauce Labs easily.&lt;/p>
&lt;p>To complicate matters, because the CDP is designed as a &lt;em>debugging&lt;/em> protocol, it can change with no
notice between versions. That’s why Puppeteer and Cypress are tied to specific versions of browsers,
and that causes a dilemma for you as a test author: how do you test on multiple versions of a browser?
Updating the test API to get a different browser can lead to you no longer making valid API calls.
Not doing so ties you to a potentially outdated version of a browser.&lt;/p>
&lt;p>Despite this, using the CDP opens up a host of possibilities, and that’s why we’ve added support
for it in Selenium 4. In fact, some of our new features are built on top of it (though we hide the details!)&lt;/p>
&lt;p>But we’ve also gone further that just adding basic support. Selenium 4 can support multiple versions
of the CDP at the same time, meaning you can test with both the current and beta versions of Chromium-based
browsers without needing to rewrite tests. We do this by providing an “idealised CDP”, which is
stable and covers the features we feel tests need. If that idealised view of the world isn’t enough
for you, we also expose the raw CDP APIs too, giving you flexibility to choose what’s best for your tests.&lt;/p>
&lt;p>We’re feeding this experience into the new W3C WebDriver Bidi specification, which is helping make that
a better fit for testers.&lt;/p>
&lt;p>I am leaving out of this post all the details related to another important trick in Selenium 4, the new
Selenium Grid, which I will cover in the next post. Stay tuned!&lt;/p>
&lt;p>&lt;em>This was originally posted at &lt;a href="https://saucelabs.com/blog/new-tricks-in-selenium-4">https://saucelabs.com/blog/new-tricks-in-selenium-4&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Blog: What’s Coming in Selenium 4: Why The Major Version Bump?</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-why-the-major-version-bump/</link><pubDate>Tue, 10 Nov 2020 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-why-the-major-version-bump/</guid><description>
&lt;blockquote>
&lt;p>In the second post in this series, Simon Stewart continues talking about
what&amp;rsquo;s coming in Selenium 4 and why this release has a major version bump.&lt;/p>
&lt;/blockquote>
&lt;p>In my &lt;a href="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-how-can-i-contribute/">last post&lt;/a>,
I shared a bit about how the Selenium project works overall. Now, let’s start talking about Selenium 4
and what’s coming. One thing I think I should clear up is &amp;ldquo;why the major version number bump?&amp;rdquo;&lt;/p>
&lt;p>Sometimes I joke that the major reason for the version number bump is that while the digits of Pi are
infinite, when we went from 3.14 to 3.141, people got a little bit upset. Moving to 3.141.5 and then
3.141.59 was as far as we wanted to push that particular idea :)&lt;/p>
&lt;p>More seriously, the first reason is that we have a revised Selenium IDE. Years ago, this used to be
Firefox only because it used the XPI extension mechanism (which was specific to Firefox). It’s now a
web component, and you can download it for Chrome, Firefox, and anything else that supports Web
Components. There is currently work to rewrite it as an Electron app, which will allow us to make
better use of the native OS the IDE is running on. That work was largely pushed forward by developers
working at Applitools. They started from a base of the original Selenium IDE that had been migrated
to use Web Components by a company called SideX. It’s been a fantastic example of the community
working together well.&lt;/p>
&lt;p>Secondly, we have fully adopted the W3C WebDriver protocol, and have dropped support for the original
home-grown wire protocol. The way that Selenium communicates with a web browser is via a wire protocol
that’s effectively just JSON over HTTP. Originally this grew organically as we figured things out,
and we tried to make browsers do what we needed them to. That original protocol is known as the JSON
wire protocol because it spoke JSON over the wire (and we’re not great at coming up with very original names).&lt;/p>
&lt;p>That original protocol was the base for the W3C WebDriver protocol, which smoothed some of the rough
edges, and brought some much needed consistency to the protocol. The two major areas the standardised
protocol improved on included session creation, where we removed considerable ambiguity, and by providing
a far richer API for specifying user actions.&lt;/p>
&lt;p>So what does this adoption of the W3C protocol mean for you? I&amp;rsquo;ll be honest: it probably doesn’t mean
much to you at all. If you&amp;rsquo;re using a modern browser (released over the past couple of years), you will
find that actually you already speak the W3C protocol with Selenium 3.&lt;/p>
&lt;p>So who does care about the protocol dialects? When we talk about companies like Sauce Labs who provide
Selenium as a service—they care about it. The ecosystem is ready for this next step, because the
technical folks at these companies have ensured that they understand and comply with the W3C protocol,
and folks from the Selenium project have been there offering help and advice as needed.&lt;/p>
&lt;p>One of the other nice things about Selenium 4 is that we&amp;rsquo;ve done our best to ensure a stable user-facing
API. That means when you upgrade your project from Selenium 3 to Selenium 4, it should be a drop-in
upgrade. You just change the version number, recompile and you should be done.&lt;/p>
&lt;p>There are a few caveats that you should be aware of, however! The major one is that if in the last version
of Selenium 3 a method was deprecated, it’s now probably gone. We’ve taken the opportunity of a major
version bump to delete them and clean up the behind-the-scenes internals people don’t normally get to see.
If you’re a software developer, you may recognise this as us paying off some of our technical debt :)&lt;/p>
&lt;p>Stay tuned for the next post, where I’ll go over some new tricks in Selenium 4.&lt;/p>
&lt;p>&lt;em>This was originally posted at &lt;a href="https://saucelabs.com/blog/whats-coming-in-selenium-4-why-the-major-version-bump">https://saucelabs.com/blog/whats-coming-in-selenium-4-why-the-major-version-bump&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Blog: What’s Coming in Selenium 4: How Can I Contribute?</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-how-can-i-contribute/</link><pubDate>Mon, 02 Nov 2020 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/what-is-coming-in-selenium-4-how-can-i-contribute/</guid><description>
&lt;blockquote>
&lt;p>In this new blog series all about the upcoming release of Selenium 4, Simon Stewart will
cover how the Selenium project works, who is involved, how you can get involved, and a
sneak peek at what’s new in Selenium 4.&lt;/p>
&lt;/blockquote>
&lt;p>As the lead of the Selenium project, I wanted to kick off a new blog series leading up to
the release of Selenium 4. During this series, I’ll talk all about how the Selenium project
works, who is involved, how you—yes, you!—can get involved, and we’ll get a sneak peek at
what’s new in Selenium 4. I&amp;rsquo;ve been speaking about this off and on for a while, but now
the 4.0 release is looming I wanted to start sharing in more depth.&lt;/p>
&lt;p>In this first post, we’ll start off with a brief discussion about how the Selenium project
itself runs and who does what, because that’s a really helpful piece to understand how and
why things happen the way they do on the project. In future posts, we’ll look at the new IDE,
and then we’ll talk about Selenium 4 in more depth, including the fact that it should be a
drop-in replacement for you. I’ll also review some new features that we’ve added to Selenium
4, and talk a bit about the modernized Selenium Grid. So let’s get started!&lt;/p>
&lt;h2 id="about-the-selenium-project">About the Selenium Project&lt;/h2>
&lt;p>Selenium is an Open Source project. It&amp;rsquo;s run under the aegis of the Software Freedom
Conservancy (SFC). The SFC is a group dedicated to pushing forward Free and Open Source
software. Besides Selenium, they have a handful of projects you may have heard of, including
Samba, Mercurial and Git. The SFC allows us to focus on writing code and fixing bugs by
handling all the legal and financial stuff we’re not good at. They’re the ones that help
us negotiate contracts for when we want to run SeleniumConf, for example.&lt;/p>
&lt;p>Acting as a bridge between the project and the SFC is the Project Leadership Committee
(PLC). Currently, it’s made up of Jim Evans, Alexei Barantsev, Marcus Merrell, Manoj Kumar,
and myself. What do we do? Effectively, the PLC is about providing a smaller group of people
for the SFC to talk to when decisions need to be made about funding a conference, or how
best to respond to sponsorship agreements. Because we like to do as much work in the open
as possible, you can find us on the &lt;code>#selenium-plc&lt;/code> Slack channel, and almost every
conversation and topic is discussed here.&lt;/p>
&lt;p>One of the key qualifications for being on the PLC is a demonstrated commitment to helping
the Selenium project improve and succeed, and we recognise that the project is more than just
“code.” It’s a community, and the make up of the PLC reflects that.&lt;/p>
&lt;p>The Technical Leadership Committee (TLC) includes the people who set the technical direction
for the project. If you come over to the Selenium Slack, you can find the &lt;code>#selenium-tlc&lt;/code> channel,
which is where a lot of the technical conversations happen for the project. The TLC includes Jim
Evans, Alexei Barantsev, David Burns, Diego Molina, Titus Fortner, and me.&lt;/p>
&lt;p>How do you get on the TLC? Although the project governance document goes into more detail,
it can be summed up as simply as someone who’s demonstrated technical leadership on the project,
over an extended period of time. Just as with the PLC, being on the TLC doesn’t give someone more
authority, but they’re the ones who can merge PRs, and who can (if need be) commit directly to the tree.&lt;/p>
&lt;p>Again, the TLC tries to do as much work as possible in the open. If you’re ever interested in watching
the design discussions, or asking why a bit of the Selenium code base is structured the way it is, then
come and join us in the &lt;code>#selenium-tlc&lt;/code> Slack channel. There’s normally someone from the project there
who’ll be able to answer your questions!&lt;/p>
&lt;p>I wanted to share how the project works for one simple reason: to highlight one of the really important
things with Open Source, which is that anyone can contribute! You don&amp;rsquo;t need to be throwing code around
in order to be contributing, and &lt;a href="https://www.youtube.com/watch?v=PZ-BfM97PZk">you don’t need to be special&lt;/a>
in order to contribute your time and effort.&lt;/p>
&lt;p>So obviously there&amp;rsquo;s the people running the projects and writing code, but we couldn&amp;rsquo;t do that all on our own.
Every release includes contributions from a variety of people, not just the core development team. Also, we&amp;rsquo;re
always happy to accept patches. If you&amp;rsquo;re not quite sure where to start, I recommend you head to our
&lt;a href="https://github.com/seleniumhq/selenium/">GitHub page&lt;/a> and take a look at the project tab. That’s where you
can see the things that need to be done and what we&amp;rsquo;re working on.&lt;/p>
&lt;p>The other way to get involved is the way that everyone used to get involved with Open Source, which is by
what&amp;rsquo;s known as “scratching your own itch”. It&amp;rsquo;s if there&amp;rsquo;s something about the project, something about the
product you think could be a little bit better, download the source, edit it, and then send us a PR.&lt;/p>
&lt;p>We encourage you to get involved and contribute! On the Selenium website, there is a
&lt;a href="https://www.selenium.dev/governance/">page&lt;/a> that outlines in detail the steps to join the Selenium team.
Join the Selenium Slack channel to interact with us and ask questions. If you want to discuss something,
or if you don&amp;rsquo;t understand why the code is written the way it is, feel free to come on to that Slack channel
and talk to us. Also, if you&amp;rsquo;d like to see how the decision making is made, then please do feel free to come
on to the &lt;code>#selenium-tlc&lt;/code> or the &lt;code>#selenium-plc&lt;/code> channels to see those groups. Because we&amp;rsquo;re Open Source, we
try and do everything in the open.&lt;/p>
&lt;p>If you’d like to put faces to people’s Slack or IRC handles, then please note that there’s a regular team
meeting every other Thursday on Google Meet at 4:30pm (UK time!) We tend to just chat and discuss everything
from the project to the weather, but that’s a great way to get to know people a little better! :)&lt;/p>
&lt;p>Finally, if you’re having trouble getting to grips with the Selenium code base, then please do come and ask us
for help. We’ve done our best to make the on-ramp as easy to take as possible, but the project can seem complicated
and daunting when you’re getting started. We’re here to help!&lt;/p>
&lt;p>I hope you enjoyed this intro to the Selenium project. Next week, we’ll talk about why the major version bump to
Selenium 4. Stay tuned!&lt;/p>
&lt;p>&lt;em>This was originally posted at &lt;a href="https://saucelabs.com/blog/whats-coming-in-selenium-4-how-can-i-contribute">https://saucelabs.com/blog/whats-coming-in-selenium-4-how-can-i-contribute&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Blog: SeleniumConf Virtual 2020 Recap</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/</link><pubDate>Wed, 30 Sep 2020 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/</guid><description>
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/featured_selenium_conf_2020_recap_1_hu0c05a06f2dec34c46adb7995bcf4e8d5_68229_640x0_resize_catmullrom_3.png" width="640" height="212"/>
&lt;figure class="img-responsive">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/featured_selenium_conf_2020_recap_1.png"/>
&lt;/figure>
&lt;p>This year the &lt;a href="https://2020.seleniumconf.in/">Selenium Conference&lt;/a> was held virtually, and
despite that, the conference was again that exciting place where the Selenium community
meets every year to share and learn about the most popular browser automation tool in the
world. The conference offered talks about improved testing practices, new tools to simplify
the setup of automated tests, the future of Selenium, and lots of learnings from speakers
who shared their use cases and practical advice for how they use Selenium at work.&lt;/p>
&lt;p>Here are some takeaways and interesting talks from this year’s conference:&lt;/p>
&lt;h2 id="selenium-state-of-the-union">Selenium: State of the Union&lt;/h2>
&lt;p>A peek at the upcoming Selenium 4 release was possible thanks to the demo
&lt;a href="https://twitter.com/shs96c">Simon Stewart&lt;/a> gave during this traditional
&lt;a href="https://confengine.com/selenium-conf-2020/proposal/14020/selenium-state-of-the-union">talk&lt;/a>
that happens in every Selenium conference. Selenium 4 is shaping up nicely and will leave
the Alpha state soon. We are all looking forward to the betas, and a candidate release
shortly after that. The talk also invited other members of the Selenium team to share the
organizational work they have been doing in the project, including diversity, governance
and welcoming contributors.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_2.png"/>
&lt;/figure>
&lt;h2 id="build-a-responsive-typescript-wdio-framework">Build a responsive typescript wdio framework&lt;/h2>
&lt;p>&lt;a href="https://twitter.com/vibranttester">Varuna Srivastava&lt;/a> gave a
&lt;a href="https://confengine.com/selenium-conf-2020/proposal/13629/build-a-responsive-typescript-wdio-framework">talk&lt;/a>
together with &lt;a href="https://confengine.com/selenium-conf-2020/proposal/13629/build-a-responsive-typescript-wdio-framework">Wim Selles&lt;/a>
that showed how to build a robust and scalable framework for UI testing, based on WebdriverIO.
It showed concepts that are important when getting started with JavaScript, NodeJS, and the NPM
ecosystem. Furthermore, there was a broad overview of WebdriverIO and its shiny features, as well
as a demo on how to use TypeScript for testing. This is a recommended talk for anyone who wants to
get started on testing with JavaScript.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_3.png"/>
&lt;/figure>
&lt;h2 id="to-test-and-monitor-one-website-is-not-that-hard-but-what-if-you-need-to-do-it-to-over-40-websites">To Test and monitor one website is not that hard, but what if you need to do it to over 40 websites?&lt;/h2>
&lt;p>This was an interesting &lt;a href="https://confengine.com/selenium-conf-2020/schedule">talk&lt;/a> from
&lt;a href="https://twitter.com/qa_jesus">Jesus Sanchez&lt;/a>, where in order to avoid having the QA department as
a bottleneck for the growing team of developers, they took the approach of building tools and resources
for developers and enabling them to write tests for their over 40 websites. It is an interesting take
on how the QA role becomes a facilitator and an enabler for the rest of the organization, while
coaching everyone on how to write automated tests and the value of testing the right thing.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_4.png"/>
&lt;/figure>
&lt;h2 id="careers-in-testing--identify-your-superpower">Careers in Testing – Identify your SuperPower&lt;/h2>
&lt;p>&lt;a href="https://twitter.com/smitapmishra">Smita Mishra&lt;/a> gave a
&lt;a href="https://confengine.com/selenium-conf-2020/proposal/13771/careers-in-testing-identify-your-superpower">captivating&lt;/a>
talk where she invited all testers to think what alternative paths could be present in their careers,
given that some organizations value testing more than others. Smita showed that if you understand what
you enjoy the most, and find a way to combine that with your current and future skills, it could show
you how to grow your career by finding and following a path of the least resistance.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_5.png"/>
&lt;/figure>
&lt;h2 id="developing-selenium-tests-with-junit-5">Developing Selenium tests with JUnit 5&lt;/h2>
&lt;p>JUnit 5 is the new iteration of this popular testing framework, and it implements a new programming
and extension model named Jupiter. &lt;a href="https://twitter.com/boni_gg">Boni García&lt;/a> presents in this
&lt;a href="https://confengine.com/selenium-conf-2020/proposal/13255/developing-selenium-tests-with-junit-5">talk&lt;/a>
a JUnit 5 extension called &lt;a href="https://bonigarcia.github.io/selenium-jupiter/">Selenium-Jupiter&lt;/a>,
the demos showed illustrate how useful this extension is because it simplifies the test configuration
and reduces the boilerplate code that needs to be written in order to have a test running. Have a
look at it because it is well maintained and documented, and it will help you by reducing the time
needed to set up your tests.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_6.png"/>
&lt;/figure>
&lt;h2 id="im-not-special">I&amp;rsquo;m Not Special&lt;/h2>
&lt;p>One of the &lt;a href="https://confengine.com/selenium-conf-2020/proposal/14005/im-not-special">keynotes&lt;/a> in
the conference was done by &lt;a href="https://twitter.com/jimevansmusic">Jim Evans&lt;/a>, where he relates a
personal journey through his career and how clearly “not special” he considers himself. One of
the key takeaways is the fact that you become a major contributor and you do not need to be special
to do that. No review will make enough justice to highlight how heartwarming and encouraging this
talk was, it is a must watch for anyone who wants to become a contributor.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_7.png"/>
&lt;/figure>
&lt;h2 id="closing-keynote">Closing keynote&lt;/h2>
&lt;p>The final session of the conference was the
&lt;a href="https://confengine.com/selenium-conf-2020/proposal/14836/q-a-with-the-selenium-committee">keynote&lt;/a>
where the project committers do an open Q&amp;amp;A with the community. Different opinions were shared around
the question of the challenges the Selenium project sees by the growing number of browser automation
tools. In addition, all project contributors made an open invitation to the community to get involved
in the project, if you are interested in that, please check the project’s
&lt;a href="https://www.selenium.dev/governance/">governance document&lt;/a>. This is another recommended session
to watch, lots of insights about how the project and its individuals work that will help the community
understand the project better.&lt;/p>
&lt;figure class="img-responsive my-5">
&lt;img src="https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-conf-2020-recap/selenium_conf_2020_recap_8.png"/>
&lt;/figure>
&lt;p>&lt;em>This was originally posted at &lt;a href="https://opensource.saucelabs.com/blog/selenium_conf_2020_recap/">https://opensource.saucelabs.com/blog/selenium_conf_2020_recap/&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Blog: Selenium 4.0 Alpha 6 is out!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-4-alpha-6-is-out/</link><pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2020/selenium-4-alpha-6-is-out/</guid><description>
&lt;p>We are very pleased to announce the release of &lt;a href="http://www.selenium.dev/downloads/">Selenium 4.0 Alpha 6&lt;/a>.&lt;/p>
&lt;p>All the information can be seen in different tweets from the project contributors, here they are all in one place:&lt;/p>
&lt;p>&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Happy Friday! I&amp;#39;ve just pushed Selenium 4.0a6 for Java. There&amp;#39;s a lot of nice changes:&lt;br>&lt;br>* Full remoting of the CDP protocol across the Grid&lt;br>* The skeleton of our GraphQL support&lt;br>* Better configuration options, especially for Nodes, via TOML&lt;br>* A bajillion improvements &amp;amp; fixes&lt;br>&lt;br>1/5&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1266307374941437952?ref_src=twsrc%5Etfw">May 29, 2020&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">As ever, this release is the product of hard work and contributions not only from the core team (special thanks to &lt;a href="https://twitter.com/barancev?ref_src=twsrc%5Etfw">@barancev&lt;/a> and &lt;a href="https://twitter.com/diemol?ref_src=twsrc%5Etfw">@diemol&lt;/a>. You&amp;#39;ve done amazing work!) but also from a host of other people. In that spirit, I&amp;#39;d like to thank… 2/5&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1266307376279359488?ref_src=twsrc%5Etfw">May 29, 2020&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">In no particular order:&lt;br>&lt;br>* Amit Bhoraniya&lt;br>* @bongosway&lt;br>* Gerry Gao&lt;br>* Sridhar Upputuri&lt;br>* John Chen&lt;br>* @alb_i986&lt;br>* Rahul Shah&lt;br>* &lt;a href="https://twitter.com/ulfjack?ref_src=twsrc%5Etfw">@ulfjack&lt;/a> &lt;br>&lt;br>I&amp;#39;ve linked to the twitter handle where I know it. Give &amp;#39;em a high five! Selenium wouldn&amp;#39;t be possible without the help of the community! 3/5&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1266307377420275713?ref_src=twsrc%5Etfw">May 29, 2020&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">I&amp;#39;m hoping that the next alpha will be the last alpha. The &amp;quot;big ticket&amp;quot; items remaining are:&lt;br>&lt;br>* Provide nice APIs to take advantage of the CDP&lt;br>* Flesh out the GraphQL support&lt;br>* A nice UI to take advantage of the GraphQL endpoint&lt;br>* Robustness work in the Grid&lt;br>&lt;br>4/5&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1266307378485563392?ref_src=twsrc%5Etfw">May 29, 2020&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">You can come and join in the fun by either heading over to the GitHub project and picking a task (&lt;a href="https://t.co/2ifj6CkeEV">https://t.co/2ifj6CkeEV&lt;/a>) or (and!) coming to have a chat on Slack &lt;a href="https://t.co/4aEDqyI6gq">https://t.co/4aEDqyI6gq&lt;/a> 5/5&lt;/p>&amp;mdash; Simon Mavi Stewart (@shs96c) &lt;a href="https://twitter.com/shs96c/status/1266307379513171968?ref_src=twsrc%5Etfw">May 29, 2020&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">I have just tagged &lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4a6 on GitHub. It&amp;#39;s got a lot of nice cleanups as we edge closer to a proper &lt;a href="https://twitter.com/hashtag/Selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#Selenium&lt;/a> 4 release!&lt;/p>&amp;mdash; David @automatedtester@mastodon.social (@AutomatedTester) &lt;a href="https://twitter.com/AutomatedTester/status/1266025050706149379?ref_src=twsrc%5Etfw">May 28, 2020&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">selenium-webdriver 4.0.0.alpha6 has just been released. The biggest change is an experimental support for Chrome DevTools protocol! Read more in changelog &lt;a href="https://t.co/1l2XYkaEfB">https://t.co/1l2XYkaEfB&lt;/a>.&lt;a href="https://twitter.com/hashtag/selenium?src=hash&amp;amp;ref_src=twsrc%5Etfw">#selenium&lt;/a> &lt;a href="https://twitter.com/hashtag/ruby?src=hash&amp;amp;ref_src=twsrc%5Etfw">#ruby&lt;/a> &lt;a href="https://twitter.com/hashtag/devtools?src=hash&amp;amp;ref_src=twsrc%5Etfw">#devtools&lt;/a>&lt;/p>&amp;mdash; Alex Rodionov (@p0deje) &lt;a href="https://twitter.com/p0deje/status/1266144106885111814?ref_src=twsrc%5Etfw">May 28, 2020&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;/p>
&lt;p>Happy hacking!&lt;/p></description></item><item><title>Blog: SeleniumConf London 2019 Videos and Pictures</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2019/seleniumconf-london-2019/</link><pubDate>Sat, 09 Nov 2019 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2019/seleniumconf-london-2019/</guid><description>
&lt;p>Check out all the SeleniumConf London 2019 videos and photos!&lt;/p>
&lt;p>You can find all the videos &lt;a href="https://www.youtube.com/playlist?list=PLRdSclUtJDYXLzxGo9yjcLPDuoNGWkj6t">here&lt;/a>, and all the
pictures &lt;a href="https://www.flickr.com/photos/whiteoctevents/albums/72157711392433853">here&lt;/a>.&lt;/p>
&lt;p>If you cannot wait to get started, feel free to watch below Simon&amp;rsquo;s &amp;ldquo;State of the Union&amp;rdquo; keynote!&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/RGM4FtDA06M" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div></description></item><item><title>Blog: Selenium IDE Is Dead, Long Live Selenium IDE!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2018/long-live-selenium-ide/</link><pubDate>Mon, 06 Aug 2018 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2018/long-live-selenium-ide/</guid><description>
&lt;p>In August of 2017 Simon shared the bleak, hard news that as of Firefox 55 Selenium IDE would no longer work.
Selenium IDE (or as we’ll refer to it from here on out – the Legacy IDE) was, and is, dead.&lt;/p>
&lt;p>Since then quite a lot has happened with the IDE. We have a new version of it which we are referring to as… Selenium IDE!&lt;/p>
&lt;p>&lt;strong>It is currently in “alpha” and available for use in both
&lt;a href="https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd">Chrome&lt;/a> and
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/">Firefox&lt;/a>.&lt;/strong>&lt;/p>
&lt;p>In his post Simon also mentioned “the fine people at &lt;a href="https://applitools.com">Applitools&lt;/a>“. This includes Tomer Steinfeld,
Dave Haeffner, and Doron Zavalevsky. Together, along with contributions from the rest of the Selenium community and
the SideeX project, we have been able to get the new Selenium IDE out into the wild. We are also working to close the gap
on feature parity with its predecessor along with adding some much needed enhancements to the tool (more on that in future posts).&lt;/p>
&lt;p>We’d love for you to give the new IDE a try and let us know what you think. Visit either the
&lt;a href="https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd">Chrome Web Store&lt;/a> or
&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/">Firefox Add-ons&lt;/a> to install it. For info on how to
use the tool, you can check out the getting started documentation on Selenium HQ.&lt;/p>
&lt;p>If you have any questions you can find us on the &lt;a href="https://selenium.dev/support/">Selenium Slack/IRC chat channel&lt;/a>.
Think you found a bug? &lt;a href="https://github.com/SeleniumHQ/selenium-ide/issues">File an issue&lt;/a>. Want to contribute?
Take a look at the project on &lt;a href="https://github.com/SeleniumHQ/selenium-ide">GitHub&lt;/a>.&lt;/p>
&lt;p>Happy Testing!&lt;/p></description></item><item><title>Blog: Firefox 55 and Selenium IDE</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2017/firefox-55-and-selenium-ide/</link><pubDate>Wed, 09 Aug 2017 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2017/firefox-55-and-selenium-ide/</guid><description>
&lt;p>The bad news: &lt;strong>from Firefox 55 onwards, Selenium IDE will no longer work&lt;/strong>.&lt;/p>
&lt;p>The reasons for this are complex, but boil down to two main causes:&lt;/p>
&lt;ol>
&lt;li>Browsers are complicated pieces of software that are constantly evolving. Mozilla has been working hard to make Firefox &lt;a href="https://blog.mozilla.org/blog/2017/06/13/faster-better-firefox/">faster and more stable&lt;/a>, while still retaining the flexibility and ease of extension that we’ve come to know and love. As part of that process, Firefox is switching extensions from the original “&lt;a href="https://blog.mozilla.org/addons/2016/11/23/add-ons-in-2017/">XPI&lt;/a>” format, to a newer, more widely adopted “&lt;a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions">Web Extension&lt;/a>” mechanism.&lt;/li>
&lt;li>The Selenium project lacks someone with the time and energy to move the IDE forwards to take advantage of the new technologies.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="http://www.seleniumhq.org/">Selenium&lt;/a> is one of the most widely used pieces of testing software there is. Despite this, the team of people regularly contributing is small: since the start of the year, there are only 11 people who have made more than 10 commits, with two people accounting for more than half of those. Since 2016, only one person has been maintaining the IDE.&lt;/p>
&lt;p>Selenium is an Open Source project. None of the core contributors — not the IDE maintainer, not the language binding owners — are paid to work on work on it. They do it because they love working on the code, and they typically do it in their “copious free time”. The IDE maintainer has had almost none of that to spare. We should all be thanking that committer for his time and effort. Thank you, Samit!&lt;/p>
&lt;p>So what can we do to move forward? The first thing is that there are now a wealth of tools that are stepping up to fill the gap. You should go and have a look at them. The second thing is that there is an effort to rebuild IDE using modern APIs, to be usable across more than just Firefox. The fine people at &lt;a href="https://applitools.com/">Applitools&lt;/a> are helping with this effort.&lt;/p>
&lt;p>The third thing? That’s you. &lt;strong>You could help us&lt;/strong>.&lt;/p>
&lt;p>If you believe that a friendly UI for quickly recording and playing back tests is a useful Open Source tool, then please come and join us! The main technical discussions are happening on the #selenium IRC channel. If you’d prefer &lt;a href="https://seleniumhq.herokuapp.com/">Slack&lt;/a>, you can join us on that too. Or there’s the ever useful &lt;a href="https://groups.google.com/forum/#!forum/selenium-developers">selenium-developers&lt;/a> mailing list. Come onboard. We’d love your help, and IDE is a wonderful thing to contribute to!&lt;/p></description></item><item><title>Blog: Selenium 3.0: Out Now!</title><link>https://trunk--polite-jelly-cc0866.netlify.app/blog/2016/selenium-3-0-out-now/</link><pubDate>Thu, 13 Oct 2016 00:00:00 +0000</pubDate><guid>https://trunk--polite-jelly-cc0866.netlify.app/blog/2016/selenium-3-0-out-now/</guid><description>
&lt;p>We are very pleased to announce the release of &lt;a href="http://www.seleniumhq.org/download/">Selenium 3.0&lt;/a>. If you’ve been waiting for a stable release since 2.53.1, now’s your chance to update. And if you do, here is what you’ll find:&lt;/p>
&lt;p>As &lt;a href="https://seleniumhq.wordpress.com/2016/10/04/selenium-3-is-coming/">we’ve said before&lt;/a>, for users of the WebDriver APIs this is a drop-in replacement. You’ll find that modern browsers, such as &lt;a href="https://chromedriver.chromium.org/downloads">Chrome&lt;/a> and &lt;a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/">Edge&lt;/a> will continue to work just as before, and we’ve taken the opportunity to fix some bugs and improve stability. Selenium Grid users may require updates to their configuration as the json config file format has been updated, as have some of command line parameter options, but the upgrade should also be smooth.&lt;/p>
&lt;p>The major change in Selenium 3.0 is we’re removing the original Selenium Core implementation and replacing it with one backed by WebDriver. This will affect all users of the &lt;a href="http://seleniumhq.github.io/selenium/docs/api/java/com/thoughtworks/selenium/Selenium.html">Selenium RC&lt;/a> APIs. For more information, please see the &lt;a href="https://seleniumhq.wordpress.com/2016/10/04/selenium-3-is-coming/">previous post&lt;/a>.&lt;/p>
&lt;p>A lot has changed in the 5 years between versions 2 and 3. When we &lt;a href="https://seleniumhq.wordpress.com/2011/07/08/selenium-2-0/">shipped Selenium 2&lt;/a>, the Selenium project was responsible for providing the driver for each browser. Now, we are happy to say that all the major browser vendors ship their own implementations (&lt;a href="https://webkit.org/blog/6900/webdriver-support-in-safari-10/">Apple&lt;/a>, &lt;a href="https://chromedriver.chromium.org/">Google&lt;/a>, &lt;a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/">Microsoft&lt;/a>, and &lt;a href="https://github.com/mozilla/geckodriver/releases">Mozilla&lt;/a>). Because the browser vendors know their browsers better than anyone, their WebDriver implementations can be tightly coupled to the browser, leading to a better testing experience for you.&lt;/p>
&lt;p>The other notable change has been that there is now a &lt;a href="https://www.w3.org/TR/webdriver/">W3C specification&lt;/a> for browser automation, based on the Open Source WebDriver. This has yet to reach “recommendation” status, but the people working on it (including members of the Selenium project!) are now focusing on finishing the text and writing the implementations.&lt;/p>
&lt;p>Mozilla has been a front-runner in implementing the W3C WebDriver protocol. On the plus side, this has exposed problems with the spec as it has evolved, but it also means that Firefox support is hard to track as their engineering efforts have been forward looking, rather than on supporting the current wire protocol used by Selenium WebDriver. For now, the best advice we can offer is for you to try the latest release of &lt;a href="https://github.com/mozilla/geckodriver/releases">geckodriver&lt;/a> and Selenium together.&lt;/p>
&lt;p>These are exciting times for browser automation! Selenium 3.0 is a major release and we’re looking forward to improving things further, as well as tracking the ongoing work of the W3C spec. Our goal is to keep the changes your tests need to deal with to an absolute minimum, to continue preserving the hard work that’s gone into writing your existing tests.&lt;/p>
&lt;p>As a personal note, I’d like to say thank you to each of the many people that have worked so hard to make Selenium 3 possible. That’s not just the developers and contributors to the Open Source project (past and present), but also the engineers from Google, Microsoft, Mozilla, and Apple, and everyone involved with the W3C spec. I’d also like to say thank you to everyone who’s taken the time to report bugs, our users and our community. The project is great fun to work on and you’re the reason for that. A final thank you is due to the Software Freedom Conservancy, who have provided invaluable help with the logistics of running a large OSS project.&lt;/p>
&lt;p>Happy hacking, everyone! May your tests run fast and true!&lt;/p></description></item></channel></rss>