如何获得浓缩咖啡中的元素列表?

时间:2015-06-30 12:00:56

标签: java android selenium android-espresso

我正在尝试使用espresso框架自动化一个Android原生应用程序,我找不到如何获取元素列表的方法。 (例如,我需要选中页面上的所有复选框) 在硒中,我可以这样做:

elements = self.driver.find_elements_by_xpath("//xpath")
for element in elements:
    //do stuff

1 个答案:

答案 0 :(得分:0)

当我在espresso中使用时,可以一次只对一个元素执行一个动作。我想我无法按ID或类名或其他方式获取元素列表。因此,如果我们将容器设为RecyclerView,我们就可以在循环中对其子元素执行操作。像这样:

for (int i = 0; i <= num; i++) {
            onView(withId(R.id.result)).perform(RecyclerViewActions.actionOnItemAtPosition(i, click()));
        }

我们可以得到多少孩子:

 public int getRecyclerViewChildCount(int matcher) {
        final int[] count = {0};
        onView(withId(matcher)).perform(new ViewAction() {
            @Override
            public Matcher<View> getConstraints() {
                return isAssignableFrom(RecyclerView.class);
            }
            @Override
            public String getDescription() {
                return "getting child count";
            }
            @Override
            public void perform(UiController uiController, View view) {
                RecyclerView rv = (RecyclerView) view;
                count[0] = rv.getChildCount();
            }
        });
        return count[0];
    }

但是,例如,如果我们处理搜索结果并且结果是按部分加载的话,这将是问题。所以我们可以在第一部分执行点击。

但我猜想的更容易的方法就是指定你想要执行的子元素数量点击并捕获PerformException如果指定的数字更大:

try {
    int count = 50;// specify number of child elements in RecycleView you want to click
    for (int i = 0; i <= count; i++) {       
    onView(withId(R.id.result)).perform(RecyclerViewActions.actionOnItemAtPosition(i, click()));
            }
            }catch(PerformException e){}//if argument is greater then files in search result.