I'm not quite happy with the way the navigation bar title is found. It appears to be using the view model rather than the actual view and so passes before the view is on screen.
We can now get a window driver for the main window from the application driver, and a navigation driver from the application driver (which just delegates to the window driver).
abstract class. We should be careful what goes in here. We don't want it to do too much.
This commit has just enough work to get the test compiling but failing. I'm taking a different approach here; instead of initialising drivers directly, I'm starting with a new top level driver for the application and drilling down into different elements, similar to how UIAApplication works in UIAutomation.
fixtures that can be loaded from within the tests. This revealed two bugs; one with the hit testing of taps - the centre point of a view needs to be relative to its origin, not the window - and also with tagged view location - the tagged view finder needs the immediate parent which is no longer the window, but the container view.
probes to poll for the view we want to interact with.
…lify the way matchers can be generated for drivers.
All assertions (and eventually, all actions) will be implemented through pollers which ensures we can assert and perform actions against views asynchronously.
where they can be checked periodically until they are satisfied. This change drove out the need to re-introduce AKSingleViewFinder as it has different requirements to be satisfied as a probe than AKRecursiveViewFinder. A convenience method on AKRecursiveViewFinder returns itself wrapped in a single view finder which makes this a bit nicer to use than before.
…terface, rather than using a criteria object.
asynchronous matcher calls to force us to implement asynchronous probing of UI elements.
implement both AKViewFinder and AKViewSelector if they wish.
tries to find subviews from a root view selector using special Criteria objects. The KeyValue criteria is a simple low-level criteria that uses KVC to check object attributes and will probably fulfil a lot of different matching requirements.
… that we cannot have drivers depend on concrete UIView instances, as they may not be available at the time the driver is created. We will need to work towards some kind of asynchronous probing for views but we can get part of the way there by having drivers depend on an object that implements the AKViewSelector protocol. A couple of implementations are provided so far; one that simply wraps an actual known UIView that we know exists at runtime, one that finds a subview using its tag and one that finds the main window.
…aton protocol, which we can implement using our UITouch/Event synthesis categories.
Project bootstrap, a walking skeleton and a simple implementation.