簡體   English   中英

NavigationView 中的 select 項目與 Espresso

[英]select item in NavigationView with Espresso

我有這段代碼

 private void setupDrawerLayout() {
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {

            final int itemId = menuItem.getItemId();

            switch (itemId) {
                case R.id.drawer_my_mixes:
                    replaceFragment(MyMixesFragment.newInstance());
                    drawerLayout.closeDrawers();
                    break;
                   and so on...

我想制作濃縮咖啡,點擊R.id.drawer_settings ,這基本上會打開一個名為 SettingsFragment 的片段。 我該怎么做呢? 我試過了沒有成功

private ViewInteraction navigateToSettings(){
    openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
    return onView(withText("Settings")).perform(click());

}

正確的方法是使用Espresso的onData函數。

onData(allOf(is(instanceOf(NavigationMenuItem.class)), ... )).perform(click());

但是NavigationMenuItem是不可訪問的,因為它是一個私有的嵌套類。

有待解決的問題https://code.google.com/p/android/issues/detail?id=187701可以找到解決方案。 去加一個星星吧;-)

openActionBarOverflowOrOptionsMenu()無法打開NavigationView。

對我而言,以下作品:

//Open NavigationView
Matcher<View> isImageButton = withClassName(is(ImageButton.class.getName()));
Matcher<View> isInToolbar = isDescendantOfA(withId(R.id.toolbar));
onView(allOf(isInToolbar, isImageButton)).perform(click());

//Click on item in NavigationView
onView(withText(R.string.logout)).perform(click());

該解決方案暫時對我有效,直到出現像user40797建議的更好的解決方案為止。

如何在NavigationView中選擇一個項目。

在您的程序包中:

public class NavigationViewTestHelper {

    public static Matcher<View> childAtPosition(
            final Matcher<View> parentMatcher, final int position) {

        return new TypeSafeMatcher<View>() {
            @Override
            public void describeTo(Description description) {
                description.appendText("Child at position " + position + " in parent ");
                parentMatcher.describeTo(description);
            }

            @Override
            public boolean matchesSafely(View view) {
                ViewParent parent = view.getParent();
                return parent instanceof ViewGroup && parentMatcher.matches(parent)
                        && view.equals(((ViewGroup) parent).getChildAt(position));
            }
        };
    }
}

在打開NavigationView后進行測試。

ViewInteraction navigationMenuItemView = onView(
                allOf(childAtPosition(
                        allOf(withId(R.id.design_navigation_view),
                                childAtPosition(
                                        withId(R.id.*your_navigation_view_id*),
                                        0)),
                        1), // Position of the element in the Navigation view.
                        isDisplayed()));

navigationMenuItemView.perform(click());

使用MiguelHincapieC響應,這對我有用:

onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());

希望能幫助到你:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM