Skip to content

Latest commit

 

History

History
1307 lines (1022 loc) · 70.2 KB

CHANGELOG.md

File metadata and controls

1307 lines (1022 loc) · 70.2 KB

Changelog

6.1.2 (released 22.12.2021)

  • #1672 upgrade to Selenium 4.1.1
  • Bump nettyVersion from 4.1.70.Final to 4.1.71.Final
  • #1671 #1666 Bump littleproxy from 2.0.5 to 2.0.7

6.1.1 (released 24.11.2021)

  • #1591, #1626, #1630, #1631 problems with merging webdriver capabilities after upgrading to Selenium 4 -- fixed in PR #1642
  • #1631 change WebDriverProvider argument type from DesiredCapabilities to just Capabilities -- see PR #1642

6.1.0 (released 23.11.2021)

  • #1601 add selenide.properties support -- thanks to Petro Ovcharenko for PR #1601 and #1495
  • #1561 Make it easy to configure proxy before it's started -- thanks Boris Osipov for PR #1620
  • add workaround for NoClassDefFoundError in WebDriverException, see commit https://github.com/selenide/selenide/commit/2eff0307e3a
  • #1637 now method SelenideConfig.browserCapabilities() accepts MutableCapabilities instead of DesiredCapabilities
  • #1638 upgrade to Selenium 4.1.0 -- thanks to Boris Osipov for PR #1638
  • #1640 remove method $.shadowRoot() -- see PR #1641

6.0.3 (released 27.10.2021)

  • Add workaround for Maven users to avoid occasional using Selenium 3 transitive dependencies

6.0.2 (released 26.10.2021)

  • #1623 remove occasional JUnit dependency from published selenide artifact

6.0.1 (released 25.10.2021)

  • upgrade to Selenium 4.0.0
  • #1593 Publish Selenide as separate artifacts: selenide.jar, selenide-proxy.jar, selenide-testng.jar etc.
  • #1581 report exact actual value at the moment of failure
  • Remove lots of deprecated methods -- thanks @BorisOsipov for PR https://github.com/selenide/selenide/pull/1607/files
  • Remove support for "legacy_firefox" (upto ESR 52)
  • #1619 remove setting "startMaximized" - use "browserSize" instead
  • #1619 remove setting "versatileSetValue" - use "selectOptionByValue" or "selectRadio" instead
  • Make Selenide.sleep(N) guarantee the sleep duration
  • #1615 Added method for adding WebDriverListeners (as a replacement for deprecated WebDriverEventListeners)

5.25.0 (released 28.09.2021)

  • #969 Add support for OpenTest4j -- see PR #1545 NB! We changed the signature of many Selenide assertion errors:
    • changed order of "expected" and "actual" values
    • removed "driver" parameter from constructor
  • #1543 add stack trace to every error in SoftAsserts -- see PR #1545
  • #1515 add method $.shadowRoot() -- see PR #1517
  • #1556 add method SelenideElement.ancestor() -- thanks Oleg Berezhnoy for PR #1567
  • #1554 Enhance closest() and ancestor() methods to search by attribute -- thanks to Vitali Plagov for PR #1554
  • #1571 fix method $.screenshot() on Retina display -- see PR #1576
  • #217 report exact text at the moment of failure of text conditions -- thanks Pavel Fokin for PR #1313
  • #1566 forbid empty regex in MatchText
  • #1573 add check webdriver().shouldHave(title(...)) -- thanks Ervīns Patmalnieks for PR #1579

5.24.4 (released 21.09.2021)

  • #1560 un-deprecate method ElementsContainer.getSelf() -- see PR #1565
  • #1569 add details to error message about missing BrowserUpProxy dependency
  • upgrade okhttp 3.11.0 -> 3.12.13
  • upgrade to WebDriverManager 5.0.3 (support Firefox 92.0)

5.24.3 (released 13.09.2021)

  • upgrade to WebDriverManager to 5.0.2
  • exclude docker-java and few other dependencies

5.24.2 (released 02.09.2021)

  • #1551 Fix NoClassDefFoundException for StringUtils

