A release with an intentional breaking changes is marked with:
-
[breaking] you probably need to change your code
-
[minor breaking] you likely don’t need to change your code
-
Changes
-
Bumped deps. (@lread)
-
#676: Fix new driver creation so that it sidesteps some underlying Firefox race conditions and improves CI test stability. (@dgr)
-
#679: Add
new-window
function that exposes WebDriver’s New Window endpoint. (@dgr) -
#682: Fixed a bug in
fill-human-multi
to correctly callfill-human
rather thanfill
. (@dgr)
-
-
Changes
-
#559: Create
query-from
andquery-all-from
as replacements forchild
andchildren
. Rewrite logic such thatq
parameter allows for vector syntax similar toquery
andquery-all
. Deprecatechild
andchildren
. (@dgr) -
#559: Make
get-active-element
a public API. This was previously private. (@dgr) -
#559: Deprecate use of
:active
withquery
and other APIs that usequery
under the hood. (@dgr) -
#629: Added
fill-human-active
as a convenience function that fills the currently active input usingfill-human-el
. (@dgr) -
#642: Add
driver-type
to retrieve driver type keyword. (@dgr) -
#644: Deprecate
when-predicate
andwhen-not-predicate
macros. See docstrings for guidance on alternatives. These will may be removed from the API at the next release that contains breaking changes. (@dgr) -
#647: Fix logic bug in
intersects?
. Added tests to test suite. (@dgr) -
#649: When supplied a vector argument for
q-text
,fill-multi
andfill-human-multi
now fill fields in the order that fields appear in the vector. Previously, the order was not guaranteed. (@dgr) -
#657: Make
set-<xyz>-timeout
functions resilient to reasonable non-integer timeouts (e.g., rationals, doubles, etc.). (@dgr) -
#663:
query
throws a more accurate exception with a more accurate error message when provided with an empty query vector. (@dgr) -
#666: Previously, in some error conditions, Etaoin would throw a very generic
clojure.lang.Exception
object. Some of those cases have been replaced by throwing a map with Slingshot, providing more information about the problem. (@dgr) -
#668: Throw an exception for unknown
:fn/*
keywords in map queries.
-
-
Docs
-
#656: Correctly describe behavior when query’s parameter is a string. The User Guide and
query
doc strings say that a string passed toquery
is interpreted as an XPath expression. In fact,query
interprets this as either XPath or CSS depending on the setting of the driver’s:locator
parameter, which can be changed. (@dgr)
-
-
Quality
-
Minor breaking
-
#615: Etaoin now requires a minimum of JDK11 and Clojure 1.10 (@lread)
-
#612: Remove all support for long obsolete and long untested PhantomJS (@lread)
-
#467: Move to W3C WebDriver spec. (@lread)
-
The impetus was Firefox no longer supporting legacy
:capabilities
syntax. The breaking impact was on Chrome/Edge, when in "w3c mode" it will fail on WebDriver endpoints where there is a viable w3c alternative. This means some custom Chrome specific fns should now be expressed as w3c WebDriver actions. The following Chrome-specific fns have been deleted:-
mouse-btn-down
-
mouse-btn-up
-
with-mouse-btn
-
mouse-move-to
(was also available in Firefox) -
mouse-click
-
right-click
-
left-click
-
touch-down
-
touch-move
-
touch-up
-
-
Remove internal support for undocumented
:desired-capabilities
. The implementation was either ultra legacy or misunderstood legacy APIs.
-
-
-
Other changes
-
bump all deps to current versions (@lread)
-
Add new fns that more lightly abstract W3C WebDriver Spec (as part of #467 API review sweep) (@lread)
-
get-timeouts
- as alternative toget-*-timeout
-
set-timeouts
- as alternative toset-*-timeout
-
get-element-rect
- as alternative toget-element-size
,get-element-location
-
get-element-rect-el
- as alternative toget-element-size-el
,get-element-location-el
-
get-window-rect
- as alternative toget-window-size
,get-window-position
-
set-window-rect
- as alternative toset-window-size
,set-window-position
-
-
Review tests and add some missing coverage (as part of #467 API review sweep) (@lread)
-
#552: Add support for wide characters to input fill functions (@tupini07)
-
#517: Properly cleanup after failed webdriver launch (@lread)
-
#603: Add
:fn/index
as alias for:index
in map syntax (@dgr) -
tests
-
docs
-
Review docs for spellos, punctuation, clarity (@lread)
-
#534: better describe
etaoin.api/select
and its alternatives (@lread) -
#536: user guide examples are now all os agnostic and CI tested via test-doc-blocks on all supported OSes (@lread)
-
#602: Document all
:fn/*
query pseudo-functions in a definitive list (@dgr) -
#522: Describe how to get other common properties in docstrings (@lread)
-
-
-
#503: Address Clojure interop issue introduced by new Thread/sleep signature in JDK 19 (@lread)
-
#513: Fix rendering of exception when used from REPL (@lread)
-
bumped Etaoin dependencies (@lread)
-
docs:
-
#447: Describe testing without a display in the user guide, including a new requirement for a windows manager when using a virtual display on Linux (@lread)
-
#507: The current version of babashka, which is the only one we support, no longer requires the a dependency to the babashka spec.alpha fork to use the Etaoin ide feature. Tests and docs updated accordingly. (@lread)
-
Minor Breaking Changes
-
#412: Rename
etaoin.keys/num-.
toetaoin.keys/num-dot
. (@lread)
The symbolnum-.
is technically an invalid Clojure symbol and can confuse tooling.
A grep.app fornum-.
found Etaoin itself as the only user of this var. If your code usesetaoin.keys/num-.
, you’ll need to rename it toetaoin.keys/num-dot
. -
#471:
etaoin.api/defaults
keyword:path
renamed to:path-driver
to match keyword used in driver options. (@lread) -
#430: Declare the public API. (@lread)
We made what we think is a good guess at what the public Etaoin API is. The following namespaces are now considered internal and subject to change:old namespace new internal namespace etaoin.client
etaoin.impl.client
etaoin.driver
etaoin.impl.driver
etaoin.proc
etaoin.impl.proc
etaoin.util
etaoin.impl.util
etaoin.xpath
etaoin.impl.xpath
etaoin.ide.api
etaoin.ide.impl.api
etaoin.ide.spec
etaoin.ide.impl.spec
The following vars are now considered internal and subject to change:
namespace var etaoin.api
default-locator
dispatch-driver
find-elements*
format-date
get-pwd
join-path
locator-css
locator-xpath
make-url
make-screenshot-file-path
postmortem-handler
process-log
proxy-env
use-locator
with-exception
with-locator
etaoin.dev
build-request
group-requests
log→request
parse-json
parse-method
process-log
request?
try-parse-int
etaoin.ide.flow
all except for:
run-ide-script
etaoin.ide.main
all except for:
-main
If we got this wrong your code will fail, you will tell us, and we can discuss.
Other Changes
-
#413: Etaoin now exports a clj-kondo config to help with the linting of its many handy macros (@lread)
-
#357: Add support for connecting to a remote WebDriver via
:webdriver-url
(thanks @verma for the PR and @mjmeintjes for the example usage!) -
#355: Add support for W3C WebDriver print to PDF feature (@lread)
-
#466: WebDriver process output can now also be directed to console (@lread)
-
#468: Failed WebDriver process launch can now be automatically retried (@lread)
-
#453: The
etaoin.api/with-<browser>
macros no longer requireopts
to be specified. This makes the advantage of neweretaoin.api2/with-<browser>
macros maybe less obvious. That said, for Etaoin users who have adopted and prefer the api2 versions, they are still there, but no longer documented in the user guide. (@lread) -
#383: Drop testing for Safari on Windows, Apple no longer releases Safari for Windows (@lread)
-
#388: Drop testing for PhantomJS, development has long ago stopped for PhantomJS (@lread)
-
#387: No longer testing multiple key modifiers for a single webdriver send keys request (@lread)
-
#402: Only send body for webdriver
POST
requests to appeasesafaridriver
(@lread) -
#403: The
select
fn now clicks on theselect
element before clicking theoption
element to appeasesafaridriver
(@lread) -
#432: Switched from
project.clj
todeps.edn
. This will allow for easier testing of unreleased versions of Etaoin via git deps. It also unconvered that our minimum Clojure version was 1.10, instead of the advertised v1.9. Fixed. (@lread) -
#455: Automatically create specified parent dirs for screenshots (@lread)
-
#469: Include WebDriver process liveness in http client exception (@lread)
-
Docs
-
Internal quality
-
#367: Use actions to fix double-click (@igrishaev)
-
#365: Improve status messages when waiting (@fancygits)
-
Add v2 api (@igrishaev)
-
Fix user-agent functions (@igrishaev)
-
Add user-agent functions to api (@igrishaev)
Breaking Changes
-
#111: the driver instance is now a map instead of an atom. (@Uunnamed)
Breaking changes are never embarked on lightly but we felt it important to transition to more a more idiomatic use of Clojure.
All the internal functions that used to modify the driver atom now just return a new version of a map. If you have
swap!
or something similar in your code for the driver, please refactor your code before you update.
Other Changes
-
#317: Add a description of the trouble with chromedriver (@Uunnamed)
-
#307: update examples for docker and remote connection (@Uunnamed)
-
#315: Add :fn/has-string && return old version has-text (@Uunnamed)
-
#311: Fix typos - headless (@nfedyashev)
-
#303: Refactoring remote connection capabilities (@Uunnamed)
-
#247: Fix reflection warning && indent project.clj (@Uunnamed)
-
#244: Auto release (@igrishaev)
-
#242: Add release tasks (@igrishaev)
-
Readme updated
-
Add Dockerfile && fix test
-
#223: Use dir-img and dir-log if passed (@anthonygalea)
-
#230: Move driver installation part and typo fix (@ghufransyed)
-
#228: Fix syntax error in docs (@AndreaCrotti)
-
Switch to codox for generating docs