<commit_before># Changelog

## 5.0.2
* Upgrade to selenium-java 3.141.59
* #872 fix importing Selenide Gradle project to IDEA  --  thanks to jkromski-fh for PR #872

## 5.0.1 (released 07.11.2018)
* Upgrade to selenium-java 3.141.5
* #855 Lock chromedriver version for chrome 70
* #747 fixed IndexOutOfBounds if CollectionElement does not exist  --  thanks to <NAME> for PR #837 
* #844 fixed ClassCastException in `$$.toArray()`  --  thanks to BorisOsipov for PR #847 
* #840 generate random file name if failed to extract it from URL or http header

## 5.0.0 (released 10.10.2018)
* #354 Create non-static alternative for Configuration (Config) and Selenide (SelenideDriver). Now you can run 2 browsers in a test.
* Move inner classes AssertionMode, SelectorMode, FileDownloadMode from Configuration to package `com.codeborne.selenide`
* #809 $ and $$ should throw a clear error message if browser is not opened yet (or has already been closed)
* #809 when waiting for a condition, catch explicitly only needed exceptions instead of `Throwable` which is too generic. It does not make sense to wait for 4 seconds in case of IllegalStateException, FileNotFoundException etc.
* throw ElementIsNotClickableException instead of ElementNotFoundException if element is covered by other element
* #809 Method $ will NOT automatically open a browser (if you forgot to call `open(url)` before)
* Selenide now throws an exception if `Configuration.fileDownload == PROXY`, but `Configuration.proxyEnabled == false`. You will need to set `Configuration.proxyEnabled` to `true`.  
* #811 Make Chrome the default browser   --  thanks to @rosolko for PR #812 
* #810 do NOT maximize browser by default   --  thanks to @rosolko for PR #812 
* #810 set browser size to 1366x768 by default   --  thanks to @rosolko for PR #812 
* #806 Remove deprecated APIs   --  thanks to @rosolko for PR #812 
* #817 fix "FirefoxDriverFactory overwrites Firefox profile provided by Configuration"  --  thanks @BorisOsipov for PR #821
* bugfix: method Selenide.download() should not fail if there is no opened browser yet
* #825 Upgrade to WebDriverManager 3.0.0 (again)
* #825 Add workaround for WebDriverManager issue when it calls github too often and gets 403 error
* #832 Added support for screenshots outside of "user.dir" in CI server

Technical changes (probably should not affect end users):
* Move junit5-api dependency to compile level
* upgrade to htmlunitdriver 2.33.0
* Move constants IE, FIREFOX etc from class `WebDriverRunner` to its parent class `Browsers`
* Move classes `Selenide`, `WebDriverRunner`, `Configuration` to subfolder `statics`. 
* Move default settings logic from `Configuration` to `SelenideConfig`. 

## 4.14.2 (released 22.09.2018)
* Upgrade to htmlunit 2.33
* Upgrade to Sizzle 2.3.4-pre
* #804 avoid throwing NPE when `Configuration.reportFolder` is null

## 4.14.1 (released 06.09.2018)
* Upgrade to WebDriverManager 3.0.0
* #794 Removed unused setting `Configuration.dismissModalDialogs`  -- see PR https://github.com/codeborne/selenide/pull/795
* Removed unused setting Configuration.openBrowserTimeoutMs
* #798 Remove deprecated method $.followLink()  -- see PR https://github.com/codeborne/selenide/pull/799

## 4.14.0 (released 29.08.2018)
* #784 Enable BasicAuth through Selenide proxy server  -- see https://github.com/codeborne/selenide/pull/785
* #788 Add setting to enable/disable proxy server
* #789 Remove `?timestamp` parameter for IE

## 4.13.0 (released 20.08.2018)
* #771 Added method `$.lastChild()` for retrieving the last child element of a given element
* #601 Added collection checks with custom timeout  --  see PR #781
* #782 Added method `Selenide.download(url)`

