Dear Users,
I've marked the Github repo as unmaintained. It's been misleading not to include mention there and here that this project is unmaintained.
tl;dr If someone wishes to continue this project, I recommend you fork it, _rename_it_, re-version it, and deploy it with an appropriate, unique group id (unlike what I did several years ago by using clj-webdriver as a top-level group).
I am not currently maintaining this project and I have no plans to do so. I don't use this library for personal projects or at work, and it has been outside the realm of problems that I've been working on for some time. I also have an immense number of responsibilities between work, church, family, and local community obligations, and this project can't compete with those priorities.
The code and artifacts as they exist today are the final release of clj-webdriver.
Since the code is licensed with an open source license, is hosted on Github, and is used by many people, I will leave it where it is (on Github and Clojars) in perpetuity. If one of those services is discontinued, I will do my best (but make no promises) to make the source code or artifacts available elsewhere.
Rich's keynote struck a chord with me. I had plans in clj-webdriver to trim the fat, make the API more focused, and possibly provide alternative API's (e.g., a monadic one) to showcase what can be done with functional approaches. The "trimming of fat" would have resulted in breaking changes from the current minor version to the next, and Rich's point that if you're going to make breaking changes "you might as well change the name" immediately resonated with me concerning this project.
Since the current stable release of this library does not pull in a version of Selenium-WebDriver and users are required to specify their own version of that dependency, this library will continue to "function" as long as Selenium-WebDriver's API's remain compatible with the parts of it this project uses.
This kind of library presents a number of challenges that I'd like to highlight for anyone considering forking it and continuing to develop it in its current form.
Firstly, it's a simple wrapper around the Java API for Selenium-WebDriver. Other Selenium-WebDriver projects are actual re-implementations of the underlying Wire API and provide unique, idiomatic high-level API's that leverage their languages' strengths. Clj-webdriver does leverage some Clojure idioms, but it's debatable whether it's worth maintaining wrappers around large portions of the Selenium-WebDriver API. I think it would probably be a wiser use of time to make a library that focuses on providing pure functions that would compose well with the Java API that's already well-maintained by the Selenium-WebDriver community, instead of providing a wrapper function for every possible Selenium-WebDriver feature.
Secondly, Selenium-WebDriver is most often used as a testing tool. If you're writing a test suite for use by a QA team, then the use of Clojure is likely to be a tough sell compared to using something like Ruby for such tests. If devs are responsible for and maintain such a suite, then using Clojure might be more compelling. It's often a way to introduce people to Clojure, which is great. However, folks coming to clj-webdriver as relatively newer Clojure devs will soon outgrow the lessons that clj-webdriver can teach them (if they're using this as a learning experience), and so potential future maintainers of this project often (like myself) move on to other parts of their Clojure stack. More often than not, unless your job is maintaining a set of clj-webdriver tests, those other parts of the stack are much more critical to writing applications and are not limited to the narrow scope of testing web applications in graphical browsers, and so they necessarily take more of peoples' attention.
As a maintainer, this project, as a wrapper around the Java Selenium-WebDriver API, is not one that you can ever finish. Even if it were re-implemented to focus on the underlying Wire API, which is less of a moving target, browser evolution necessitates ongoing changes. So unless, as a maintainer, you're actively watching browser development, the Selenium-WebDriver project, you write Clojure, and are willing to test clj-webdriver against the different browsers and versions that Selenium-WebDriver targets, you're going to have a difficult time maintaining this project well.
So I'll reiterate, I think there are definitely nuggets of functionality that clj-webdriver has that could be packaged as a library of pure functions, without any dependence or real connection to Selenium-WebDriver itself. That's a library that could be written to completion and provide value, without the pitfalls of ongoing maintenance that the wrapper approach necessitates. I encourage someone to write that library.
All that said, clj-webdriver is _easy_ compared to a lot of Java interop, and often for testing tools easy trumps other concerns. That's the final challenge of this library, that it represents something of a dissonance with the ongoing struggle for simplicity that becomes part of long-term Clojure developers' goals.
Regards,
Daniel