Please clarify the future of this project in light of UIAutomation being deprecated by XCode 7
Hey All,
We're about to undertake a major rewrite of our UI tests and until a few days ago we were going to use illuminator. Then we discovered that UIAutomation is deprecated by XCode7. In light of that, can you shed some light on the future of illuminator? Are you going to allow for the same syntax on top of the new framework?
Reference: https://developer.apple.com/library/prerelease/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc7_release_notes.html (search for "Deprecation").
Thanks!
We've been discussing this issue fairly heavily since WWDC in June, when Apple first announced this would happen. Within the past week, Apple has started closing radar bugs that we've filed against UIAutomation, citing that the project is "no longer supported".
Obviously, there is no future for this project in its current form -- no way to run it once Apple's UIAutomation goes away. We are hoping to retain (in XCTest) some of the major conveniences that we've written; the purpose of Illuminator is to make testing reliable, repeatable, and above all easy for developers to do.
We have plans to migrate the following features into the new XCTest environment:
- The bridge
- The extensions, as necessary
We are aware of the following challenges in migrating Illuminator features into XCTest:
- The ability to run tests by tag doesn't exist in XCTest, unless you create one scheme per tag (and this doesn't scale)
- It's not clear whether XCTest's ability to record UI Interactions will be easier to maintain than Illuminator's system of screens and actions. Will Illuminator's
waitFor*functions still be relevant? Will Illuminator's ability to share tests between different iPhone and iPad app implementations still be relevant? My feeling is that they will be.
Now that Xcode 7 is finally out, we are able to start looking into these and other issues.
The short answer is that we have a lot invested (in terms of tests) in Illuminator, and our current plan is to support Illuminator as long as Apple supports UIAutomation. Whether our extensions to XCTest will be part of this project or another Apache-licensed project is currently unclear, but in either case we intend to provide a migration guide for all the features that we have.
We are currently blocked due to Apple's implementation of XCUIElement, which appears to call XCTAssert inside various properties (instead of throwing exceptions). OpenRadar issue is here, and forum thread started here.
This issue would affect any & all possible XCTest-based frameworks written in Swift or Objective C, as I have been unable to find a workaround -- avoiding the error since I can't catch it.
Now that iOS 8 support is being dropped in most places, a lot of the integration headaches we were having have disappeared. Swift 2.3 didn't hurt either.
I'm pleased to (finally) announce that we have a working Swift implementation (minimal for now) of Illuminator, in #99, which is now passing CI
The current roadmap:
- Illuminator's fuzzy selector features are deprecated. Apple's new offering isn't perfect, but Illuminator's is impossible due to XCTest asserts and the ridiculous amount of time (500ms or more) it takes to search a tree of just a few dozen elements.
- Printing out copy/pastable code to access the elements currently visible on the screen will need to be provided by the unsupported
debugDescriptioncall. Our needs are minimal here, so it should be stable in the long term even if the parsing needs periodic updating. That said, it will most definitely be a hack until further notice. - The automation bridge is currently crashing, but was working in Swift 2.0
- I'm not sure how we're going to do screenshots yet, but there are a few options
- There is no more ruby test runner, although if you want JUnit output you can turn to
xcpretty. We may absorb some of that functionality, depending on what's necessary for screenshot support
Probably other things too.
We are operational in XCode 8, btw. I haven't tested 7.x