Released Selenide 3.0

Released Selenide 3.0

A big new year refactoring


We released Selenide 3.0. Finally!

NB! Selenide 3.0 is a major upgrade, meaning that something can become broken.

Don’t be afraid: if you used only public API and didn’t used @Deprecated methods, then nothing changes for you. But if you did, read carefully.

Historical notes

The first version Selenide 1.0 was created in year 2011. We silently tested and tuned it for more than a year.

In March 2013 we went to SeleniumCamp conference in Kiev and released Selenide 2.0 there. In 2.0 we cleaned up all the legacy and left only the new API. Then was the first “public” version of Selenide 2.0 born. At that moment, SelenideElement has only a dozen of methods and was called ShouldableWebElement. :)

Since that we released 25 versions Selenide, it got a lot of new functions, and its own legacy @Deprecated methods. We needed changes.

That’s why we finally released Selenide 3.0

New functions in Selenide 3.0

There is only one new function - method Selenide.updateHash(). It’s useful for testing rich ajax applications that react to “#” changes in URL. Method updateHash() changes “#bla-bla” part of current URL without reloading the page.

Look here for usage example.

Thanks to @fabienbancharel for pull request #254

Upgraded dependencies

  • upgraded to Sizzle 2.2.1
  • upgraded to Guava 19.0
  • upgraded to TestNG 6.9.10

It only affects you if you use some of these libraries.

Big refactoring

  • We refactored class AbstractSelenideElement. Now, instead of one huge class, we have a lot of small classes (in package Everyone of them has its own responsibility.
  • You can easily override any of SelenideElement methods.
  • You can even add your own methods to standard Selenide and Selenium methods.

We will describe these great options in details in a separate post, but you can look to examples in Selenide tests.

Thanks to Iakiv Kramarenko for his ideas and night discussions.

Big cleanup

Like we announce earlier, we cleaned up all the old stuff.

  • Remove deprecated conditions:
    • notPresent -> Use method $.shouldNot(exist) or $.shouldNotBe(present).
    • hasOptions -> Not needed anymore. Use methods $.selectOption() or $.selectOptionByValue().
    • options -> Not needed anymore. Use methods $.selectOption() or $.selectOptionByValue().
    • hasNotClass -> Use method $.shouldNotHave(cssClass("abc"))
  • Remove deprecated class JQuery
  • Remove deprecated class PrettyReportCreator (use class TextReport for JUnit or TestNG)
  • Remove deprecated methods
    • Selenide.switchToWindow(title) -> use method switchTo().window(title)
    • Selenide.switchToWindow(index) -> use method switchTo().window(index)
  • Remove deprecated methods
    • -> use method WebDriverRunner.isIE()
    • WebDriverRunner.htmlUnit() -> use method WebDriverRunner.isHtmlUnit()
    • WebDriverRunner.phantomjs() -> use method WebDriverRunner.isPhantomjs()
    • WebDriverRunner.takeScreenShot() -> use method Screenshots.takeScreenShot()
  • Remove deprecated methods
    • $.should*(String message, Condition condition) -> use method $.should*(condition.because(message))
  • Remove class com.codeborne.selenide.impl.Quotes because it was migrated to Selenium Webdriver (

Feel free to give feedback if you get something broken.


Happy new year!

I wish you fast and effective tests.

Andrei Solntsev