5.24.1 (released 31.08.2021)

  • upgrade to WebDriverManager to 5.0.1 -- thanks to Anil Kumar Reddy Gaddam for PR #1547

5.24.0 (released 29.08.2021)

  • #1525 add method $.execute(Command, Duration) for running custom commands with a custom timeout -- thanks to Evgenii Plugatar for PR #1531
  • #1532 fix searching shadow roots inside of a web element -- see PR #1536
  • #1527 $.execute(Command) and $.execute(Command, Duration) methods no longer pass arguments to custom command -- thanks to Evgenii Plugatar for PR #1535
  • #1467 Avoid spam in logs when webdriver is already closed -- see PR #1540
  • #1534 Or and And conditions work correctly with non-existent element -- thanks to Evgenii Plugatar for PR #1539
  • Or and And conditions support PECS principle in ctor, no longer allow empty list in ctor -- thanks to Evgenii Plugatar for PR #1542
  • #1541 removed deprecated Condition method applyNull() and renamed CollectionCondition applyNull() method -- thanks to Evgenii Plugatar for PR #1544

5.23.3 (released 19.08.2021)

  • #1528 fix "exe" or "dmg" file download in Chrome - see PR #1529

5.23.2 (released 03.08.2021)

  • #1508 add check webdriver().shouldHave(numberOfWindows(N)) -- thanks to Oleg Berezhnoy for PR #1511

5.23.1 (released 30.07.2021)

  • #1500 forbid calling switchTo().innerFrame() without parameters -- see PR #1509
  • #1435 add report when switching between frames -- thanks to Pavel Fokin for the PR

5.23.0 (released 16.07.2021)

  • #1442 Conditional wait for non-WebElement entities -- thanks to Dmitriy Budim for PR #1478
  • #1442 Add method sessionStorage.getItems() -- see PR #1502
  • #1442 Add method localStorage.getItems() -- see PR #1502
  • #1442 add should-methods for clipboard -- see PR #1507
  • #1477 Make Selenide.screenshot() take screenshots even if Configuration.screenshots == false.

5.22.3 (released 05.07.2021)

  • #1474 add workaround for NPE in RemoteWebElement.isDisplayed() -- see PR #1498

5.22.2 (released 30.06.2021)

  • #1493 support uploading files from inside of JAR files -- see PR #1494
  • fix command ./gradlew - now it installs jars to a local maven repo -- see PR #1489
  • add support for okhttp 4.9.1 -- see PR #1488

5.22.1 (released 18.06.2021)

  • Add mime type "binary/octet-stream" to download binary files in FireFox

5.22.0 (released 08.06.2021)

  • #1479 make it possible to check an alert before downloading a file -- see PR #1481
  • #1482 Add support for Condition.textCaseSensitive for selected options in select element -- thanks to Oleg Berezhnoy
  • #1380 Add selectors byTextCaseInsensitive and withTextCaseInsensitive -- see PR #1381
  • #1483 add method Driver.getSessionId() -- thanks to Petro Ovcharenko
  • override default Selenium http timeouts -- see PR #1433
  • #1472 refactoring: pass WebElementSource instead of SearchContext

5.21.0 (released 15.05.2021)

  • #1055 Avoid multiple screenshots for chained locators -- see PR #1465
  • #1448: add BrowserPerTestStrategyExtension to close browser after each test -- thanks to Aaftakhov for PR #1450
  • #1447 Add hover with offset -- see PR #1461
  • #1464 upgrade to WebDriverManager 4.4.3 -- thanks to Anil Kumar Reddy Gaddam
  • #1469 upgrade to httpclient to 5.1 -- thanks to Anil Kumar Reddy Gaddam
  • #1430 javadoc: improve description of lazy loading in many Selenide methods

5.20.4 (released 22.04.2021)

  • #1456 upgrade to WebDriverManager 4.4.1 -- thanks to Anil Kumar Reddy Gaddam

5.20.3 (released 20.04.2021)

  • #1454 Add ability to navigate to absolute browser internal urls -- thanks to Aliaksandr Rasolka

