最近、AppiumのGitHub上でdroiddriverなるものを知りました。
https://github.com/appium/droiddriver
これ、どこから来ているのか気になっていたら、どうやらgooglesource上から来ている模様。
https://android.googlesource.com/platform/external/droiddriver
droiddriver_examplesを見てみたところ、このDroidDriverTestはActivityInstrumentationTestCase2を継承している模様。
ということは、ひとまずJUnit4の枠組みでも利用できますね。
BaseDroidDriverTest extends D2ActivityInstrumentationTestCase2 extends ActivityInstrumentationTestCase2
ここを見ると、どうやらDroidDriverはSDKとしてはAPI21が必要らしい。確かに、先ほどのGoogleのコードを追っても、4.4(KitKat)以降開発され、まだ正式なものとして出てはなさそう。ただ、手元でDroidDriverを継承したテストケースをconnectedAndroidTestで回すと、4.2.2の端末でも動作したので、OS自体はuiautomatorを提供するものになるのかな。
API18以上はuiautomator driverだし、17以下はinstrumentation driverだし。
これはuiautomatorを拡張したdriverなのかもしれないですね。
ちなみに、DroidDriverを使うには以下のようにclassSetUpをOverrideする必要があるみたい。
@Override
protected void classSetUp() {
ActivityUtils.setRunningActivitySupplier(new ActivityUtils.Supplier<Activity>() {
@Override
public Activity get() {
return getActivity();
}
});
DroidDrivers.init(DroidDrivers.newDriver(getInstrumentation()));
}
手元で軽くespresso向けのテストをDroidDriver使って動かしてみると動作しました。
先にあげたGitHubに記載されている例の中には、例えば以下のようなメソッドがあるので、DroidDriverはespressoの代替ではなく、uiautomatorをJUnitから操作する枠組みな気がしています。
UiElement find(Finder finder) {
// Note that we use on to ensure refreshUiElementTree() is called
// the 'find' method will not refresh the uielementtree
return DroidDrivers.get().on(finder);
}
ともあれ、少し追ってみようかな。