- #997 Avoid logging redundant
findElements
calls when executing$.findAll()
-- see PR #1193 - #967 improve error messages for collections
- #1191 $.getWrappedElement waits again for the element -- see PR #1203
- upgraded to BrowserUpProxy 2.1.1
- #943 upload multiple files without JS tricks (just using newline character) -- see PR #1188
- #1172 don't close browser if
holdBrowserOpen=true
-- see PR #1176 - #1179 fix @Nonnull annotation for methods getText(), innerText(), innerHtml(), getSelectedText() -- see PR #1181
- Enable running Selenide without "selenium-ie-driver.jar" "selenium-opera-driver.jar" etc.
- #1170 fixed Concurrent modification exception in WebDriverFactory -- see PR #1171
- #1169 fix merging capabilities of types Array and List -- see PR #1174
- #1133 disable annoying "save password?" dialog -- see PR #1134
- #676, #1097 Allow passing of driver-specific options from a configuration -- see PR #1155.
- Thanks to Boris Osipov for PR #1103
- Thanks to @SeleniumTestAB for PR #1095
- #1109 Enable "mobile emulation" mode in grid -- see PR #1163
- #1139 Cannot set Firefox preference via system properties -- see PR #1165
- #1093 Enable "ACCEPT_INSECURE_CERTS" setting for chromium-based Edge versions -- see PR #1167
- #1149 Upgrade to WebDriverManager 4.0.0
- upgrade to browserup-proxy-core:2.1.0
- #1138 fix 'emptyMethod' folder name -- thanks to Denis Gaievskyi for PR #1138
- #1140 Nullity annotations for the most used APIs -- thanks to Yuriy Artamonov for PR #1140 and #1144
- refactoring: Extract duplicated code -- thanks to Yuriy Artamonov for PR #1143
- Add missing findAll with CSS selector to SelenideDriver -- thanks to Yuriy Artamonov for PR #1145
- #1130 fix "because" condition for unexisting elements
- #1114 strictly require slf4j only when using @TextReport rule/extension/listener
Breaking changes:
- #368 $("#missingElement").shouldNotHave(text("whatever")) now throws an exception -- See PR #1116
- #1114 throw a clear error message if SLF4J is not properly configured -- see PR #1115
- #1015 $.getWrappedElement() does not wait for timeout if element doesn't exist -- see PR #1124
Features & bugfixes:
- #996 Add MatchAttributeWithValue condition -- thanks to Dmytro Stekanov for PR #1100
- #1029 Add opportunity to get screenshots for the current thread -- thanks to Dmytro Stekanov for PR #1125
- Add CheckReturnValue annotation for methods that only return value -- thanks to Yuriy Artamonov for PR #1106
- Add missing byTagName to Selectors to make it consistent with By -- thanks to Yuriy Artamonov for PR #1104
- #1072 Normalize reports URL with spaces -- thanks to Dmytro Stekanov for PR #1098
- #1119 disable annoying popup about extensions in Chrome -- see PR #1120
- make selectorMode and assertionMode configurable via system properties -- see commit 231597eb6229e
See https://github.com/selenide/selenide/milestone/94?closed=1
- #1014 Add support for Shadow DOM -- thanks to Dmytro Stekanov for #1090
- #1021 Selenide does not fetch BrowserUpProxy dependency by default -- see PR #1094
- #1091 Migrated Guava API to the equivalent Java API -- thanks to Wladimir Schmidt for PR #1091
- #1032 Add quotes around selectors in Selenide logger -- thanks to Dmytro Stekanov for #1092
- #1069 add condition
$.shouldBe(image)
-- thanks to Dmytro Stekanov for #1086 - #1060 fix finding element by an attribute which contains quotes -- thanks to Denys Lystopadskyy for PR #1062
- #1065 add method $.download(FileFilter) -- see PR #1080
- #1061 IE 3.150 doesn't start -- thanks to Boris Osipov for PR #1075
- #1039 Microsoft Edge doesn't start -- thanks to Boris Osipov for PR #1084
- #662 Added Condition with Predicate parameter as alternative to check element conditions -- thanks to Dmytro Stekanov for #1059
- #845 Added methods
$.sibling() and $ .preceding() -- thanks to Dmytro Stekanov for #1064 - #994 Added method to check content of ":before" and other pseudo elements -- thanks to Denys Shynkarenko for PR #1045
- #1071 Fixing issue when SoftAssertionsExtension for JUnit5 sometimes marked passed tests as failed
- $.click() now clicks the CENTER of element (also for Configuration.clickViaJS=true)
- #1025 Add setting
Configuration.downloadsFolder
-- thanks to Dmytro Stekanov for PR #1041 - #1057 Download files to
Configuration.downloadsFolder
instead of ~/Downloads - #399 Add method for switching to a window with custom timeout -- thanks to Dmytro Stekanov for PR #1054
- #990 show "readonly" attribute of element -- thanks to Dmytro Stekanov for PR #1042
- #991 fix IndexOutOfBoundsException when searching from first/last element of empty collection -- thanks to Dmytro Stekanov for PR #1043
- #814 #880 fix Screenshots -- thanks to Petro Ovcharenko for PR #1052
- #1049 use env variable BUILD_URL (no need to add BUILD_URL to system properties anymore) -- thanks to GongYi for PR #1049
- #1049 fix path to screenshots in Jenkins for multi-module maven projects -- thanks to GongYi for PR #1049
- upgrade to WebDriverManager 3.8.1, see https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-3.8.1...master
- #1030 Add method Selenide.executeAsyncScript() -- thanks to Thierry Ygé @tyge68 for PR selenide#1031
- fix #1034 Selenide cannot download file if response doesn't contain "Content-Disposition" header, see PR selenide#1035
- fix method WebDriverRunner.using(): don't close the webdriver itself, see https://github.com/selenide/selenide/commit/4d1b19972d
- upgrade to WebDriverManager 3.8.0, see https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-3.8.0...master
- #1019 Migrate from BrowserMob to BrowserUp proxy -- thanks to Aliaksandr Rasolka for PR #1020
- #1008 add support for system property "chromeoptions.mobileEmulation" -- see PR #1011
- #1016 deprecate method
Selenide.close()
-- see PR #1017
- #923 Migrate from JUL to SLF4J -- thanks to Gleb Schukin @gschukin for PR #926
- Remove HtmlUnit dependency -- thanks to Aliaksandr Rasolka for PR #1003
- Remove PhantomJS dependency -- thanks to Aliaksandr Rasolka for PR #998
- Remove built-in support for Safari browser (but you can still use Safari, see https://github.com/selenide/selenide/wiki/Safari)
- Remove built-in support for jbrowser driver
- #1000 make
$.execute(command)
generic: it now can return any value, or even be Void -- see PR #1001 - #999 make
holdBrowserOpen
setting work again -- see PR #1005 - #907 take a screenshot in case of
DialogTextMismatch
error -- thanks to Nick Holloway @nwholloway for PR #986 - refactor ScreenShotLaboratory -- thanks to @SeleniumTestAB for PRs #1004 and #1006
- add "selenide.remote" to exception info (in addition to "selenide.url" and "selenide.baseUrl") -- see commit ba4f0544448de
- bugfix: close webdriver in the end of all tests
- #862 #902 #954 #922 fix "IllegalStateException WebDriver has been closed" (with a heavy heart!) -- see PR #989
- #896 Do close the browser in SelenideDriver.close() -- see PR #989
- #993 shorten the error message as it was before Selenide 5.3.1
- #976 add method "using" to easy switch between webdrivers
- #963 fail fast if xpath for searching inside a web element starts with / -- see PR #975
- upgrade to webdrivermanager:3.7.1
- exclude old Guava dependency coming from net.lightbody.bmp:browsermob-core:2.1.5
- #234 add a screenshot to error message in Maven too -- see PR #972
- support URLs with newlines
- #469 improve error message of OR condition
- #970 improve error message of
shouldHave(attribute("href", ..."))
- upgrade to webdrivermanager:3.6.2
- add custom command executor
- #961 Fix spam in logs "Failed to get attributes via JS..."
- #930 Make method Condition.applyNull() overridable
- #928 fix paradoxical "IllegalStateException: You need to call open(url) first" from open method
- One more fix for $.toString() in Appium (iOS)
- #496 Another fix for $.toString() in Appium
- #496 Fix $.toString() in Appium
- add Selenide.open() without string parameter -- thanks to @yaroslav-orel for PR #956
- Append condition explanation to $$.toString() -- thanks to Roman Kliuha for PR #904
- upgrade to WebDriverManager 3.6.1
- fixed ScreenShooterExtension for JUnit5: now it takes screenshots for ALL errors (except UIAssertionError)
- #454 $$.shouldHave(texts()) checks size of collection -- thanks to A.Smashentsev for PR #944
- Fix proxy server on localhost for Chrome72+ and Firefox 67+ -- see selenide#950
- Now method $.click(offsetX, offsetY) calculates coordinates from the CENTER of element (not upper left corner)
- upgrade to WebDriverManager 3.4.0
- upgrade to htmlunit 2.34.1
- upgrade to htmlunitDriver 2.34.0
- #915 Add support for
open("about:blank")
- #927 Log event listener improvements -- thanks to @pavelpp for PR
- #912 (refactoring) extract Conditions to separate classes
- upgrade to WebDriverManager 3.3.0
- add WDM support for Chrome 73 and 74
- #883 Enhanced chromeoptions arguments and preferences
- #865 Add aliases for $ and $$ for Kotlin -- thanks to @jkromski for PR #870
- #766 Add method $.shouldHave(selectedText("oo ba")); -- thanks to @symonk for PR #876
- #838 remove chrome maximization black magic -- see PR #901
- Upgrade to selenium-java 3.141.59
- #872 fix importing Selenide Gradle project to IDEA -- thanks to jkromski-fh for PR #872
- #201 can click elements with zero opacity -- thanks to @vinogradoff for PR #874
- #878 fix NPE when webdriver is created by user, and therefore Selenide proxy was not started -- see PR #888
- #867 user can switch between custom webdrivers many times -- see PR #890
- #892 generate unique location for every downloaded file -- see PR #893
- Upgrade to selenium-java 3.141.5
- #855 Lock chromedriver version for chrome 70
- #747 fixed IndexOutOfBounds if CollectionElement does not exist -- thanks to Denys Shynkarenko 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
- #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
, butConfiguration.proxyEnabled == false
. You will need to setConfiguration.proxyEnabled
totrue
. - #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 a 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 classBrowsers
- Move classes
Selenide
,WebDriverRunner
,Configuration
to subfolderstatics
. - Move default settings logic from
Configuration
toSelenideConfig
.
- Upgrade to htmlunit 2.33
- Upgrade to Sizzle 2.3.4-pre
- #804 avoid throwing NPE when
Configuration.reportsFolder
is null
- Upgrade to WebDriverManager 3.0.0
- #794 Removed unused setting
Configuration.dismissModalDialogs
-- see PR selenide#795 - Removed unused setting Configuration.openBrowserTimeoutMs
- #798 Remove deprecated method $.followLink() -- see PR selenide#799
- #784 Enable BasicAuth through Selenide proxy server -- see selenide#785
- #788 Add setting to enable/disable proxy server
- #789 Remove
?timestamp
parameter for IE
-
#771 Added method
$.lastChild()
for retrieving the last child element of a given element -
#601 Added collection checks with a 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 throwsNoAlertPresentException
instead ofTimeoutException
-- thanks to @tsukakei for PR #774 -
#709 Fixed a misleading error message $.selectOptionByValue() reports -- thanks to Keita Tsukamoto for PR #780
-
#734 Fixed incorrect filename of downloaded file -- thanks to @rosolko for PR 768
-
#783 Upgraded to webdrivermanager 2.2.5 -- see changelog
-
#775 Upgrade to htmlunit 2.32.1
-
#778 Fixed Selenide tests for FireFox
- #696 Reload collection on every method call
- #758 Timeout for downloading files -- thanks to Yuri Ivanov @YuriIvanov
- #757 Add support for JUnit5 -- thanks to Aliaksandr Rasolka @rosolko
- #757 Upgrade Selenide own tests to JUnit5 and AssertJ -- thanks to Aliaksandr Rasolka @rosolko
- #749 Added because method to CollectionCondition -- thanks to Mikhail Sidelnikov @sidelnikovmike
- #695 Do not open a browser if
Configuration.reopenBrowserOnFail
isfalse
and user has not set webdriver manually - Upgrade selenium to 3.13.0 version
- Upgrade webdrivermanager to 2.2.3 version
- fix support for alert/confirm dialogs in headless chrome/firefox
- PR #735 Incorrect filename of downloaded file issued in #735 -- thanks to Aliaksandr Rasolka @rosolko
- PR #736 Provide webdrivermanager on api level -- thanks to Aliaksandr Rasolka @rosolko
- PR #737 Add threadId to log messages on closeWebDriver() -- thanks to Alexander Poleschuk @AlexanderPoleschuk
- PR #741 Use selenium refresh for selenide refresh instead of reopen current url issued in #740 -- thanks to Aliaksandr Rasolka @rosolko
- PR #744 Refactor dependencies and introduce sonarqube instead of coveralls issued in #702 -- thanks to Aliaksandr Rasolka @rosolko
- PR #751 Fix isHeadless method isn't working for headless browser in #750 -- thanks to Aliaksandr Rasolka @rosolko
- PR #673 Redirect tons of firefox logs to /dev/null -- thanks to Aliaksandr Rasolka @rosolko for PR #732
- upgrade to selenium 3.12.0
- upgrade to gson:2.8.4
- upgrade to guava:25.0
- PR #730 Fix duplicating screenshots on error issue #729 -- thanks to Boris Osipov @BorisOsipov
- PR #727 Add cssValue condition issued in #628 -- thanks to Aliaksandr Rasolka @rosolko
- PR #726 fixed browserBinary usage on remote server issue #725 -- thanks to Alexei Vinogradov @vinogradoff
- PR #731 Add ability to get browser mob proxy instance -- thanks to Aliaksandr Rasolka @rosolko
- 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
- See #711 Fix problem with hanging Chrome on Windows -- thanks to Aliaksandr Rasolka @rosolko for PR 711
(Chrome processes are still alive after calling
close
method)
- 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 Tymur Kubai 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 Aliaksandr Rasolka @rosolko for PR 687
- See #655 fix listeners soft asserts return null screenshot for failed test -- thanks to Boris Osipov @BorisOsipov for PR #659
- make it possible to add customer request/response interceptors to selenide proxy server
- See #672 fixed lazy evaluation of
$$.get(index)
,$$.first(n)
,$$.last(n)
,$$.last()
- See #678 upgrade to webdrivermanager:2.1.0
- See #641 Increased Elements Collection performance -- thanks to Artem Savosik @CaBocuk for PR 653
- See #639 Add "User-Agent" header when downloading file -- thanks to Aleksandr Rasolka @rosolko
- See #556 add possibility to set custom capabilities for custom Chrome options or Firefox profiles --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
andwithText
- See #649 Provide scrollIntoView to workaround problems in Firefox
- upgrade to htmlunit 2.29 & guava:23.6-jre
- upgrade to phantomjsdriver 1.4.4
- fixed a 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()
- See #638 upgrade to selenium-java:3.8.1 -- thanks to Aleksandr Rasolka
- 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 Artem Savosik @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 Anton Aftakhov
- 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
- 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
- declare compile-time dependency
guava 23.0
instead ofguava 21.0
(for those whose Maven downloads the older guava version)
- 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 Anton Aftakhov 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 Jane Riabchenko for PR #595
- upgrade to htmlunit 2.27 -- Thanks to @alexander-kotlyar
- 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
- See #484 added method $.getSearchCriteria()
- See #484 fixed performance issue: Selenide tried to log collections' parent WebElement without waiting for it
- Performance improvement of method
$.setValue()
-- thanks to Alexander Popov - See #549 Selenide waits too much for collections
- Add methods $().$x and
$().$ $x -- thanks to Oleksii Cherevatyi - Fix support for Opera driver -- thanks to Roman Marinsky
- Remove spam from logs:
INFO: Close proxy server: 24 -> null
-- thanks to Andrew Zakordonets - 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
- upgrade to selenium-java 3.4.0
- See #510 fix closing windows in
$.download()
- Add a workaround for invalid resolving of
selenium-api
dependency by Maven
- See #479 Added methods
clearBrowserCookies()
andclearBrowserLocalStorage()
- See #497 Added methods
$x("//div")
,$$x("//div")
for finding elements by xpath - See #457 fix performance degradation in parallel tests
- See #494 fix $.toString() on Android driver
- upgrade to selenium-java 3.3.1
- upgrade to phantomjsdriver 1.4.1
- Upgrade to htmlunit 2.24
- System properties names aligned with Configuration fields. e.g. Configuration.someProp always has selenide.someProp equivalent (old names still supported for backward compatibility)
- JavaDocs are fixed - now it is more clear that
$,$ $,find,etc. methods don't start the search - deprecated Selenide.selectRadio (for SelenideElement.selectRadio)
- upgrade to browsermob-core:2.1.4
- upgrade to org.apache.httpcomponents:httpcore:4.4.6
- upgrade to guava:21.0
- fixed problems with int and boolean capability values, now converting automatically
- added support for FirefoxProfile over commandline (-Dfirefoxprofile.=,
- added support for ChromeOptions (args only) over commandline (-Dchromeoptions.args=,...)
- See #426 fix error reporting in method
$$().find()
- see PR #426 - See #443 SelenidePageFactory added to support page object initialization without @FindBy annotation - see PR #443
- v#431 browser=firefox uses legacy driver (works for <=47), browser=marionette - gecko driver (any Firefox)
- Added experimental support of Edge (browser=edge, set webdriver.edge.driver to path to MicrosoftWebDriver.exe)
- See #433 bypass spawning local browser
- See #391 add method $.selectOptionContainingText()
- See #378 Cut off WebElement screenshot size when it doesn't fit in full page screenshot
- See #379 added support for transferring any capability via System Property (-Dcapabilities.xxx=yyy)
- support for cloud services like BrowserStack, SauceLabs etc through supporting of arbitrary capabilities.
- See #428 Improve byAttribute method for search via css selectors
- See #419 #425 Added methods
texts(List)
andexactTexts(List)
toCollectionCondition
- Improve support for gecko (marionette) driver
- Upgrade to selenium-java 3.0.1
- Upgrade to htmlunit-driver 2.23.2
- Upgrade to gson 2.8.0
- Upgrade to guava 20.0
- Explicitly declare dependency on newest httpcore:4.4.5 to avoid using old version (that Maven inherits from allure plugin or something like that)
- See #388 Upgrade to selenium-java 3.0.0
- See #388 Upgrade to java 8
- log all intercepted http responses if proxy server failed to download file
- See #415 Selenide calls SeleniumException.getMessage() multiple times
- See #416 Added condition
checked
for verifying checkboxes
- See #402 Disable built-in proxy server by default
- See #400 Support multiple select
- See #408 TextReport can be printed only for failed tests
- See #398 Support "Content-Disposition" header with encoding
- See #401 Selenide swallows exception in some cases
- See #379 Turn on temporary disabled test for firefox (thanks to @BorisOsipov)
- See #407 Method
open
cannot open url in upper case
- See #393 Selenide should NOT add proxy server to browser if
Configuration.fileDownload = HTTPGET
- See #386 Selenide should download files "old way" if tests uses its own "custom" webdriver
- See #387 User can choose how to download files via Configuration.fileDownload
- See #383 Selenide proxy server now allows requests and responses bigger than 2MB (but writes warning)
- See #384 fixed SoftAssert listener for TestNG: it only applies for classes with @Listeners(SoftAssert.class} annotation
- See #372 fixed SoftAssert listener for TestNG: it ignores tests with "expectedExceptions" attribute
- upgrade to gson:2.7
- See #196 #267 Selenide uses its own proxy server to download files (thanks to @dimand58 for pull request)
- See #369, #366 Fixed bug with IE and basic auth - thanks to Anton Aftakhov @simple-elf for the pull request!
- See #359 user can disable creating *.html files - thanks to @BorisOsipov for this PR!
- fixed file uploading methods on remote browsers & grid - thanks to Alexei Vinogradov!
- See #364, #303 TestNG: SimpleReport is now thread-safe
- See #364, #303 TestNG: SoftAssertsReportsNGTest is now thread-safe
- See #360 added methods to Selectors; byCssSelector(), byClassName()
- See #355 added method $.dragAndDropTo(WebElement)
- See #339 fixed JS error in Edge browser
- See #290 fixed location of element screenshot - it's not put to "build/reports" folder, not to project root
- See #302 Selenide now throws an error if soft assert is used without annotation
- See #367 added link to implementation to javadoc of all public methods in SelenideElement
- upgrade to htmlunit 2.23
- Upgrade to Selenium 2.53.1 - now it should work with Firefox 47
- See #349 Added Marionette browser support - thanks to Geroen Dierckx @ridiekel for PR!
- See #345 Selenide should not fail if browser doesn't support JavaScript
- See #357 Don't show "Screenshots: " in the error log when screenshots are disabled - thanks to @BorisOsipov for PR!
- upgrade to phantomjsdriver 1.3.0 (compatible with selenium-java 2.53.0)
- Add method
$.screenshotAsImage()
:BufferedImage elementScreenshot = $(".logo").screenshotAsImage();
- thanks to @Akkuzin! - See #321 set default page load strategy back to "normal"
- fixed TestNG TextReport Listener, now only classes annotated with @Report will get reported - thanks to Alexei Vinogradov!
- See #335 Add support for non-public page objects
- See #329 Add support for JBrowser driver (but most of Selenide tests still fail with it :( ) - thanks to Anil Kumar Reddy Gaddam for pull request!
- See #341 Use Selenide timeout when downloading files
- See #320 Implementation of basic auth. for many browsers - thanks to @dimand58
- See #309 method $$.shouldHave(size()) should not fail when timeout happens after the 1st check
- See #274 added advanced checks for collection size: <, <=, >, >=, <>
- See #308 set page load strategy to "none" by default
- See #306 method $.toString() always includes latest value of "value" attribute
- Upgraded to selenium-java 2.53.0, changelog
- See #297 Can set chrome switches with system property
-Dselenide.chrome.switches=--disable-popup-blocking
- See #296 Can set browser version with system property
-Dselenide.browser.version=8
- See #287 add pollingIntervalMilliseconds parameter to #waitUntil #waitWhile
- Typo in property name selenide.collectionsTimeout fixed
- Upgraded to selenium-java 2.52.0, changelog
- Upgraded to htmlunit 2.20, changelog
- See #277 Ajax support for collections: Collection methods (operator $$) wait if collection elements get loaded asynchronously
- added collectionsPollingInterval (defaults to 0,2 s) and collectionsTimeout (defaults to 6 s) to configuration params
- Upgraded to selenium-java 2.51.0
- See #275 Added method for selecting option by index:
$("select").selectOption(3)
- See #272 Add setting "selenide.browser-size" to configure browser window size
- Fixed Bug in showing Selenium WebDriver version
- Upgraded to selenium-java 2.50.0, changelog
- Upgraded to selenium-java 2.49.1 (fixed timeout issue in Grid)
- Added INFO about Selenide and Selenium WebDriver Versions in use
- value-Condition checked for substring containing again (in 3.1-3.1.1 - was exact match)
-
Renamed FAILED->FAIL, PASSED->PASS in the print/log output to avoid confusion with PASSED and FAILED of external tools
-
Added INFO about Browser/Version/Platform for the started browser to the logs
-
exclude old selenium-remote-driver and selenium-java transitive dependencies (coming from phantomjsdriver 1.2.1)
- Update documentation
- See #263 Now Selenide does not allow to download file via invisible link
- See #206 Method
switchTo(alert())
now waits until alert appears - See #206 Method
switchTo(frame())
now waits until frame appears - See #271 Method
switchTo(window())
now waits until window/tab appears - Added methods
byName
,byXpath
,byLinkText
,byPartialLinkText
,byId
for Selectors duplicating SeleniumBy.*
methods - Bugfix:
Condition.exactTextCaseSensitive
now fails searchText is only a substring. - Deprecated
$(WebElement,...) $$(WebElement,..)
- use ``$(WebElement).$(...) instead - Added
getValue
method for SelenideElement (the same asval()
) - Upgraded to selenium-java 2.49.0, changelog
- Add method Selenide.updateHash() (thanks to @fabienbancharel for pull request #254)
- upgrade to sizzle 2.2.1
- upgrade to guava 19.0
- upgrade to testng 6.9.10
- Refactor AbstractSelenideElement. Instead of single huge class, it's split to many small classes ("commands").
- User can override any of these commands
- User can add any custom commands to the standard Selenide methods
- 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 methodswitchTo().window(title)
-
Selenide.switchToWindow(index)
-> use methodswitchTo().window(index)
-
- Remove deprecated methods
-
WebDriverRunner.ie()
-> use methodWebDriverRunner.isIE()
-
WebDriverRunner.htmlUnit()
-> use methodWebDriverRunner.isHtmlUnit()
-
WebDriverRunner.phantomjs()
-> use methodWebDriverRunner.isPhantomjs()
-
WebDriverRunner.takeScreenShot()
-> use methodScreenshots.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 (org.openqa.selenium.support.ui.Quotes)
- Changed license from LGPL 3.0 to MIT (less restrictive)
- See #250 add TextReport (ex. PrettyReportCreator) for TestNG
- See #227 add method
$$.first() and $$ .last() - See #242 #226 add method Screenshots.getLastScreenshot()
- See #226 rename method getScreenShotAsFile() to takeScreenShotAsFile() because it actually takes screenshot
- See #246 add method Selenide.confirm() without text parameter. Sometimes you want to just confirm without verifying text.
- See #232 methods
confirm()
anddismiss()
return actual dialog text - See #244 add ability to skip re-spawning browser after it disappears/closes unexpectedly (added property
-Dselenide.reopenBrowserOnFail=false
) - upgrade to htmlunit 2.19
- add method $.pressEscape()
- extract code for creating WebDriver to a separate class WebDriverFactory
- See #236 fix soft asserts with TestNG
- upgrade to selenium 2.48.2
- add method
$.selectRadio()
- Method
$.setValue()
can also select radio button - See #216 user cannot change value of readonly field (input, radio, checkbox, textarea)
- See #215 Take into account element's "maxlength" attr for the JS value setter
- See #209 close browser in the same thread (without spawning a daemon thread)
- Selenide now requires Java 7 or higher
- Upgrade to Selenium 2.47.1. Release notes
- See #195 replace System.out and System.err by java.util.logging
- See #199 Use timeout (5 seconds by default) when closing/killing webdriver [by @admizh]
- See #204 set timeout (15 sec) and retry (3 times) to create webdriver if first attempt failed
- Cookies are not sent in FileDownloader after httpclient update [by Philipp Kolesnikov]
- See #186 Selenide page factory can inject ElementsCollection
- See #134 for "select", $.getText() returns text(s) of selected option(s).
- See #66 can take screenshot of a single web element
- All should-methods with "message" parameter are deprecated
- exclude cglib-nodep from Selenide dependencies
- See #175 Add method to switch into inner frames:
switchTo().innerFrame("parentFrame", "childFrame_2", "childFrame_2_1");
- See #164 Method
$.download()
accepts untrusted self-signed certificates - See #185 PhantomJS accepts untrusted self-signed certificates
- fastSetValue() also triggers "focus" event (just in case)
- upgrade to Selenium webdriver 2.46.0
- See #161 test should not fail if webdriver failed to collect Javascript errors
- See #182 Bugfix: Selenide 2.18.1 tries to take screenshot too late (when browser is already closed)
- See #180 Bugfix: Selenide 2.18 takes screenshot many times while waiting for condition
- See #158 #167 do looping/waiting on a more upper-level, so that we could retry in case of more errors, e.g. StaleElementException thrown from Selenium
- take screenshot in case of any other exception (not only UIAssertionError)
- See #145 $.shouldHave(value()) ignores difference in invisible characters; added check "exactValue" to save the previous behaviour.
- See #174 user can click using JavaScript using property
-Dselenide.click-via-js=true
(thanks to @dimand58 for pull request) - See #177 Added method $.doubleClick()
- See #176 Methods hover(), contextClick(), dragAndDropTo() can now be chained
- See #168 fixed Sizzle selectors in pages without jQuery (thanks to @Gert for pull request)
- added method
WebDriverRunner.hasWebDriverStarted()
(thanks to @dimand58 for pull request) - See #165 Now method
$.setValue()
triggers the following events infastSetValue
mode: "keydown", "keypress", "input", "keyup", "change. - Selenide depends on the newest version commons-codec 1.10 instead of old version commons-codec 1.6 (coming with Selenium)
- upgrade to selenium webdriver 2.45.0
- added "soft asserts" (JUnit and TestNG are supported out-of-the-box)
- Added #37 Selenide can create a report of all actions in test
- Fixed #152
$.closest(".class")
works correctly - Fixed #151 Method
$$.toString()
fetches collection if it's not fetched yet - Added #154
$.toString()
shows all attributes - Fixed #153
$.setValue()
should not fail if element has disappeared while entering text
- See #140 Added support for Sizzle selectors
- See #139 Added support for multifile upload
- See #106 Added support for BrowserMob proxy (thanks to Vladimir Denisov @proton72)
- See #137 Added method for zooming page IN and OUT
- See #136 Can open non-html pages (e.g. plain text)
- See #72 Added method for switching to frame/window/tab by index
- Retrieving screenshot as file - could be useful for reporting frameworks like 'Yandex Allure' (thanks to Vladimir Denisov @proton72)
- See #138 Remove pointless warning in Chrome: "You are using an unsupported command-line flag: --ignore-certificate-errors"
- Removed duplicate "Screenshot:" prefix in error messages
- Upgraded to Selenium 2.44.0
Added alternative with error message to all "should" methods.
Now it's possible to write asserts with comment / error message:
$("input#vatin").shouldBe("Vatin is required for government companies", visible, enabled);
- Added method
$("img").isImage()
- Added alternate methods
be
andhave
:$.should(have(text("___"))
- useful for using Selenide with EasyB - Added experimental feature "fast set value" (configurable via
Configuration.fastSetValue
); disabled by default. - upgraded to Selenium 2.43.1
-
Added method $.uploadFile()
-
Fixed method $.uploadFromClasspath - it removes extra ".." parts from file name
-
In case of selectbox, $("select").val("...") selects an option (like in JQuery)
-
Added method getWebDriverLogs() for querying logs returned by
webdriver.manage().logs()
(thanks to Sergey Shimkiv for this pull request!) -
Added methods for retrieving screenshot and javascript errors from UIAssertionError
-
Bugfix #119 for Opera (Opera does not support
webdriver.manage().window()
) -
Upgraded to Selenium 2.42.2
-
Upgraded to HtmlUnit 2.15
-
Cleanup release. Dropping obsolete/useless functionality.
-
Methods $.selectOption() and $.selectOptionByValue() DO NOT trigger "change" event with jQuery.
-
Class
com.codeborne.selenide.JQuery
has been deprecated. -
See #61 Selenide clearly says if parent element/collection is not found
-
See #118 Avoid logging annoying error message "UnreachableBrowserException: Error communicating with the remote browser. It may have died." when closing Firefox browser
-
Upgraded to PhantomJS 1.2.0
-
Added method switchToWindow(String title)
-
Added methods
$.hover() and $ .dragAndDropTo(target) -
Added methods
$.parent(), $ .closest("tag") and $.closest(".class") -
Added functions getJavascriptErrors() and assertNoJavascriptErrors()
-
Automatically attach javascript errors to error message when test fails
-
Improved mechanism of closing webdrivers (suggested by Alexandr Gavrilenko)
-
See #114 Selenide throws "Element should be visible" when trying to click invisible element (instead of reporting "Element does not exist" that could be misleading)
-
Removed method Navigator.waitUntilPageIsLoaded - not all pages have "body". E.g. pages containing frames.
-
Method savePageSourceToFile tries to close unexpected alert/confirm dialog (if any)
-
Upgraded to Selenium 2.41.0
- See #102 $.shouldHave(text()) should also ignore \u00a0 character (unbreakable space)
- If selenide cannot take screenshot, the error is logged with stack trace (but only once)
- See #103 Do not ignore webdriver exception, but attach to the assertion error being thrown.
- See #69 Added support for Safari webdriver
- Added method ScreenShooter.to(folder)
- See #98 Selenide stores page source in UTF-8 encoding(independently of default system encoding)
- Removed confusing messages about "reportsUrl" and "BUILD_URL"(use LOG.config log level)
- See #104 Method $.download() throws FileNotFoundException (for 40x error) or RuntimeException (for 50x error)
- See #105 Selenide should wait 4 seconds and re-try even in case of invalidSelectorException
- See #107 Selenide should cleanup all unused browsers immediately
- See #108 Consistently maximize browser windows independently of webdriver creation mode.
- See #99 Added OR condition
- See #100 Use "jQuery" instead of "$" when sending jquery commands (to avoid conflicts with other JS frameworks)
- Upgraded to Selenium 2.40.0, HtmlUnit 2.14 and TestNG 6.8.8
- See #96 Method
WebDriverRunner.setWebDriver()
does not close previous webdriver. You are responsible for webdriver lifecycle if you are using setWebDriver(). - See #63 Method
Condition.actualValue()
is optional (it's not needed in most cases). It makes creating custom conditions even more easier.
- See #95 #79 - Selenide automatically takes screenshots on any test failure, not only if
$.shouldXXX
method fails. - Un-deprecated WebDriverProvider. It still can be useful.
- See #89 Do not exclude cglib dependency - it's needed for taking screenshots with RemoteWebDriver
- See #93 User can get text and html of hidden element with new methods
$.innerText() and $ .innerHtml() - See #77 Added methods back() and forward()
- See #71 Added method setSelected(boolean) for checking checkboxes
- See #86 - added methods
$.is(condition), $ .has(condition) - See #62 Added composite condition AND
- See #94 SelenideElement implements WrapsElement
- See #88 Method $(WebElement parent, By selector, int index) made public. Added method $(WebElement parent, By selector).
- See #82 Added setting "selenide.browser" as a synonym for "browser"
- Method executeJavaScript() can accept multiple arguments
- See #59 Automatically take screenshot on any failures. More exactly, when any of methods $.shouldXXX(condition) fails.
- See #59 When running tests in Jenkinks, Selenide shows public URL of screenshots (using BUILD_URL variable provided by Jenkins). It's incredibly convenient because you can watch screenshots right in the Jenkins report.
- See #59 Added method getScreenshots() for retrieving all taken screenshots
- Upgraded to Selenium 2.39.0
- The most wanted feature is finally here! Added method $.download() for downloading file by "href" attribute!
- Added method $.scrollTo()
- Created annotations for TestNG that automatically create browser per test/per class
- Added method
$.attr("name") as a synonym for $ .getAttribute("name"). - Added method
$.name() as a synonym for $ .attr("name") - Better support for PhantomJS: ignore alerts and confirms
- All webdrivers accept SSL certificates by default
- Selenide clearly says if timeout is mistakenly given in seconds instead of milliseconds.
- Condition constructor has been simplified (for easier creation of custom conditions)
- Upgraded to Selenium 2.37.1
- Allow multiple WebDriver instances in parallel threads inside single VM. This allows running parallel tests.
- All text checks like
shouldHave(text(..))
ignore whitespaces! - Added method for adding WebDriverEventListeners
- Added method
$.pressTab()
- CollectionCondition#texts matches substrings
- Added method CollectionCondition#exactTexts
- Maximize PhantomJS driver "window" by default
- Better error messages for wrapped elements in PageObjects
- Method "$$.findBy" waits until element matches the condition
- Method $.append() first waits until element gets visible
- Updated to selenium-java:2.35.0
- Moved implementation details from WebDriverRunner class to separate WebDriverThreadLocalContainer, ScreenShotLaboratory and Cleanup classes that are not static and can be overridden if needed.
- WebDriverProvider is deprecated
- Added possibility to mock 'alert' and 'confirm' modal dialogs
- $$.should-methods can check multiple conditions
- Collection methods can be chained: $$("#multirowTable tr").shouldHave(size(2)) .filterBy(text("Norris")).shouldHave(size(1));
- Readable error messages!
- Save screenshots into subfolders: folder name is "com/package/TestClass/", file name is "testName.png"/"testName.html"
- Take screenshots for RemoteWebDriver too (using Augmenter)
- Added javadoc for all SelenideElement methods
- Updated to selenium-java:2.33.0
- Use "webdriver.quite()" instead of "webdriver.close()" to force closing ChromeDriver and IE process
- Fixed XPath for byText and withText
- Removed using INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS for IE driver as it seems to be a bad practice
- Removed "waitUntilAlertDisappears" because it does nothing useful.
- Removed accident jcommander dependency
- Build Selenide with Travis CI
- Added method WebDriverRunner.setWebDriver(myDriver) to enable using custom WebDriver instance.
- Added possibility to run HtmlUnit driver emulating different browsers: -Dbrowser=htmlunit:firefox, htmlunit:chrome etc.
- Added condition $$().shouldBe(empty)
- Method $$().shouldHave(size(n)) waits until collection gets expected size
- Method $.setValue() triggers 'change' events in IE too
- Updated to selenium-java:2.31.0
- Changed license from GPL 1.0 to LGPL 3.0
- Added support for TestNG
- Added support for Selenium FluentWait API
- Added support for Selenium Actions API
- Added method $.findAll() returning list of matching elements.
- Added method $$.findBy
- Added method $$.shouldHave(texts("A", "B", "C")) for asserting texts of all matching elements
- Added method
$.data(attr) as a synonym for $ .getAttribute("data-" + attr) - Added conditions "name", "not", "type", "id": $("#username").shouldHave(name("firstName"))
- text and exactText conditions are case insensitive (reason - in css designer can apply text transformations and tests will fail)
- introduced textCaseSensitive and exactTextCaseSensitive conditions
- added open methods to Selenide class that return page object by class
- Methods $.selectOption and $.selectOptionByValue trigger change event when possible.
- Class ElementsCollection now contains list of SelenideElements (instead of WebElements).
- Removed deprecated condition "haveText". Use $.shouldHave(text("john")) instead.
- Excluded org.webbit, netty, selenium-iphone-driver, selenium-safari-driver from Selenide dependencies to avoid loading too much useless stuff unless it's really needed.
- Now Condition implements Predicate. So it can be used for filtering collections.
- Drop deprecated classes and methods (DOM, Navigation).
- Updated to selenium-java:2.31.0
- Selenide 2.0 is not backward-compatible with Selenide 1.+
Migration guide:
- import static com.codeborne.selenide.WebDriverRunner.{browser,holdBrowserOpen,remote,startMaximized,reportsFolder}
- replace by import static com.codeborne.selenide.Configuration.*
- import static com.codeborne.selenide.DOM.defaultWaitingTimeout
- replace by import static com.codeborne.selenide.Configuration.*
- import static com.codeborne.selenide.DOM.*
- replace by import static com.codeborne.selenide.Selenide.*
- import static com.codeborne.selenide.Navigation.*
- replace by import static com.codeborne.selenide.Selenide.open
- import com.codeborne.selenide.ShouldableWebElement
- replace by import com.codeborne.selenide.SelenideElement
- import static com.codeborne.selenide.WebDriverRunner.{browser,holdBrowserOpen,remote,startMaximized,reportsFolder}
- Mark classes DOM and Navigation as deprecated (going to drop them in Selenide 2.0). The point is that now user only needs to import one class Selenide.
- Added support for PhantomJS driver
- Suppress HtmlUnit useless warnings
- Method $.setValue() triggers onchange event with standard JavaScript instead of jQuery.
- Condition "empty" checks for both text and value.
- Added condition "exactText".
- Moved jquery-specific workarounds to a separate class JQuery
- Added selector "by" as a synonym for "byAttribute"
- Updated to selenium-java:2.30.0
- Excluded HtmlUnit dependencies. These have too large size, and not everyone uses them.
- Added method $$().shouldHaveSize(n)
- Added methods
$.exists(), isDisplayed(), $ .text(),$.pressEnter(), $ .followLink() - Added methods $.selectOption(), $.selectOptionByValue(), $.getSelectedValue(), $.getSelectedText()
- Changed behaviour of methods byText() and withText(): now spaces in text are ignored
- Added method
$.val(String) as an alternative for $ .setValue(String) (opa JQuery style!) - Added methods
$.waitUntil() and $ .waitWhile() - Added method Selectors.byAttribute(name, value)
- Added Conditions appear, readonly and attribute(String)
- Added method switchTo() for easier supporting frames
- Method open() can use either absolute or relative URL
- Added method toWebElement() returning the original WebElement
- Added annotation BrowserStrategy
- Methods assertElement, assertVisible, assertHidden in DOM are deprecated.
- Renamed ShouldableWebElement to SelenideElement (shouldable still exists for compatibility)
- $$ does not implement WebElement anymore - it was useless feature.
- Now Selenide kills webdriver if it failed to close normally
- Moved useful methods to class Selenide. Class DOM will be marked as deprecated in version 1.11 and dropped in 2.0
- Updated to selenium-java:2.29.1
- No need for waitFor/waitUntil methods. All the $(), getElement() and shouldXXX() methods wait for a few seconds until element appears or condition gets satisfied.
- Added support for PageObjects - see method DOM.page(Class)
- Added methods $().find() with index parameter
- Added method $().setValue()
- Added method DOM.getSelectedRadio()
- Updated to selenium-java:2.26.0
- Added initial support for phantomjs headless webkit browser (-Dbrowser=phantomjs)
- Added support for custom WebDriver initialization by defining com.codeborne.selenide.WebDriverProvider implementation via "browser" system property.
- Changed Selectors.byText() behaviour - now it matches THE WHOLE TEXT, not a substring.
- A new method Selectors.withText() has been added that matches substring.
- Added option "selenide.start-maximized" (true/false) instead of (deprecated) option "chrome.switches".
- Added support for By.CssSelector to method DOM.getJQuerySelector()
- Added file uploading functionality (file is taken from test classpath)
- Added methods
$().should(), $ ().shouldHave,$().shouldBe(), $ ().shouldNot,$().shouldNotBe, $ ().find() - Added method $().toString() for logging WebElement in human-readable format.
- Added wait-methods with CSS Selector parameter
- Added method DOM.confirm() for clicking on confirmation dialog (alert)
- Added support for Opera browser
- Added method Navigation.refresh() for reloading current page
- Added condition "present", "notPresent", "exist".
- Added selector "byText" and condition "matchesText" for matching elements by regex