5.20.2 (released 13.04.2021)

  • upgrade to WebDriverManager 4.4.0
  • #1451 migrate 'maven' plugin to 'maven-publish'

5.20.1 (released 23.03.2021)

  • #1438 Added $$.should() method + JavaDoc fixes -- thanks to Oleg Berezhnoy @bereg2k
  • #1439 rename containTexts() to containExactTextsCaseSensitive() -- thanks to Oleg Berezhnoy @bereg2k and Pavel Fokin @fokinp

5.20.0 (released 20.03.2021)

  • #1409 Added method for getting clipboard content -- thanks to Dmitriy Budim @dbudim
  • #1422 add headless mode to Microsoft Edge browser (chromium-based) -- see PR #1424
  • #1423 Microsoft Edge User Agent Test Failed -- see PR #1425
  • #1389 add method $$.as() -- see PR #1431
  • #1426 Added CollectionCondition.containTexts method -- thanks to Oleg Berezhnoy @bereg2k
  • #1436 Fix ignored prefs in FirefoxOptions -- thanks to for Dmitriy Budim PR #1437
  • #1428 Do not log extended "find" methods (e.g. parent, sibling and so) -- thanks to Pavel Fokin @fokinp

5.19.0 (released 24.02.2021)

  • #1110 Implement drag and drop method with JavaScript (used by default, works in all browsers) -- thanks to Dmitriy Budim for PR #1412
  • #1406 fix method $.click(usingJavascript()) in Internet Explorer -- see PR #1419
  • #1402 improve collection description for $$.snapshot()
  • #1415 add method $.getAlias() -- thanks to @pavelpp
  • #1395 add @Nullable annotations to WebDriverRunner
  • #1383 add events "refresh", "back", "forward", "updateHash", "confirm", "dismiss", "prompt", "clearCookies" to Selenide log
  • #1408 fix Selenide own tests when running on machine with user language other than EN -- thanks to Vicente Rossello Jaume

5.18.1 (released 11.02.2021)

  • #1400 add method Selenide.getSessionStorage() -- thanks to Dmitriy Budim @dbudim
  • #1392 remove "dynamic" nature of toString for And condition -- thanks to Pavel Fokin @fokinp for PR #1393
  • #1390 Pass noproxy options from outside proxy to selenide proxy -- thanks to Boris Osipov @BorisOsipov
  • upgrade to Netty 4.1.59.Final and LittleProxy 2.0.2

5.18.0 (released 23.01.2021)

  • #1365 disable webdriver logs by default -- see PR #1379 (they still can be enabled by Configuration.webdriverLogsEnabled = true)
  • #1377 Replace long timeout with Duration for ElementsCollection -- thanks to Ostap Oleksyn for PR #1377!
  • #1373 speed up $(shadowCss()) -- also thanks to @sakamoto66 for issue #1246 and PR #1233!
  • #1369 fix checks $.shouldNot(and(...)) and $.shouldNot(or(...)) -- see PR #1370
  • #1369 don't allow and and or with only one condition -- see PR #1370
  • #1366 detect mismatching "browserName" capability -- see PR #1374
  • #1376 display duration argument in report as "1s" or "300 ms" -- see PR #1378
  • upgraded to WebDriverManager 4.3.1 -- see changelog

5.17.4 (released 14.01.2021)

  • #1360 make SelenidePageFactory even more customizable

5.17.3 (released 10.01.2021)

  • #1361 Fix int method arguments displaying in selenide report(log) -- thanks to Pavel Fokin @fokinp
  • #1363 Add human-readable description of FileFilter arguments in selenide report -- thanks to Pavel Fokin @fokinp
  • #1364 Fix download log event missing in case of FileNotFoundException -- thanks to Pavel Fokin @fokinp
  • #1360 extract interface PageObjectFactory from SelenidePageFactory
  • #1360 move usages of o.o.s.s.pagefactory.Annotations to SelenidePageFactory.findSelector() - make it customizable