* #773 Upgraded to Selenium 3.14.0. 
  SelenideElement does not implement the following deprecated interfaces
  anymore: FindsByLinkText, FindsById, FindsByName, FindsByTagName, FindsByClassName, FindsByCssSelector, FindsByXPath, HasIdentity

* #273 Method `switchTo().alert()` now throws `NoAlertPresentException` instead of `TimeoutException`  -- thanks to @tsukakei for PR #774
* #709 Fixed a misleading error message $.selectOptionByValue() reports  -- thanks to <NAME> for PR #780
* #734 Fixed incorrect filename of downloaded file  -- thanks to @rosolko for PR 768
* #783 Upgraded to webdrivermanager 2.2.5   -- see [https://github.com/bonigarcia/webdrivermanager/blob/master/changelog](changelog)
* #775 Upgrade to htmlunit 2.32.1
* #778 Fixed Selenide tests for FireFox

## 4.12.3 (released 17.07.2018)
* [#696](https://github.com/codeborne/selenide/issues/696) Reload collection on every method call
* [#758](https://github.com/codeborne/selenide/issues/758) Timeout for downloading files  --  thanks to <NAME> @YuriIvanov
* [#757](https://github.com/codeborne/selenide/pull/757) Add support for JUnit5  --  thanks to <NAME> @rosolko
* [#757](https://github.com/codeborne/selenide/pull/757) Upgrade Selenide own tests to JUnit5 and AssertJ  --  thanks to <NAME> @rosolko

## 4.12.2

* [#749](https://github.com/codeborne/selenide/pull/749) Added because method to CollectionCondition -- thanks to <NAME> @sidelnikovmike
* [#695](https://github.com/codeborne/selenide/issues/695) Do not open a browser if `Configuration.reopenBrowserOnFail` is `false` and user has not set webdriver manually 
* Upgrade selenium to 3.13.0 version
* Upgrade webdrivermanager to 2.2.3 version

## 4.12.1 (released 02.06.2018)

* fix support for alert/confirm dialogs in headless chrome/firefox

## 4.12.0 (released 30.05.2018)

* PR #735 Incorrect filename of downloaded file issued in #735 -- thanks to <NAME> @rosolko
* PR #736 Provide webdrivermanager on api level -- thanks to <NAME> @rosolko
* PR #737 Add threadId to log messages on closeWebDriver() -- thanks to <NAME> @AlexanderPoleschuk
* PR #741 Use selenium refresh for selenide refresh instead of reopen current url issued in #740 -- thanks to <NAME> @rosolko
* PR #744 Refactor dependencies and introduce sonarqube instead of coveralls issued in #702 -- thanks to <NAME> @rosolko
* PR #751 Fix isHeadless method isn't working for headless browser in #750 -- thanks to <NAME> @rosolko

## 4.11.4 (released 09.05.2018)

* PR #673 Redirect tons of firefox logs to /dev/null -- thanks to <NAME> @rosolko for PR #732
* upgrade to selenium 3.12.0
* upgrade to gson:2.8.4
* upgrade to guava:25.0

## 4.11.3 (released 07.05.2018)

* PR #730 Fix duplicating screenshots on error issue #729 -- thanks to <NAME> @BorisOsipov
* PR #727 Add cssValue condition issued in #628 -- thanks to <NAME> @rosolko
* PR #726 fixed browserBinary usage on remote server issue #725 -- thanks to <NAME> @vinogradoff
* PR #731 Add ability to get browser mob proxy instance -- thanks to <NAME> @rosolko

## 4.11.2 (released 25.04.2018)

* PR #718 introduce setValueChangeEvent option -- thanks to @MikeShysh
* PR #705 Make screenshot of SelenideElement/WebElement which is inside iframe -- thanks to @andrejska
* PR #646 Added method to check if page is scrolled to the bottom -- thanks to @pavelpp
* PR #715 Added static analysis for avoiding start import for main package, fixing existing violations -- thanks to @andrejska
* PR #714 dd series of unit tests for commands, collections, conditions, impl package classes -- thanks to @azakordonets
* Upgrade to webdrivermanager:2.2.1
* Upgrade to htmlunit:2.30

## 4.11.1 (released 03.04.2018)

* See #711 Fix problem with hanging Chrome on Windows -- thanks to <NAME> @rosolko for PR 711
 (Chrome processes are still alive after calling `close` method)

## 4.11.0 (released 02.04.2018)

* upgrade to selenium-java:3.11.0
* deprecated followLink method - just use click instead.
* See #688 support downloading files with cyrillic name
* See #692 added support for `-Dchromeoptions.prefs=profile.block_third_party_cookies=false,profile.avatar_index=26` -- thanks to <NAME> aka @sirdir
* See #686 fix occasional NPE's in SelenideReport -- thanks to @dkorobtsov
* See #478 added method `$$.shouldHave(textsInAnyOrder("Push", "Image", "Email"))` -- thanks @hyunil-shin for PR #589
* See #687 Add ability to set browser window position -- thanks to <NAME> @rosolko for PR 687
* See #655 fix listeners soft asserts return null screenshot for failed test -- thanks to <NAME> @BorisOsipov for PR #659
* make it possible to add customer request/response interceptors to selenide proxy server

## 4.10.01 (released 19.01.2018)

* See #672 fixed lazy evaluation of `$$.get(index)`, `$$.first(n)`, `$$.last(n)`, `$$.last()`
* See #678 upgrade to webdrivermanager:2.1.0

## 4.10 (released 12.01.2018)

* See #641 Increased Elements Collection performance -- thanks to <NAME> @CaBocuk for PR 653
* See #639 Add "User-Agent" header when downloading file -- thanks to <NAME> @rosolko
* See #556 add possibility to set custom capabilities for custom Chrome options or Firefox profies --Thanks to @SergeyPirogov for PR 556 and @BorisOsipov for PR 664
* See #660 add possibility to create headless RemoteDriver -- thanks to @BorisOsipov for PR 661
* See #597 support non-breakable spaces in `byText` and `withText`
* See #649 Provide scrollIntoView to workaround problems in Firefox
* upgrade to htmlunit 2.29 & guava:23.6-jre
* upgrade to phantomjsdriver 1.4.4

## 4.9.1 (released 31.12.2017)

* fixed bug where disabled input fields were not handled properly by setValue()
* fixed behaviour of setFastValue, which caused blur event to be ignored
* See #654 fixed ClassCastException in WebDriverFactory#logBrowserVersion()

## 4.9 (released 20.12.2017)

* See #638 upgrade to selenium-java:3.8.1 -- thanks to <NAME>
* See #621 Make marionette the default firefox driver implementation -- thanks to ostap-oleksyn
* See #617 Fix initialization of SelenideElements without @FindBy annotation declared inside ElementsContainer -- thanks to <NAME> @CaBocuk
* See #623 Add methods `$$(“.item”).first(3)` and `$$(“.item”).last(3)` -- thanks to ostap-oleksyn
* See #627 Add ability to set browser binary path using configuration parameter -- thanks to ostap-oleksyn
* See #634 fix method prompt() in HtmlUnit -- thanks to <NAME>
* upgrade to guava:23.5-jre
* upgrade to httpcore:4.4.8
* upgrade to htmlunit-driver:2.28.2
* upgrade to webdrivermanager:2.0.1

## 4.8 (released 08.10.2017)

* updated to selenium 3.6 -- thanks to ostap-oleksyn
* upgraded to org.apache.httpcomponents:httpcore:4.4.7
* See #614 fix issue with soft asserts -- thanks to ostap-oleksyn

## 4.7.1 (released 05.10.2017)

* declare compile-time dependency `guava 23.0` instead of `guava 21.0` (for those whose Maven downloads the older guava version)

## 4.7 (released 29.09.2017)

* upgrade to selenium-java 3.5.3
* upgrade to browsermob-core 2.1.5 (and downgrade to littleproxy 1.1.0-beta-bmp-17)
* See #610 integration with DriverManager
* See #591 Added method prompt() -- Thanks to <NAME> aka @simple-elf
* See #210 Show path to page html in addition to screenshot -- Thanks @hyunil-shin for PR #590
* See #570 Fixed concurrency issue with screenshots during parallel runs -- Thanks <NAME> for PR #595
* upgrade to htmlunit 2.27 -- Thanks to @alexander-kotlyar

## 4.6 (released 31.08.2017)

* See #529 Cannot find capabilities with browserName=ie when grid hub url specified in -Dremote -- thanks to @BorisOsipov
* See #551 Method `$.setValue()` should not fail if it could not trigger change event (for whatever reason).
* See #528 - Wrong ElementNotFound exception message -- thanks to @BorisOsipov
* See #573 - Method `$.shouldHave(exactValue(" foo  "))` does NOT trim leading/trailing spaces anymore - thanks to @mseele for this PR

## 4.5.1 (released 27.06.2017)

* See #484 added method $.getSearchCriteria()
* See #484 fixed performance issue: Selenide tried to log collections' parent WebElement without waiting for it

## 4.5 (released 26.06.2017)

* Performance improvement of method `$.setValue()` -- thanks to <NAME>
* See #549 Selenide waits too much for collections
* Add methods $().$x and $().$$x -- thanks to <NAME>
* Fix support for Opera driver -- thanks to <NAME>
* Remove spam from logs: `INFO: Close proxy server: 24 -> null` -- thanks to <NAME>ordonets
* upgrade to org.littleshoot:littleproxy:1.1.2
* upgrade to phantomjsdriver 1.4.3
* added many unit tests for Selenide itself -- thanks to Andrew Zakordonets<commit_msg>`remote` -> `selenide.remote` in FAQ<commit_after># Changelog

## 5.0.2
* Upgrade to selenium-java 3.141.59
* #872 fix importing Selenide Gradle project to IDEA  --  thanks to jkromski-fh for PR #872

## 5.0.1 (released 07.11.2018)
* Upgrade to selenium-java 3.141.5
* #855 Lock chromedriver version for chrome 70
* #747 fixed IndexOutOfBounds if CollectionElement does not exist  --  thanks to <NAME> for PR #837 
* #844 fixed ClassCastException in `$$.toArray()`  --  thanks to BorisOsipov for PR #847 
* #840 generate random file name if failed to extract it from URL or http header

## 5.0.0 (released 10.10.2018)
* #354 Create non-static alternative for Configuration (Config) and Selenide (SelenideDriver). Now you can run 2 browsers in a test.
* Move inner classes AssertionMode, SelectorMode, FileDownloadMode from Configuration to package `com.codeborne.selenide`
* #809 $ and $$ should throw a clear error message if browser is not opened yet (or has already been closed)
* #809 when waiting for a condition, catch explicitly only needed exceptions instead of `Throwable` which is too generic. It does not make sense to wait for 4 seconds in case of IllegalStateException, FileNotFoundException etc.
* throw ElementIsNotClickableException instead of ElementNotFoundException if element is covered by other element
* #809 Method $ will NOT automatically open a browser (if you forgot to call `open(url)` before)
* Selenide now throws an exception if `Configuration.fileDownload == PROXY`, but `Configuration.proxyEnabled == false`. You will need to set `Configuration.proxyEnabled` to `true`.  
* #811 Make Chrome the default browser   --  thanks to @rosolko for PR #812 
* #810 do NOT maximize browser by default   --  thanks to @rosolko for PR #812 
* #810 set browser size to 1366x768 by default   --  thanks to @rosolko for PR #812 
* #806 Remove deprecated APIs   --  thanks to @rosolko for PR #812 
* #817 fix "FirefoxDriverFactory overwrites Firefox profile provided by Configuration"  --  thanks @BorisOsipov for PR #821
* bugfix: method Selenide.download() should not fail if there is no opened browser yet
* #825 Upgrade to WebDriverManager 3.0.0 (again)
* #825 Add workaround for WebDriverManager issue when it calls github too often and gets 403 error
* #832 Added support for screenshots outside of "user.dir" in CI server

Technical changes (probably should not affect end users):
* Move junit5-api dependency to compile level
* upgrade to htmlunitdriver 2.33.0
* Move constants IE, FIREFOX etc from class `WebDriverRunner` to its parent class `Browsers`
* Move classes `Selenide`, `WebDriverRunner`, `Configuration` to subfolder `statics`. 
* Move default settings logic from `Configuration` to `SelenideConfig`. 

## 4.14.2 (released 22.09.2018)
* Upgrade to htmlunit 2.33
* Upgrade to Sizzle 2.3.4-pre
* #804 avoid throwing NPE when `Configuration.reportFolder` is null

## 4.14.1 (released 06.09.2018)
* Upgrade to WebDriverManager 3.0.0
* #794 Removed unused setting `Configuration.dismissModalDialogs`  -- see PR https://github.com/codeborne/selenide/pull/795
* Removed unused setting Configuration.openBrowserTimeoutMs
* #798 Remove deprecated method $.followLink()  -- see PR https://github.com/codeborne/selenide/pull/799

## 4.14.0 (released 29.08.2018)
* #784 Enable BasicAuth through Selenide proxy server  -- see https://github.com/codeborne/selenide/pull/785
* #788 Add setting to enable/disable proxy server
* #789 Remove `?timestamp` parameter for IE

## 4.13.0 (released 20.08.2018)
* #771 Added method `$.lastChild()` for retrieving the last child element of a given element
* #601 Added collection checks with custom timeout  --  see PR #781
* #782 Added method `Selenide.download(url)`

* #773 Upgraded to Selenium 3.14.0. 
  SelenideElement does not implement the following deprecated interfaces
  anymore: FindsByLinkText, FindsById, FindsByName, FindsByTagName, FindsByClassName, FindsByCssSelector, FindsByXPath, HasIdentity

* #273 Method `switchTo().alert()` now throws `NoAlertPresentException` instead of `TimeoutException`  -- thanks to @tsukakei for PR #774
* #709 Fixed a misleading error message $.selectOptionByValue() reports  -- thanks to <NAME> for PR #780
* #734 Fixed incorrect filename of downloaded file  -- thanks to @rosolko for PR 768
* #783 Upgraded to webdrivermanager 2.2.5   -- see [https://github.com/bonigarcia/webdrivermanager/blob/master/changelog](changelog)
* #775 Upgrade to htmlunit 2.32.1
* #778 Fixed Selenide tests for FireFox

## 4.12.3 (released 17.07.2018)
* [#696](https://github.com/codeborne/selenide/issues/696) Reload collection on every method call
* [#758](https://github.com/codeborne/selenide/issues/758) Timeout for downloading files  --  thanks to <NAME> @YuriIvanov
* [#757](https://github.com/codeborne/selenide/pull/757) Add support for JUnit5  --  thanks to <NAME> @rosolko
* [#757](https://github.com/codeborne/selenide/pull/757) Upgrade Selenide own tests to JUnit5 and AssertJ  --  thanks to <NAME> @rosolko

## 4.12.2

* [#749](https://github.com/codeborne/selenide/pull/749) Added because method to CollectionCondition -- thanks to <NAME> @sidelnikovmike
* [#695](https://github.com/codeborne/selenide/issues/695) Do not open a browser if `Configuration.reopenBrowserOnFail` is `false` and user has not set webdriver manually 
* Upgrade selenium to 3.13.0 version
* Upgrade webdrivermanager to 2.2.3 version

## 4.12.1 (released 02.06.2018)

* fix support for alert/confirm dialogs in headless chrome/firefox

## 4.12.0 (released 30.05.2018)

* PR #735 Incorrect filename of downloaded file issued in #735 -- thanks to <NAME> @rosolko
* PR #736 Provide webdrivermanager on api level -- thanks to <NAME> @rosolko
* PR #737 Add threadId to log messages on closeWebDriver() -- thanks to <NAME> @AlexanderPoleschuk
* PR #741 Use selenium refresh for selenide refresh instead of reopen current url issued in #740 -- thanks to <NAME> @rosolko
* PR #744 Refactor dependencies and introduce sonarqube instead of coveralls issued in #702 -- thanks to <NAME> @rosolko
* PR #751 Fix isHeadless method isn't working for headless browser in #750 -- thanks to <NAME> @rosolko

## 4.11.4 (released 09.05.2018)

* PR #673 Redirect tons of firefox logs to /dev/null -- thanks to <NAME> @rosolko for PR #732
* upgrade to selenium 3.12.0
* upgrade to gson:2.8.4
* upgrade to guava:25.0

## 4.11.3 (released 07.05.2018)

* PR #730 Fix duplicating screenshots on error issue #729 -- thanks to <NAME> @BorisOsipov
* PR #727 Add cssValue condition issued in #628 -- thanks to <NAME> @rosolko
* PR #726 fixed browserBinary usage on remote server issue #725 -- thanks to <NAME> @vinogradoff
* PR #731 Add ability to get browser mob proxy instance -- thanks to <NAME> @rosolko

## 4.11.2 (released 25.04.2018)

* PR #718 introduce setValueChangeEvent option -- thanks to @MikeShysh
* PR #705 Make screenshot of SelenideElement/WebElement which is inside iframe -- thanks to @andrejska
* PR #646 Added method to check if page is scrolled to the bottom -- thanks to @pavelpp
* PR #715 Added static analysis for avoiding start import for main package, fixing existing violations -- thanks to @andrejska
* PR #714 dd series of unit tests for commands, collections, conditions, impl package classes -- thanks to @azakordonets
* Upgrade to webdrivermanager:2.2.1
* Upgrade to htmlunit:2.30

## 4.11.1 (released 03.04.2018)

* See #711 Fix problem with hanging Chrome on Windows -- thanks to <NAME> @rosolko for PR 711
 (Chrome processes are still alive after calling `close` method)

## 4.11.0 (released 02.04.2018)

* upgrade to selenium-java:3.11.0
* deprecated followLink method - just use click instead.
* See #688 support downloading files with cyrillic name
* See #692 added support for `-Dchromeoptions.prefs=profile.block_third_party_cookies=false,profile.avatar_index=26` -- thanks to <NAME> aka @sirdir
* See #686 fix occasional NPE's in SelenideReport -- thanks to @dkorobtsov
* See #478 added method `$$.shouldHave(textsInAnyOrder("Push", "Image", "Email"))` -- thanks @hyunil-shin for PR #589
* See #687 Add ability to set browser window position -- thanks to <NAME> @rosolko for PR 687
* See #655 fix listeners soft asserts return null screenshot for failed test -- thanks to <NAME> @BorisOsipov for PR #659
* make it possible to add customer request/response interceptors to selenide proxy server

## 4.10.01 (released 19.01.2018)

* See #672 fixed lazy evaluation of `$$.get(index)`, `$$.first(n)`, `$$.last(n)`, `$$.last()`
* See #678 upgrade to webdrivermanager:2.1.0

## 4.10 (released 12.01.2018)

* See #641 Increased Elements Collection performance -- thanks to <NAME> @CaBocuk for PR 653
* See #639 Add "User-Agent" header when downloading file -- thanks to <NAME> @rosolko
* See #556 add possibility to set custom capabilities for custom Chrome options or Firefox profies --Thanks to @SergeyPirogov for PR 556 and @BorisOsipov for PR 664
* See #660 add possibility to create headless RemoteDriver -- thanks to @BorisOsipov for PR 661
* See #597 support non-breakable spaces in `byText` and `withText`
* See #649 Provide scrollIntoView to workaround problems in Firefox
* upgrade to htmlunit 2.29 & guava:23.6-jre
* upgrade to phantomjsdriver 1.4.4

## 4.9.1 (released 31.12.2017)

* fixed bug where disabled input fields were not handled properly by setValue()
* fixed behaviour of setFastValue, which caused blur event to be ignored
* See #654 fixed ClassCastException in WebDriverFactory#logBrowserVersion()

## 4.9 (released 20.12.2017)

* See #638 upgrade to selenium-java:3.8.1 -- thanks to <NAME>
* See #621 Make marionette the default firefox driver implementation -- thanks to ostap-oleksyn
* See #617 Fix initialization of SelenideElements without @FindBy annotation declared inside ElementsContainer -- thanks to <NAME> @CaBocuk
* See #623 Add methods `$$(“.item”).first(3)` and `$$(“.item”).last(3)` -- thanks to ostap-oleksyn
* See #627 Add ability to set browser binary path using configuration parameter -- thanks to ostap-oleksyn
* See #634 fix method prompt() in HtmlUnit -- thanks to <NAME>
* upgrade to guava:23.5-jre
* upgrade to httpcore:4.4.8
* upgrade to htmlunit-driver:2.28.2
* upgrade to webdrivermanager:2.0.1

## 4.8 (released 08.10.2017)

* updated to selenium 3.6 -- thanks to ostap-oleksyn
* upgraded to org.apache.httpcomponents:httpcore:4.4.7
* See #614 fix issue with soft asserts -- thanks to ostap-oleksyn

## 4.7.1 (released 05.10.2017)

* declare compile-time dependency `guava 23.0` instead of `guava 21.0` (for those whose Maven downloads the older guava version)

## 4.7 (released 29.09.2017)

* upgrade to selenium-java 3.5.3
* upgrade to browsermob-core 2.1.5 (and downgrade to littleproxy 1.1.0-beta-bmp-17)
* See #610 integration with DriverManager
* See #591 Added method prompt() -- Thanks to <NAME> aka @simple-elf
* See #210 Show path to page html in addition to screenshot -- Thanks @hyunil-shin for PR #590
* See #570 Fixed concurrency issue with screenshots during parallel runs -- Thanks <NAME> for PR #595
* upgrade to htmlunit 2.27 -- Thanks to @alexander-kotlyar

## 4.6 (released 31.08.2017)

* See #529 Cannot find capabilities with browserName=ie when grid hub url specified in -Dselenide.remote -- thanks to @BorisOsipov
* See #551 Method `$.setValue()` should not fail if it could not trigger change event (for whatever reason).
* See #528 - Wrong ElementNotFound exception message -- thanks to @BorisOsipov
* See #573 - Method `$.shouldHave(exactValue(" foo  "))` does NOT trim leading/trailing spaces anymore - thanks to @mseele for this PR

## 4.5.1 (released 27.06.2017)

* See #484 added method $.getSearchCriteria()
* See #484 fixed performance issue: Selenide tried to log collections' parent WebElement without waiting for it

## 4.5 (released 26.06.2017)

* Performance improvement of method `$.setValue()` -- thanks to <NAME>
* See #549 Selenide waits too much for collections
* Add methods $().$x and $().$$x -- thanks to <NAME>
* Fix support for Opera driver -- thanks to <NAME>
* Remove spam from logs: `INFO: Close proxy server: 24 -> null` -- thanks to <NAME>
* upgrade to org.littleshoot:littleproxy:1.1.2
* upgrade to phantomjsdriver 1.4.3
* added many unit tests for Selenide itself -- thanks to <NAME>
{'fraction_non_alphanumeric': 0.10089649551752242, 'fraction_numerical': 0.0660961695191524, 'mean_word_length': 4.2992874109263655, 'pattern_counts': {'":': 0, '<': 68, '<?xml version=': 0, '>': 71, 'https://': 20, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 20, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6663419', 'n_tokens_mistral': 8626, 'n_tokens_neox': 7351, 'n_words': 3049}