Skip to main content

UIAutomator Redux: WebViews still opaque

Last time I wrote a quick review of Android's new UIAutomator tool. In that review I tried to cover it as a comparison between Android's JUnit and MonkeyRunner tools which it seems to be designed to bridge. One area I left out of my review was whether it provides deep access within a webView. This question was brought up by a Google+ user in the Android Developers' post notifying us all of the release of these new tools and I figured it deserved some investigation.

My expectation was that WebViews would remain opaque to the tool since its construction of the XML of a given view hierarchy seems like an extension of Hierarchy Viewer and thus shared its limitations. My experiment was to use the Netflix app since it is a well known app and is built making very heavy use of Android's WebView. Netflix does this so that they can deliver updates to devices through a single app rather than customizing their apps for multiple screen sizes. When I first bought my Samsung Galaxy Note phone, I was reminded of some of the pitfalls of developing apps with that assumption. Sometimes assumptions prove mistaken like that. While Netflix's assumption vis a vis WebView usage proved false, mine about UIAutomator's clairvoyance into WebViews was not.

The remainder of the words in this post belong to this simple screenshot:


  1. Hi Russell Collins,

    Is it possible to automate with robotium or android web driver for android web views ?



Post a Comment

Popular posts from this blog

Jenkins + Devices + AndroidJUnitRunner

New Android build system and test runner, same goose chase using undocumented features and hacks

As I've posted before, I am a big fan of Jenkins. It is extremely flexible, open source, and supported by a staggering array of plugins actively developed by engineers running over 100,000 instances of the server worldwide. With it's distributed node model, you can even build your own device cloud for hosting enterprise-scale automation, economizing hardware investments by sharing resources across multiple projects as well as speeding up automation by parallelizing test runs. I had been using a Jenkins-based system in the past to support instrumentation automation with Robotium quite happily. For the last couple years however, my work hasn't required that as much and I've found myself doing a lot more manual testing and using UiAutomator which didn't require a tight integration between the product codebase and the test code. As a result, I've been slow to adopt the…

UiAutomator and Watchers: Adding Async Robustness to UI Automation

"I'm looking over your shoulder... only because I've got your back." ~ Stephen Colbert
After my recent UiAutomator review a user brought up an important question about the use of UiWatcher. The watchers serve as async guardians of the test flow, making sure the odd dialog window doesn't completely frustrate your tests. Having a tool that automatically watches your back when you're focused on the functional flow of your tests is awesome. 100% pure awesomesauce. Since the API documentation on watchers is scant and the UI Testing tutorial on the Android dev guide doesn't cover their use in depth, I figured I should add a post here that goes over a simple scenario demonstrating how to use this fundamentally important UI automation tool.

In my example code below, I'm using uiautomator to launch the API Demo app (meaning run this against an Emulator built in API level 17 - I used the Galaxy Nexus image included in the latest ADT and platform tools). The te…

The Economics of Device Clouds in Continuous Integration

The rent is too damn high.
Okay, let's look at the topic of device clouds. Microsoft's recent purchase of Xamarin means that now Google, Amazon, and Microsoft (3 major cloud computing service providers) all have their own device clouds which they also lease time on to the public (well, Google's purchase of Appurify hasn't resulted in that yet but it's coming soon and is currently in Beta). That makes 3 major cloud players who also build mobile apps buying their own device clouds and renting their overhead to the public.

To me that's purely confirmation that if you intend to use real devices and you're a developer or a company that does a lot of development and testing of mobile apps, particularly on Android, you had better have your own cloud. If it were cheaper to rent than to own, why would those three major cloud providers buy existing device cloud as a service platforms? In reality, Google Ventures was the primary early investor in the Y-combinator-bas…