5.17.2 (released 30.12.2020)

  • #1355 make Commands return SelenideElement instead of WebElement -- thanks to Boris Osipov
  • #1356 fix method $.setValue(null) -- thanks to Dmitriy Zemlyanitsyn for PR #1357
  • #1070 #981 enable using soft asserts in @BeforeAll and @AfterAll methods (in JUnit 5) -- see PR #1359

5.17.1: broken, please ignore it.

5.17.0 (released 26.12.2020)

  • #1200 Add method $.as("name") to give elements human-readable names -- see PR #1353

  • #1329 Apply chrome headless arguments from puppeteer config -- thanks to Aliaksandr Rasolka

  • #1346 Return all shadow dom elements -- thanks to Daniel H. Peger for PR #1347

  • #1136 add method $.shouldBe(condition, timeout) as a replacement for $.waitUntil(condition, timeout) -- see PR #1340

  • #1136 deprecate Conditions that were created for using with $.waitUntil/$.waitWhile methods -- see PR #1340

  • #1338 improve message of waitUntil/waitWhile methods -- see PR #1340

  • #694 support page object fields of generic types -- see PR #1351

  • #282, #482 enable lazy loading for Page Object fields of type List -- see PR #1354

  • #1348 split the single gradle project to subprojects

  • #1344 Fixed OS dependencies in Selenide tests -- thanks to Daniel H. Peger for PR #1345

  • #1343 Simple code cleanup -- thanks to Yuri Orlov

  • Upgraded to browserup-proxy:2.1.2 and guava:30.1-jre

  • Support for chrome 88, edge 89, opera 73

5.16.2 (released 25.11.2020)

  • #1332 return old click(int, int) command logic -- thanks to Petro Ovcharenko for PR #1333
  • make SoftAssertsExtension thread-safe -- thanks to @dtuchs for PR #1334
  • #1258 fix soft asserts with ParameterizedTest in jUnit5 -- see PR #1328
  • #1293 don't report "Element not found" in case of other errors -- see PR #1326
  • #1290 don't show unused page object fields in report -- see PR #1327
  • upgrade to littleproxy:2.0.1 -- see PR #1325

5.16.1 (released 23.11.2020)

  • #1314 do not exclude "load-extension" switch if Chrome is opened with extensions -- see PR #1324
  • #1315 support custom DriverFactory for running remote browsers -- see PR #1324

5.16.0 (released 20.11.2020)

Selenide plugins:

  • #1051 implement Selenide plugins system -- see PR #1264
  • #1051 add extension point for describing WebElement/AppiumElement
  • #1051 add extension point for customizing taking screenshots -- see PR #1317
  • #1051 add extension point for customizing saving page source -- see PR #1321
  • #1051 add extension point for downloading files from remote browsers

Error messages:

  • Improve NOT condition description -- thanks to Pavel Fokin for PR #1306
  • Improve AND condition description -- thanks to Pavel Fokin for PR #1300
  • Add parent element to ElementFinder.getSearchCriteria -- thanks to Petro Ovcharenko for PR #1312
  • #1261 Add actual own text to error message (when one of checks ownText, exactOwnText fails) -- see PR #1294
  • #987 Avoid throwing "Element not found" when actually a file is not found -- see PR #1301
  • #1302 show ClickOptions details in report -- see PR #1303

Other:

  • Add collection condition $$.shouldHave(exactTextsCaseSensitiveInAnyOrder(...)) -- thanks to Vitali Plagov for PR #1286
  • #1298 fix href condition for encoded values -- thanks to @rerednaw for PR #1299
  • #1307 Allow Chrome to download multiple files in one request (set as default setting) -- thanks to Alexei Vinogradov for PR #1308
  • #1322 allow downloading a file with slash in name -- see PR #1323
  • fix version of Guava 30.0-jre (to avoid all those endless problems when Maven or Gradle transitively resolves too old Guava version)
  • Build Selenide with github actions (instead of Travis CI) -- thanks to Boris Osipov for PR #1319

5.15.1 (released 03.10.2020)

  • Fix creating logs dir in parallel tests
  • #1268 Make setting Configuration.pageLoadTimeout safe (don't crash in Appium or any other webdriver not supporting such a setting)

