Using inRoot to target non-default windows
https://code.google.com/p/android-test-kit/wiki/EspressoSamples#Using_inRoot_to_target_non-default_windows
onView(withText("South China Sea")) .inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))) .perform(click());
上記の方法でもToast表示のチェックは行えますが、「non-default windows」であってToastの指定ではありません。
ということで、自作してしまいましょう。
ToastはWindowManager.LayoutParams.TYPE_TOASTというパラメータを持っています。
これは表示するLayerを指定するものです。
次はToast Layerを指定するMatcherのサンプルプログラムです。
/** * Matcher that is Toast window. */ public static Matcher<Root> isToast() { return new TypeSafeMatcher<Root>() { @Override public void describeTo(Description description) { description.appendText("is toast"); } @Override public boolean matchesSafely(Root root) { int type = root.getWindowLayoutParams().get().type; if ((type == WindowManager.LayoutParams.TYPE_TOAST)) { IBinder windowToken = root.getDecorView().getWindowToken(); IBinder appToken = root.getDecorView().getApplicationWindowToken(); if (windowToken == appToken) { // windowToken == appToken means this window isn't contained by any other windows. // if it was a window for an activity, it would have TYPE_BASE_APPLICATION. return true; } } return false; } }; }
0 件のコメント:
コメントを投稿