Jac*_*cki 37 android android-espresso android-recyclerview
我有一个RecyclerView(R.id.recyclerView),其中每一行都有一个图像(R.id.row_image)和一个TextView.我想点击第一行中的图片.
我试过使用onData(..)但似乎没有用.
Gab*_*bor 78
onView(withId(R.id.recyclerView))
.perform(actionOnItemAtPosition(0, click()));
Run Code Online (Sandbox Code Playgroud)
将其包含在您的gradle脚本中:
dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}
Run Code Online (Sandbox Code Playgroud)
Sir*_*r0n 21
只是为了增加Gabor的答案(这是自Espresso 2.0以来的正确和完整答案).
使用espresso-contrib和RecyclerViews 时你可能会遇到问题(参见android-test-kit ticket).
解决方法是在espresso-contrib上面提到的依赖关系Gabor中添加此排除项:
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') {
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
Run Code Online (Sandbox Code Playgroud)
(这是一个答案,而不是对Gabor答案的评论,因为我还没有权利发表评论)
ari*_*d3r 16
Espresso 2.0已发布,更新日志包括以下内容:
新功能
- 意式咖啡的contrib
- RecyclerViewActions:处理与RecyclerViews的交互
我自己还没有对此进行测试,但是Thomas Keller 在G +上发布了一个简短的解释和一个带有必要视图匹配器的Gist的链接.
由于新
RecyclerViewAPI继承自ViewGroup而不是继承AdapterView,因此您无法使用EspressoonData()来测试使用此组件的布局.
我会附上代码,只是为了完整起见(注意:不是我的!所有功劳归于Thomas Keller)
ViewMatcher:
public class ViewMatchers {
@SuppressWarnings("unchecked")
public static Matcher<View> withRecyclerView(@IdRes int viewId) {
return allOf(isAssignableFrom(RecyclerView.class), withId(viewId));
}
@SuppressWarnings("unchecked")
public static ViewInteraction onRecyclerItemView(@IdRes int identifyingView, Matcher<View> identifyingMatcher, Matcher<View> childMatcher) {
Matcher<View> itemView = allOf(withParent(withRecyclerView(R.id.start_grid)),
withChild(allOf(withId(identifyingView), identifyingMatcher)));
return Espresso.onView(allOf(isDescendantOfA(itemView), childMatcher));
}
}
Run Code Online (Sandbox Code Playgroud)
样本用法:
onRecyclerItemView(R.id.item_title, withText("Test"), withId(R.id.item_content))
.matches(check(withText("Test Content")));
Run Code Online (Sandbox Code Playgroud)
您应该使用自定义ViewAction:
public void clickOnImageViewAtRow(int position) {
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(position, new ClickOnImageView()));
}
public class ClickOnImageView implements ViewAction{
ViewAction click = click();
@Override
public Matcher<View> getConstraints() {
return click.getConstraints();
}
@Override
public String getDescription() {
return " click on custom image view";
}
@Override
public void perform(UiController uiController, View view) {
click.perform(uiController, view.findViewById(R.id.imageView));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28531 次 |
| 最近记录: |