5.15.0 (released 25.09.2020)

  • Add method to work with LocalStorage (add/remove/clear elements) -- thanks to Dmytro Stekanov for PR #1274
  • #1268 Add setting Configuration.pageLoadTimeout -- see PR #1269 NB! Default value is now 30 seconds.
  • #1261 Add conditions ownText, exactOwnText -- see PR #1262
  • #1173 Add new click via ClickOptions -- thanks to Dmytro Stekanov for PR #1226
  • #1259 Add new download via DownloadOptions -- see PR #1260
  • #1266 Fix performance of big filtered collections -- see PR #1270
  • #1272 Add check "href": $("a").shouldHave(href("...")) -- see PR #1273
  • Add chrome option "--no-sandbox" (I hope it should make Chrome more stable) -- see commit 3293956d
  • #1265 report a clear error message if cannot create a downloads folder -- see commit 94ece98f
  • upgraded to WebDriverManager 4.2.2 -- see commit 5da848d2

5.14.2 (released 22.08.2020)

5.14.1 (released 21.08.2020)

5.14.0 (released 17.08.2020)

  • #1220 create a unique downloads folder for every browser instance -- see PR #1221
  • #1194 added method $$.shouldHave(itemWithText("any text")) -- thanks to Luis Serna for PR #1194
  • #1236 add support for Safari browser -- see PR #1237 and https://github.com/selenide/selenide/wiki/Safari
  • #1166 added method SelenideDriver.screenshot(fileName) -- see PR #1227
  • #1224 added method SelenideDriver.screenshot(OutputType) -- see PR #1231
  • #1190 take screenshot if switchTo(frame) or switchTo(window) or switchTo(alert) failed -- see PR #1240
  • Add chrome option "--disable-dev-shm-usage" to avoid crashing Chrome because of out of memory error
  • #434 support working Sizzle together with Dojo.js, troop.js and JQuery -- see PR #1242
  • #1241 make $.toString() more safe -- see PR #1245
  • #1013 improve error message when Selenide fails to describe an element -- see PR #1239
  • upgraded to WebDriverManager 4.1.0

5.13.1 (released 31.07.2020)

  • #1235 escape downloads path on Windows

5.13.0 (released 08.07.2020)

  • #1156 Method text("") fails if null or empty string is given -- thanks to Roman S.A. for PR #1186
  • #997 Avoid logging redundant findElements calls when executing $.findAll() -- see PR #1193
  • #967 improve error messages for collections -- see PR #1189
  • #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
  • #1196 Download files with forbidden characters in name (those characters are replaced with underscore) -- see PR #1199
  • #1206 write webdriver log to a file -- see PR #1207
  • #1212 experimental feature: add file download mode FOLDER -- see PR #1213 and #1215

5.12.2 (released 29.05.2020)

  • #1172 don't close browser if holdBrowserOpen=true -- see PR #1176
  • #1179 fix @Nonnull annotation for methods getText(), innerText(), innerHtml(), getSelectedText() -- see PR #1181

5.12.1 (released 25.05.2020)

  • 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

5.12.0 (released 23.05.2020)

  • #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

5.11.1 (released 21.04.2020)

  • #1130 fix "because" condition for unexisting elements
  • #1114 strictly require slf4j only when using @TextReport rule/extension/listener

5.11.0 (released 19.04.2020)

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

5.10.0 (released 18.03.2020)

  • #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

5.9.0 (released 10.03.2020)

  • #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

5.8.0 (released 28.02.2020)

  • #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)

5.7.0 (released 07.02.2020)

  • #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 changelog

5.6.1 (released 14.01.2020)

5.6.0 (released 26.12.2019)

  • #1019 Migrate from BrowserMob to BrowserUp proxy -- thanks to Aliaksandr Rasolka for PR #1020

5.5.1 (released 29.11.2019)

  • #1008 add support for system property "chromeoptions.mobileEmulation" -- see PR #1011
  • #1016 deprecate method Selenide.close() -- see PR #1017

5.5.0 (released 31.10.2019)

  • #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

