The Appium team is extremely proud to announce the release of Appium 1.5! Appium 1.5 has been in the works for over half a year, and we would like to share why it's such an important release for us. Appium 1.5 is primarily a technical rearchitecture. As the project grew from infancy through to 1.0 and beyond, the core team did their best to keep the code organized, to keep it easy for new contributors to come to the project, and to fix bugs and add features in a timely fashion. However, as is the case with many software projects, the time came when despite our best efforts, Appium's fundamental architecture was working against us, not with us. Given the relatively stable nature of the project in the 1.4.x series, we felt it was a good time to invest in the future velocity of Appium's development. When we began work on Appium 1.5 we had the following goals:
- Take a hard look at the current code organization and reconceptualize the relationships between different subsections of Appium with an eye to making distinctions clearer and concerns more separate.
- Leverage the NPM ecosystem's best practices and break Appium up into packages based on responsibility, maintenance, etc..., whenever appropriate.
- Standardize subprocess management. Appium is basically a combination API server and subprocess manager (we manage
selendroid, etc...), and so standardizing subprocess management makes our code cleaner and more readable throughout the project.
- Abstract common driver behavior: Appium's IOS support and Android support really derive from the same common interface, so we wanted to factor that interface out to reduce duplication of work and boilerplate across Appium's different drivers.
- Clean up our build process so that we are not using a handful of different build tools in different situations. Ensure we're running CI at the subpackage level to save time when releasing Appium.
- Create a more friendly architectural environment for new devs to contribute to Appium. Make sure that one type of change needs to happen in one place and that READMEs abound.
- ...and many more very specific technical goals. For more information on how Appium is now put together from a developer perspective, see our developer's overview.
Importantly, one of our goals was to not add new features, so we could be sure that our rewrite was doing its job without being clouded by the addition of new features. In essence, Appium 1.5 should work exactly the same as Appium 1.4.16, while being brand new under the hood. Of course, we couldn't keep ourselves from making a few tweaks here and there. As a result of the rewrite, various long-standing bugs to do with session handling were fixed, we deprecated a number of server arguments, and added the ability to launch an Android intent via uri. See the full release notes for more details, particularly the few breaking changes we decided to make with this release. Appium 1.5 has been out in beta with the open source community for a number of months and we've been actively fixing any issues with it, but being a full rewrite we do anticipate that there might be edge cases not yet uncovered by automated or manual testing, and so we urge caution before use in production CI. That being said, it's ready for you to pound on as hard as you can! Please report any Appium-related bugs at our open source issue tracker. For problems that happen only on Sauce Labs but not locally, contact Sauce support at email@example.com. To use Appium 1.5 on Sauce, simply update your desired capabilities to include an
appiumVersion of "1.5" (to automatically receive all patch releases on the 1.5 line), or "1.5.0" (to target this release specifically, and update manually to, e.g., 1.5.1 in the future). For more information about getting the right desired capabilities for your tests on Sauce, refer to our Platform Configurator.
What does 1.5 mean for the future of Appium? Quite a lot, actually! Despite not having many new features, it is a significant turning point in the history of the project and sets us up for years to come. Here's a few things we're excited about moving forward, based on the work we've done with Appium 1.5:
- Clearing away technical debt so that new drivers may be added swiftly and effectively. The landscape of mobile automation technologies is always changing. Appium wants to be the single API, the single front-end for all of those technologies. We began with Apple's UIAutomation, added Google's UiAutomator and then support for Selendroid. But we won't stop there. Support for Apple's new XCUITest framework is already in beta in the open source community with appium-xcuitest-driver, and work is underway to add support for Google's new UiAutomator 2 framework into Appium as well.
- Fewer bugs! Far and away the biggest win from the rewrite is moving from an ugly callback-based control flow pattern to the elegant and easy-to-read `async/await` pattern. We look forward to fewer hard-to-understand regressions as a result.
- Beginning to strictly follow the SemVer standard of naming releases. We hope you all will agree that having a predictable way to know when it is OK to upgrade Appium versions is more important than following the tradition of saving major version releases for "huge" new functionality. As such, you might see v2.0 or even v3.0 of Appium out sooner than you expect: this doesn't necessarily mean there will have been as many changes as between 1.0 and 1.5 -- just that we have made some breaking change(s) along the way.
And as always, you can check out the open source Project Roadmap to see what we're thinking about working on next, and see what we're currently getting ready to release on our milestones page. We are very excited about the future of the Appium Project and at Sauce Labs we are committed to its continued development. Stay tuned for what's to come. Happy testing!