- bump Selenium from 4.14.1 to 4.15.0 (#2540)
- restore for loop for collections (method
$$.iterator()
) (#2533) - restore method
$$.isEmpty()
(#2533) - #2372 rename
CollectionCondition
toWebElementsCondition
(#2533) - restore "self" field in containers (#2534)
Dependency updates:
- upgrade to Java 17 (#2522)
- bump Selenium from 4.13.0 to 4.14.1 (#2505)
- bump Appium from 8.6.0 to 9.0.0 (#2505)
- bump TestNG from 7.4.0 to 7.8.0 (#2515)
Fixes:
- #2372 Fix deadlock in static initialization (#2453)
- #2500 report actual value at the moment of check (#2501)
Refactorings:
- #2372 rename base class for conditions from
Condition
toWebElementCondition
(#2453) - remove deprecated methods
Condition.apply()
andCondition.actualValue()
(#2512) - remove deprecated methods from collection conditions (#2520)
- remove deprecated methods from
ElementsCollection
(#2513) - remove deprecated abstract class
ElementsContainer
- useContainer
instead (#2523) - Replace
FileNotFoundException
byFileNotDownloadedError
(#2526) - #2485 Rename some
*Exception
classes to*Error
(#2530) - remove usages of deprecated class
WebDriverEventListener
(#2516) - remove deprecated Drag'n'drop methods (#2519)
- Remove deprecated methods
$.getSelectedValue()
and$.getSelectedText()
(#2521) - remove deprecated TestNG annotations
@Report
and@GlobalTextReport
(#2517) - Remove some deprecated methods (#2518)
- bump Appium from 8.5.1 to 8.6.0 (#2494) -- thanks to Aliaksandr Rasolka and Boris Osipov for help
- Bump com.github.valfirst.browserup-proxy:browserup-proxy-core (#2510)
- Bump Netty from 4.1.98.Final to 4.1.100.Final (#2484) (#2498)
- Bump xyz.rogfam:littleproxy from 2.0.21 to 2.0.22 (#2491)
- Bump com.google.guava:guava from 32.1.2-jre to 32.1.3-jre (#2499)
- Bump com.fasterxml.jackson.core:jackson-core from 2.15.2 to 2.15.3 (#2502) (#2503)
- Bump commons-io:commons-io from 2.13.0 to 2.14.0 (#2486)
- #2479 bump Selenium from 4.12.1 to 4.13.0 (#2479), see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #2469 strip invisible spaces from collection texts (#2482)
- #1277 #2395 add method $.highlight() to highlight given element (#2481)
- #2475 remove hub url condition (#2476) -- thanks to Dmitry Plodukhin
- #2439 introduce interface
Container
as a replacement for abstract classElementsContainer
(#2465) - #2467 [appium] added tap, doubleTap commands (#2467) -- thanks to qwez
- #2440 [appium] add new selector with className and Index (#2440) -- thanks to Amuthan Sakthivel
- #2474 [appium] update Appium Scroll Options and README.md (#2474) -- thanks to Amuthan Sakthivel
- bump LittleProxy from 2.0.20 to 2.0.21
- Bump BrowserUpProxy from 2.2.12 to 2.2.13 (#2463)
- Bump nettyVersion from 4.1.97.Final to 4.1.98.Final (#2477) Full list: https://github.com/selenide/selenide/milestone/192?closed=1
- #2434 show actual texts in error message for collections text checks (#2456)
- #2452 bump Selenium from 4.11.0 to 4.12.1
- #2336 pass BasicAuth in Chromium-based browser using
HasAuthentication
mechanism - again (#2358) - #2445 add method $$.getOptions() (#2446)
- #2454 Make Selenide.getFocusedElement() return SelenideElement, not WebElement
- #2437 support page object fields of type SelenideAppiumElement (#2438)
- #2449 added ability to set top and bottom point coordinates for scroll in mobile apps -- thanks to @qwez for PR
- #2439 do not allow creating ElementsContainer outside of page object (#2455)
- bump LittleProxy from 2.0.19 to 2.0.20 (fixes a memory leak in Selenide proxy)
- #2442 update vulnerable jackson dependency Full list: https://github.com/selenide/selenide/milestone/190?closed=1
- #2424 Avoid using authentication via CDP -- see PR #2435
- Bump nettyVersion from 4.1.96.Final to 4.1.97.Final Full list: https://github.com/selenide/selenide/milestone/189?closed=1
- #2424 Fix hanging webdriver -- see PR #2428
- #2191 support command $.type() in mobile apps -- see PR #2408
- #2420 #2422 fix method $.type(Keys.*) -- see PR #2421
- #2398 throw a clear error message when user calls getProxyServer() -- see PR #2406
- #2419 remove leading and trailing spaces in $$.texts() -- see PR #2427 Full list: https://github.com/selenide/selenide/milestone/188?closed=1
- #2393 bump Selenium from 4.10.0 to 4.11.0, see https://www.selenium.dev/blog/2023/whats-new-in-selenium-manager-with-selenium-4.11.0/
- #2385 #2402 replace WebDriverManager by Selenium built-in SeleniumManager -- see PR #2400
- #2385 support Java 8 again! -- see PR #2400
- #2191 Add method $.type() -- thanks to Amuthan Sakthivel
- #2370 added method for Appium: click with long press -- thanks to Amuthan Sakthivel for PR #2381
- #2369 added method for Appium: swipe right and left -- thanks to Amuthan Sakthivel
- #2394 un-deprecate methods
$$.texts() and $$ .attributes() - #2390 use more neutral sample in javadoc -- see PR #2401
- #2388 bump Netty from 4.1.95.Final to 4.1.96.Final
- #2386 bump BrowserUpProxy from 2.2.10 to 2.2.11
- #2368 added
allOf
andanyOf
conditions -- thanks Evgenii Plugatar for PR #2368 - #2367 Add conditions to check cookies -- thanks adorne for PR #2367
- #2374 bump WebDriverManager from 5.4.0 to 5.4.1 (incl. support for Chrome 115)
- #2377 support elements in SVG -- see PR #2379
- #2382 bump junitVersion from 5.9.3 to 5.10.0
- #2383 bump org.opentest4j:opentest4j from 1.2.0 to 1.3.0
- #2362 Speed up collection conditions
- #2268 Add conditions
date(...)
anddatetime(...)
to check date values -- thanks to Maksim @Au6ojlut for PR #2281 - #2357 add methods
$.setValue(withDateTime)
and$.setValue(withTime)
- #2350 show full stack trace in soft asserts -- see PR #2354
- #2336 pass BasicAuth in Chromium-based browser using
HasAuthentication
mechanism -- see PR #2358 - #2336 user can set multiple domains for BasicAuth
- #2346 fix
$.doubleClick()
in Appium -- see PR #2347 - #2352 take screenshot even if webdriver has been closed in
@AfterEach
method -- see PR #2356 - #2318 use latest version of geckodriver for FF 102+ -- see PR #2319
- #2328 bump Selenium from 4.9.1 to 4.10.0
- #2324 Bump io.appium:java-client from 8.5.0 to 8.5.1
- #2349 Bump Netty from 4.1.93.Final to 4.1.94.Final
- bump WebDriverManager from 5.3.3 to 5.4.0
- #2291 Project "selenide-appium" was merged into project "selenide".
- #2292 Project "selenide-selenoid" was merged into project "selenide".
- #2288 Clicking a disabled element now fails -- thanks to Maksim @Au6ojlut for PR #2290
- #2283 Escape special characters in subject in text report -- thanks to Maksim @Au6ojlut for PR #2284
- #2300 Add few collection conditions for mobile apps -- thanks to Amuthan Sakthivel for selenide/selenide-appium#135, also see PR #2315
- Add methods for switching between mobile contexts -- see PR #2308, thanks to Amuthan Sakthivel for selenide/selenide-appium#149
- #2312 #2307 refactor CollectionCondition: replace method
test(elements)
bycheck(driver, elements)
orcheck(CollectionSource collection)
. - #2305 Added cause to collection errors
- #2287 Bump commons-io:commons-io from 2.11.0 to 2.12.0
- #2309 Bump nettyVersion from 4.1.92.Final to 4.1.93.Final
Full list: https://github.com/selenide/selenide/milestone/184?closed=1
- make new method
$.dragAndDrop()
usable byselenide-appium
- make
$.download(FOLDER)
usable byselenide-selenoid
- bump webdrivermanager from 5.3.2 to 5.3.3 -- see https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md#533---2023-05-11
- bump BrowserUpProxy from 2.2.9 to 2.2.10 -- see https://github.com/valfirst/browserup-proxy/blob/master/CHANGELOG.md
- #2253 make method $.toString() fast -- see PR #2269
- #2270 don't add
--no-sandbox
automatically -- see PR #2271 - #2172 Introduce
step
method to be able to group multiple actions -- thanks to Maksim @Au6ojlut for PR #2250 - #2245 Add method $.dragAndDrop(DragAndDropOptions) -- thanks to Maksim @Au6ojlut
- #2258 allow setting negative browser position -- see PR #2259
- #2267 setBinary is supported by Edge -- thanks to Vladislav Velichko
- add missing method $.val(options)
- #2277 Bump selenium from 4.9.0 to 4.9.1 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #2263 Bump nettyVersion from 4.1.91.Final to 4.1.92.Final
Full list: https://github.com/selenide/selenide/milestone/181?closed=1
- #2257 bump Selenium from 4.8.3 to 4.9.0 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- mark $$.subList() as deprecated (see #2239)
- #2171 #1927 added method $.cached() -- see PR #2189
- #2227 added method to mock http response with any status -- see PR #2234
- #2213 add method
inNewBrowser
for running a code block in new one-time browser instance -- see PR #2236 - #2133 add method
$.doubleClick(options)
-- thanks to @aakachurin for PR #2135 - #2220 added condition
$.shouldHave(innerText())
-- see PR #2223 - #2091 added method
$$.shouldHave(attributes(...))
-- thanks to Alexey Lakovych for PR #2091, also see PR #2230 - #2231 throw clear error when
$.select*()
is applied for non-select -- see PR #2233 - #2239 fixed method
$$.subList(0, 3)
-- see PR #2240 - bump Selenium from 4.8.1 to 4.8.3 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- bump LittleProxy from 2.0.16 to 2.0.17
- #2232 bump BrowserUpProxy from 2.2.8 to 2.2.9
- #2243 Bump nettyVersion from 4.1.90.Final to 4.1.91.Final
Full list: https://github.com/selenide/selenide/milestone/177?closed=1
- #2215 support jdk-http-client instead of NettyClient -- see PR #2216
- #2202 fix method $.download(PROXY) after using
using
-- see PR #2208 and #2209 - #2207 $.clear() should not fail if element has disappeared as a result of clearing -- see PR #2221
- #2210 Bump nettyVersion from 4.1.89.Final to 4.1.90.Final
- #2218 Bump slf4jVersion from 2.0.6 to 2.0.7
Full list: https://github.com/selenide/selenide/milestone/180?closed=1
- #2202 fix method $.download(FOLDER) after using
using
-- see PR #2203
- #2192 added workaround for Chromedriver 111 issue ("Invalid Status code=403 text=Forbidden") -- see PR #2194
Full list: https://github.com/selenide/selenide/milestone/178?closed=1
- #2174 Fixed a bug where selenide.holdBrowserOpen were not read correctly -- thanks to @doranko for PR
- #2178 improve how "$.getSelectedOption().should*" looks in reports -- see PR #2179
- #2186 Use custom driver in the using block -- see PR #2188
- #2173 bump BrowserUpProxy from 2.2.7 to 2.2.8
- #2176 bump LittleProxy from 2.0.15 to 2.0.16
Full list: https://github.com/selenide/selenide/milestone/176?closed=1
- #2104 use new headless mode -- thanks Boris Osipov for PR #2105 and #2169
- #2167 improve logs when download a file
- #2167 ignore Edge temporary files on Windows
- #2161 bump Selenium from 4.8.0 to 4.8.1
- Bump nettyVersion from 4.1.87.Final to 4.1.89.Final
- rename "master" branch to "main" (finally!)
Full list: https://github.com/selenide/selenide/milestone/173?closed=1
- #2136 bump Selenide from 4.7.2 to 4.8.0
- #2137 once again, truncate only messages of WebDriverException :)
- #2131 truncate only WebDriverException message
- #2116 fix $.download(FOLDER): support case when file modification time is in previous second
- #2119 fix $.download(FOLDER): support the case when file modification time is 0
- bump webdrivermanager from 5.3.1 to 5.3.2
- #2126 bump netty from 4.1.86.Final to 4.1.87.Final
Full list: https://github.com/selenide/selenide/milestone/174?closed=1
- #1817 add methods to copy and paste content -- thanks to Evgenii Plugatar for PR #2027
- #2054 can fail the test if unexpected alert encountered -- see PR #2095
- #2082 allow downloading of large files via proxy -- see PR #2098
- #2081 fix screenshot file permission:
-rw-r--r--
, not-rw-------
-- see PR #2084 - #2087 support @As annotation for page object fields not annotated by @FindBy -- see PR #2088
- #2065 added method to return last page source -- thanks to Arman Ayvazyan for PR #2065
- #980 added possibility to add page URL to error message -- see PR #2097
- #2037 fixed method
Selenide.download()
to work with URL protected by BasicAuth -- see PR #2102 - #2101 Bump browserup-proxy-core from 2.2.6 to 2.2.7
Full list: https://github.com/selenide/selenide/milestone/169?closed=1
- #2062 don't trigger "change" event from
$.select*
if value is unchanged -- thanks to Vicente Rossello Jaume for PR #2063 - #2068 bump Selenium from 4.7.1 to 4.7.2
- #2069 Bump LittleProxy from 2.0.14 to 2.0.15
- #2066 Bump Netty from 4.1.85.Final to 4.1.86.Final
- #2067 Bump slf4j from 2.0.5 to 2.0.6
- #2032 added chainable method $.press() -- thanks to Amuthan Sakthivel for PR
- #2050 trigger change events by
$.select*
methods -- thanks to Vicente Rossello Jaume for PR #2051 - #2047 show $.selectOption() in reports friendly -- see PR #2052
- #2045 show sessionStorage and localStorage in reports friendly -- see PR #2046
- #2044 #2057 bump Selenium from 4.6.0 to 4.7.1
- #2036 Bump browserup-proxy-core from 2.2.5 to 2.2.6
- bump slf4j from 2.0.4 to 2.0.5
- #2058 bump httpclient5 from 5.2 to 5.2.1
- #2029 fix
Configuration.browserSize
setting in Chrome, thanks to Boris Osipov for PR #2030 - #2031 downgrade browserup-proxy-core from 2.2.5 to 2.2.3 (because of bug valfirst/browserup-proxy#177)
- #2028 Bump archunit-junit5 from 1.0.0 to 1.0.1
- #1989 support very slow downloading in Firefox -- see PR #2003
- #1990 fail download process faster than timeout if no any bytes received -- see #2023
- #1553 select options using JavaScript -- see PR #1876; thanks to Oleg Berezhnoy for PR #1553 (in the end, it affected Selenium)
- #2007 make $.click(options) chainable -- see PR #2008
- make ClickOptions overridable (to be used in selenide-appium)
- #2010 Don't change pageLoadTimeout if it is negative -- thanks Boris Osipov for PR
- #2017 Fix an issue when a new tab size in headless chrome has incorrect size -- thanks Boris Osipov for PR
- #2020 encode BasicAuth credentials added to URL -- see PR #2021
- #2015 un-deprecate BasicAuthCredentials constructor without domain -- see PR #2022
- bump Selenium from 4.5.0 to 4.6.0, see https://www.selenium.dev/blog/2022/selenium-4-6-0-released/
- bump WebDriverManager from 5.3.0 to 5.3.1, see https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md#531---2022-11-04
- Bump browserup-proxy-core from 2.2.3 to 2.2.5, see https://github.com/valfirst/browserup-proxy/blob/master/CHANGELOG.md
- Bump nettyVersion from 4.1.82.Final to 4.1.85.Final
- bump LittleProxy from 2.0.13 to 2.0.14
- #2014 Bump httpclient5 from 5.1.3 to 5.2
- #2025 bump slf4j from 2.0.3 to 2.0.4
Full list: https://github.com/selenide/selenide/milestone/167?closed=1
- #1254 add methods to mock any server response in Selenide proxy -- see PR #1978
- #1974 Selenide proxy now adds Authorization header only for specified domain -- see PR #1975
- #1970 improve resolving proxy host name
- #1967 upgrade to selenium 4.5.0 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #1967 remove Opera support
- #1971 Disable logging for getAlias method -- thanks to Reserved Word for the pull request
- #1977 add setting "connection timeout" in addition to "read timeout"
- #1969 bump slf4j from 2.0.2 to 2.0.3
- #1254 bump littleproxy from 2.0.12 to 2.0.13
- #1965 restore "opentelemetry" dependency
- #1946 deep shadow selectors support -- thanks to Boris Osipov for PR #1947
- #1961 Add method page() without Class argument -- thanks to Tagir Valeev for the hint
- #1903 add annotation @As for page object fields -- see PR #1956
- #1963 Removed "opentelemetry" dependency - we didn't use it since PR #1763
- Bump BrowserUpProxy from 2.2.2 to 2.2.3
- Bump LittleProxy from 2.0.11 to 2.0.12
- Bump Netty from 4.1.80.Final to 4.1.82.Final
- Bump slf4j from 2.0.0 to 2.0.2
- Bump JUnit from 5.9.0 to 5.9.1 -- see https://junit.org/junit5/docs/5.9.1/release-notes/
- #1942 fix exception in "Dead threads' watchdog" #1942 -- see PR #1943
- #1936 Add remote read timeout as configurable parameter -- thanks to Rodion Goritskov for PR #1936
- #1935 Bump Netty from 4.1.79.Final to 4.1.80.Final
- #1923 add condition
partialValue
-- see PR #1924 - #1928 add condition
$.shouldHave(tagName("div"))
-- see PR #1929 - #1934 Check that element is
<select>
in methods$.getSelectedText()
,getSelectedValue()
- #1934 rename
$.getSelectedText()
to$.getSelectedOptionText()
- #1934 rename
$.getSelectedValue()
to$.getSelectedOptionValue()
- #1932 Bump webdrivermanager from 5.2.3 to 5.3.0
- #1931 Bump slf4jVersion from 1.7.36 to 2.0.0
- #1921 Bump browserup-proxy-core from 2.2.1 to 2.2.2
- #1917 fix memory leak in Selenide -- see PR #1919
- #1918 upgrade to LittleProxy 2.0.11 which also has fixed a memory leak
- #1913 upgrade to selenium 4.4.0 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #1920 fix
full-size-screenshot
: pick the right window on remote webdriver
- #1894 restore Driver parameter in SelenidePageFactory.findSelector() - it's used by
selenide-appium
.
- #1780 verify the whole text in
$.shouldHave(text)
, not a substring -- see PR #1783 - #1799 implement full-size screenshots as a separate Selenide plugin -- see PR #1858; thanks to Aliaksandr Rasolka for PR #1800
- #1894 add @CacheLookup annotation support -- thanks to Ilya Koshaleu
- #1891 deprecate TestNG annotation @Report -- see PR #1909
- #1886 decode downloaded file name if it's base64-encoded -- see PR #1889
- #1907 restore IE support in setValue
- #1902 make HttpClientTimeouts public
- #1885 make type of setValue() parameter String again -- see PR #1888
- #1887 give user a clear hint in case of invalid file extension parameter
- #1904 bump byteBuddyVersion from 1.12.12 to 1.12.13
- #1901 bump webdrivermanager from 5.2.1 to 5.2.3
- #1900 bump JUnit from 5.8.2 to 5.9.0
- #1896 bump LittleProxy from 2.0.9 to 2.0.10
- #1895 bump browserup-proxy-core from 2.2.0 to 2.2.1
- #1892 bump nettyVersion from 4.1.78.Final to 4.1.79.Final
- #1862 #1866 remove usages of deprecated capabilities ("acceptSslCerts", "handlesAlerts", "javascriptEnabled", "takesScreenshot") -- see PR #1870
- #1856 fix ClearWithShortcut when using EventFiringDriver -- thanks to Petro Ovcharenko
- #1875 Add shorter syntax to click
- #1878 support mobile apps when checking webdriver health -- see PR #1879
- #1880 open a browser when
open()
is called for the first time (even ifreopenBrowserOnFail
isfalse
) -- see PR #1881 - upgrade to WebDriverManager 5.2.1
- Bump byteBuddyVersion from 1.12.11 to 1.12.12
- #1869 Bump seleniumVersion from 4.2.2 to 4.3.0
- #1868 Bump byteBuddyVersion from 1.12.10 to 1.12.11
- #1861 Added collection condition
exactTextsCaseSensitive
-- thanks to Ben Heap - #1581 make method $.getSelectedOption() lazy-loaded -- see PR #1864
- #1857 Bump nettyVersion from 4.1.77.Final to 4.1.78.Final
- #1860 Bump browserup-proxy-core from 2.1.5 to 2.2.0
- #1572 use custom timeout for commands which have timeout -- see PR #1853
- #1854 simplify creation of EdgeOptions
- upgrade to selenium 4.2.2 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #1850 restore byte-buddy dependency (needed by WebDriverDecorator)
- #1497 extract clearing input with a shortcut to a separate plugin -- see PR #1847 and #1838
- #1819 fix $.clear() in Safari -- see PR #1820
- #1811 Add exact own text case-sensitive condition -- thanks to Kachurin Alexandr
- #1812 Add own text case-sensitive condition -- thanks to Kachurin Alexandr
- #1572 add $.click method with custom timeout -- see PR #1845
- #1721 add methods confirm(), dismiss(), prompt() with custom timeout -- see PR #1846
- #1848 fix method Driver.executeJavaScript() to support wrapped webdriver
- #1840 fix wording of some conditions to sound grammatically correct
- #1807 fix case-related issues when running tests on TR locale -- thanks to Vladimir Sitnikov for the hint in PR #1696
- #1836 add Safari options -- see PR #1841
- #1834 fix SoftAsserts with TestNG (downgraded TestNG from 7.5 to 7.4.0) -- see PR #1843
- #1814 upgrade to webdrivermanager 5.2.0
- #1832 upgrade to selenium 4.2.1 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #1497 fix $.clear implementation: use "Ctrl+A -> Delete" instead of "Home -> Shift+A -> Delete" (which didn't work on Safari and latest Firefox). See PR #1838.
- #1808 Don't move focus to next element when calling $.clear() -- see PR #1809
- Bump browserup-proxy-core from 2.1.4 to 2.1.5
- #1768 add method to mask passwords etc. in reports -- see PR #1770
- #1753 add method to set value in -- see PR #1770
- #1497 Make $.setValue("") work properly with React, Vue.js and other hipster frameworks -- see PR #1787
- #1497 implement $.clear() by pressing "Home -> Shift+End -> Backspace -> Tab" -- see PR #1787
- #960 Don't trigger "change"/"blur" events when clearing the input in "setValue" method -- see PR #1787
- #1784 trigger "blur" event on previous active element -- see commit 593e6fc900500d9
- #1523 Methods
$.setValue() and $ .append() check that the element is editable (not disabled or readonly) -- see PR #1787 - #1523 introduce new conditions "interactable" and "editable" -- see PR #1787
- #1779 Method $.download(FOLDER) now waits for the full completion of download -- see PR #1804 and #1769
- #1763 Disable built-in Selenium OpenTelemetry tracing -- thanks to Petro Ovcharenko and Aliaksandr Rasolka
- #1773 add non-deprecated
stream()
method to selenide collections -- see PR #1774 - Bump seleniumVersion from 4.1.3 to 4.1.4
- upgrade to WebDriverManager 5.1.1
- Bump nettyVersion from 4.1.75.Final to 4.1.77.Final
- Bump LittleProxy from 2.0.7 to 2.0.9
- remove code that was not needed after introducing SelenideNettyClientFactory -- see PR #1798
- #1765 show both alias and selector in error message -- see PR #1766
- #1764 add space to the left and right of every value in @TextReport -- see PR #1767
- #1759 upgrade to Selenium 4.1.3
- #1755 disable content encoding when downloading files via proxy -- see PR #1756
- #1746 show expected attribute in error message
- #1746 add examples of custom conditions described in https://github.com/selenide/selenide/wiki/Custom-conditions
- #1748 fix automatic module name in generated binaries
- fixed firefox factory to allow user to replace configs for downloads
- Bump webdrivermanager from 5.0.3 to 5.1.0
- #1733 Workaround for CDP issue with Firefox 97: SeleniumHQ/selenium#10345
- #1736 Bump browserup-proxy-core from 2.1.3 to 2.1.4
- #1611 Selenide is built with Java17, but still can be run on Java8 (with a help of Jabel)
- #1731 re-enable using soft assertions in TestNG @Before* and @After* methods -- see PR #1732
- #1729 Bump nettyVersion from 4.1.73.Final to 4.1.74.Final
- #1722 add support for custom duration in
switchTo().frame()
-- thanks @donesvad for PR #1722 - #1650 add methods
Selectors.byTagAndText
andSelectors.withTagAndText
-- thanks Maurizio Lattuada for PR #1651 - #1723 bugfix: ignore newlines leading/trailing spaces in
byTextCaseInsensitive
-- see PR #1724 - #1715 add "webdriver create" and "webdriver close" lines to Selenide report -- thanks Petro Ovcharenko for PR #1715
- #1433 fix overriding default timeout for Selenium http client
- #1705 avoid duplicate wrapping of ElementNotFound error -- see PR #1706
- #1714 add support for BEARER token authentication
- #1719 upgrade to Selenium 4.1.2 -- see https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
- #1656 Selenide doesn't throw an exception if
selenide.remote
is set, but empty -- thanks Boris Osipov for PR #1663
- #1702 Ignore whitespaces for filename in Content-Disposition header -- thanks Yevgeniy Mikhailov for PR #1702
- #1703, #1433 override default timeouts for remote webdriver -- thanks Irina Styazhkina for PR #1673
- #1589 add "" to most of the Selenide assertion errors -- see PR #1676
- add locator to some Selenide error messages
- #797 replace
$$.iterator()
by$$.asDynamicIterable()
and$$.asFixedIterable()
-- see PR #1688 - #1646 fix SoftAssert listener to avoid failing the test if soft asserts are disabled -- see PR #1680
- #1661 Loss of error messages after soft assert fail -- see PR #1679
- #372 [feature restored] avoid soft asserts for @Test method with "expectedExceptions" attribute -- see PR #1685
- #1682 Bump testng from 7.4.0 to 7.5
- #1678 upgrade to BrowserUpProxy 2.1.3
- #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
- #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
- #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
- Add workaround for Maven users to avoid occasional using Selenium 3 transitive dependencies
- #1623 remove occasional JUnit dependency from published selenide artifact
- 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)
- #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()
andancestor()
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
- #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)
- upgrade to WebDriverManager to 5.0.2
- exclude docker-java and few other dependencies
- #1551 Fix NoClassDefFoundException for StringUtils
- upgrade to WebDriverManager to 5.0.1 -- thanks to Anil Kumar Reddy Gaddam for PR #1547
- #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 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
andAnd
conditions work correctly with non-existent element -- thanks to Evgenii Plugatar for PR #1539 -
Or
andAnd
conditions support PECS principle in ctor, no longer allow empty list in ctor -- thanks to Evgenii Plugatar for PR #1542 - #1541 removed deprecated
Condition
methodapplyNull()
and renamedCollectionCondition
applyNull()
method -- thanks to Evgenii Plugatar for PR #1544
- #1528 fix "exe" or "dmg" file download in Chrome - see PR #1529
- #1508 add check
webdriver().shouldHave(numberOfWindows(N))
-- thanks to Oleg Berezhnoy for PR #1511
- #1500 forbid calling
switchTo().innerFrame()
without parameters -- see PR #1509 - #1435 add report when switching between frames -- thanks to Pavel Fokin for the PR
- #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 ifConfiguration.screenshots == false
.
- #1474 add workaround for NPE in RemoteWebElement.isDisplayed() -- see PR #1498
- #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
- Add mime type "binary/octet-stream" to download binary files in FireFox
- #1479 make it possible to check an alert before downloading a file -- see PR #1481
- #1482 Add support for
Condition.textCaseSensitive
for selected options inselect
element -- thanks to Oleg Berezhnoy - #1380 Add selectors
byTextCaseInsensitive
andwithTextCaseInsensitive
-- 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
- #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
- #1456 upgrade to WebDriverManager 4.4.1 -- thanks to Anil Kumar Reddy Gaddam
- #1454 Add ability to navigate to absolute browser internal urls -- thanks to Aliaksandr Rasolka
- upgrade to WebDriverManager 4.4.0
- #1451 migrate 'maven' plugin to 'maven-publish'
- #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
- #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
- #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
- #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
- #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
andor
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
- #1360 make SelenidePageFactory even more customizable
- #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
- #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
-
#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
- #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
- #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
- #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
- 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
- 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
- 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)
- 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
- upgraded to WebDriverManager 4.2.0
- upgraded commons-compress to v1.20 because of security issue https://snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-460507
- upgraded org.rauschig:jarchivelib to v1.1.0
- Upgrade commons-compress to 1.20 because previous versions have security issue https://snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-460507
- UPD The upgrade didn't work :)
- #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)
orswitchTo(window)
orswitchTo(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
- #1235 escape downloads path on Windows
- #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
- #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
Full list: 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 changelog
- #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 changelog
- #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 "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 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 the 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()
totakeScreenShotAsFile()
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()
andassertNoJavascriptErrors()
-
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 clean up 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 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()
andforward()
- 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 Jenkins, 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
andexactTextCaseSensitive
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 conditionmatchesText
for matching elements by regex