5.4.1 (released 16.10.2019)

  • bugfix: close webdriver in the end of all tests

5.4.0 (released 16.10.2019)

  • #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

5.3.1 (released 08.09.2019)

  • #234 add a screenshot to error message in Maven too -- see PR #972

5.3.0 (released 02.09.2019)

  • 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

5.2.8 (released 03.08.2019)

  • #961 Fix spam in logs "Failed to get attributes via JS..."
  • #930 Make method Condition.applyNull() overridable

5.2.7 (released 01.08.2019)

  • #928 fix paradoxical "IllegalStateException: You need to call open(url) first" from open method
  • One more fix for $.toString() in Appium (iOS)

5.2.6 (released 22.07.2019)

  • #496 Another fix for $.toString() in Appium

5.2.5 (released 19.07.2019)

  • #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

5.2.4 (released 20.06.2019)

  • 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)

5.2.3 (released 07.05.2019)

  • 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

5.2.2 (released 15.03.2019)

  • upgrade to WebDriverManager 3.3.0

5.2.1 (released 13.03.2019)

  • add WDM support for Chrome 73 and 74

5.2.0 (released 19.02.2019)

  • #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

5.1.0 (released 14.12.2018)

  • 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

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 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

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 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 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.reportsFolder is null

4.14.1 (released 06.09.2018)

  • 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

4.14.0 (released 29.08.2018)

  • #784 Enable BasicAuth through Selenide proxy server -- see selenide#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 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 throws NoAlertPresentException instead of TimeoutException -- 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

4.12.3 (released 17.07.2018)

  • #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

4.12.2

  • #749 Added because method to CollectionCondition -- thanks to Mikhail Sidelnikov @sidelnikovmike
  • #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 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

4.11.4 (released 09.05.2018)

  • 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

4.11.3 (released 07.05.2018)

  • 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

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 Aliaksandr Rasolka @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 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

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 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 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 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()

4.9 (released 20.12.2017)

  • 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

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 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

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 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

4.4.3 (released 25.04.2017)

  • upgrade to selenium-java 3.4.0

4.4.2 (released 30.03.2017)

  • See #510 fix closing windows in $.download()

4.4.1 (released 28.03.2017)

  • Add a workaround for invalid resolving of selenium-api dependency by Maven

4.4 (released 27.03.2017)

  • See #479 Added methods clearBrowserCookies() and clearBrowserLocalStorage()
  • 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

4.3 (Released 09.02.2017)

  • 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

4.2.1 (Released in January 2017)

  • 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

4.2 (Released 13.12.2016)

  • 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.

4.1 (Released 01.12.2016)

  • See #428 Improve byAttribute method for search via css selectors
  • See #419 #425 Added methods texts(List) and exactTexts(List) to CollectionCondition
  • 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)

4.0 (Released 15.10.2016)

  • 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

3.11 (Released 14.10.2016)

  • See #415 Selenide calls SeleniumException.getMessage() multiple times
  • See #416 Added condition checked for verifying checkboxes

3.10 (Released 26.09.2016)

  • 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

3.9.3 (Released 09.09.2016)

  • See #393 Selenide should NOT add proxy server to browser if Configuration.fileDownload = HTTPGET

3.9.2 (Released 03.09.2016)

  • 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

3.9.1 (Released 27.08.2016)

  • 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

3.9 (Released 22.08.2016)

  • See #196 #267 Selenide uses its own proxy server to download files (thanks to @dimand58 for pull request)

3.8.1 (Released 10.08.2016)

  • See #369, #366 Fixed bug with IE and basic auth - thanks to Anton Aftakhov @simple-elf for the pull request!

3.8 (Released 06.08.2016)

  • 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

3.7 (07.07.2016)

  • 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!

3.6 (29.05.2016)

  • 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

3.5.1 (Released 04.04.2016)

  • See #309 method $$.shouldHave(size()) should not fail when timeout happens after the 1st check

3.5 (Released 31.03.2016)

  • 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

3.4 (Released 03.03.2016)

  • 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

