使用Espresso

时间:2016-08-30 08:26:24

标签: android android-espresso

我对Espresso很新,我正在尝试使用自定义适配器测试ListView中的插入,删除和修改。

插入很简单,我只需添加一个新元素并在ListView中找到它以检查它是否已被添加。

但问题是删除,这就是我要做的事情:

  1. 点击第一行,点击删除按钮。
  2. 确认删除。
  3. ¿我怎样才能确保元素已被移除?
  4. 我的意思是,我认为在删除之前我需要知道项目的内容,然后再检查该行是否不存在。

    我该怎么办?也许我没有在正确的道路上执行此测试,我需要以不同的方式进行测试,但我找不到任何信息。

    @Test
    public void deleteEdition() {
        startActivityWithintent();
    
        // push delete button and delete
        onData(anything()).inAdapterView(withId(R.id.listEdition))
                .atPosition(1)
                .onChildView(withId(R.id.imageDelete))
                .perform(click());
    
        // confirm delete
        onView(withId(R.id.buttonDelete)).check(matches(isDisplayed()));
        onView(withId(R.id.buttonDelete)).perform(click());
    
    
        // HOW CAN I CHECK THE ELEMENT DOES NOT EXISTS?
        // onView(withId(R.id.listEdition))
        //        .check(matches(not(withText(????))));
    }
    

    提前致谢。

2 个答案:

答案 0 :(得分:2)

尝试搜索是否没有包含其子项内某个文本的视图,如下所示:

onView(withId(R.id.listEdition))
.check(matches(not(hasDescendant(withText("should not exist")))));

或如果这不起作用,请搜索字符串的部分内容。

onView(withId(R.id.listEdition))
.check(matches(not(hasDescendant(withText(containsString("should not exist"))))));

当我尝试在我的电脑上重现它时,它会起作用。

答案 1 :(得分:0)

将要删除的行的文本存储在属性中,例如“matchedText”

this.matchedText = null;
this.rowCounter = -1;

    onView(new Matcher<View>() {

        @Override
        public boolean matches(Object item) {
            boolean matches = withId(R.id.imageDelete).matches(item);
            if(matches){
                rowCounter++;
                if(rowCounter == 5){ // 5 is an example of the index you want to access     
                    View view = (View) item;
                    matchedText = ((TextView)view.getParent()).getText().toString(); // find the matching view by navigating to the right parent and child to get the text you need 
                    return true
                }
               return false;
            }
            return false;
        }

        @Override
        public void describeMismatch(Object item, Description mismatchDescription) {

        }

        @Override
        public void _dont_implement_Matcher___instead_extend_BaseMatcher_() {

        }

        @Override
        public void describeTo(Description description) {

        }
    }).check(matches(isDisplayed()));

点击删除按钮后,您可以通过以下代码找出该行是否真的被删除:

onView(withId(R.id.listEdition))
.check(matches(not(hasDescendant(withText(this.matchedText)))));