3.3 (Released 10.02.2016)

  • 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

3.2 (Released 29.01.2016)

  • 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

3.1.3 (Released 22.01.2016)

  • Upgraded to selenium-java 2.49.1 (fixed timeout issue in Grid)
  • Added INFO about Selenide and Selenium WebDriver Versions in use

3.1.2 (Released 19.01.2016)

  • value-Condition checked for substring containing again (in 3.1-3.1.1 - was exact match)

3.1.1 (Released 18.01.2016)

  • 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)

3.1 (Released 17.01.2016)

  • 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 Selenium By.* methods
  • Bugfix: Condition.exactTextCaseSensitive now fails searchText is only a substring.
  • Deprecated $(WebElement,...) $$(WebElement,..) - use ``$(WebElement).$(...) instead
  • Added getValue method for SelenideElement (the same as val())
  • Upgraded to selenium-java 2.49.0, changelog

3.0 (Released 24.12.2015)

New functions:

  • 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

Big refactoring:

  • 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

Code cleanup:

  • 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
    • WebDriverRunner.ie() -> 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 (org.openqa.selenium.support.ui.Quotes)

2.25 (Released 30.11.2015)

  • 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() and dismiss() 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

2.24 (Released 08.11.2015)

  • 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

2.23 (Released 15.09.2015)

  • 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

2.22 (Released 29.08.2015)

  • See #209 close browser in the same thread (without spawning a daemon thread)

2.21 (Released 03.08.2015)

  • Selenide now requires Java 7 or higher
  • Upgrade to Selenium 2.47.1. Release notes

2.20 (Released to 27.07.2015)

  • 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

2.19 (Released 21.06.2015)

  • 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

2.18.2 (Released 24.05.2015)

  • See #182 Bugfix: Selenide 2.18.1 tries to take screenshot too late (when browser is already closed)

2.18.1 (Released 15.05.2015)

  • See #180 Bugfix: Selenide 2.18 takes screenshot many times while waiting for condition

2.18 (Released 29.04.2015)

Behaviour changes:

  • 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()

Bugfixes:

  • 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 in fastSetValue 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)

2.17 (Released 08.03.2015)

  • upgrade to selenium webdriver 2.45.0
  • added "soft asserts" (JUnit and TestNG are supported out-of-the-box)

2.16 (Released 10.01.2015)

  • 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

2.15 (Released 02.11.2014)

  • 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)

And minor issues:

  • 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

2.14 (Released 16.09.2014)

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);

2.13 (Released 11.09.2014)

  • Added method $("img").isImage()
  • Added alternate methods be and have: $.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

2.12 (Released 4.07.2014)

  • 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

2.11 (Released 21.05.2014)

  • 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

2.10 (Released 18.04.2014)

  • 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

2.9 (Released 14.03.2014)

  • 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.

2.8.1 (Released 24.02.2014)

  • 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

2.8 (Released 15.02.2014)

Non-backward compatible changes:

  • 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.

Improvements:

  • 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

New features:

  • 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

2.7 (Released 31.12.2013)

  • 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

2.6.1 (Released 29.11.2013)

  • The most wanted feature is finally here! Added method $.download() for downloading file by "href" attribute!

2.6 (Released 26.11.2013)

  • Added method $.scrollTo()

2.5 (Released 11.11.2013)

  • 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

2.4 (Released 16.09.2013)

New features:

  • 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

Bugfixes:

  • Method "$$.findBy" waits until element matches the condition
  • Method $.append() first waits until element gets visible

Technical issues:

  • 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

2.3 (Released 9.07.2013)

New features:

  • 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));

Usability issues:

  • 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

Technical issues:

  • 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

2.2 (Released 31.05.2013)

  • 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

2.1 (Released 2.04.2013)

  • 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.

2.0 (Released 3.03.2013)

  • 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

1.11 (Released 28.02.2013)

  • 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

1.10 (Released 11.02.2013)

  • 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

1.9 (Released 5.01.2013)

  • 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.

1.8 (Released 29.11.2012)

  • 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()

1.7 (Released 22.10.2012)

  • 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