Espresso 自动化测试(八)- SeekBar的测试
用过UiAutomator的同学其实都应该清楚,SeekBar是一个相当大的痛点,因为我们能够做到最多的就是获取到SeekBar的坐标,再来点击相应的一个坐标。那么问题来了。我根本就不知道我点击的结果,更好的来讲就是我根本没办法精确的控制SeekBar
SeekBar的设置以及获取
其实SeekBar的设置以及获取跟我们前面文章Espresso 自动化测试(三)-获取文本内容有很多的相似。这里我们先看看我们的app的情况。这里我们为了简便,所以还是使用上一篇文章中ListView与ViewPager的栗子。
这个就是一个简单的SeekBar
我需要设置SeekBar的进度为90(默认为100),我需要如何操作。代码如下:
public int getProgress(Matcher<View> matcher) { final int[] progress = {0}; onView(matcher).perform(new ViewAction() { @Override public Matcher<View> getConstraints() { return ViewMatchers.isAssignableFrom(SeekBar.class); } @Override public String getDescription() { return "seekbar"; } @Override public void perform(UiController uiController, View view) { SeekBar seekBar = (SeekBar)view; progress[0] = seekBar.getProgress(); } }); return progress[0]; }
onView(withId(R.id.seekbar)).perform(setProgress(90));
以上就完成了SeekBar的设置了
下来我需要获取到SeekBar当前的大小,并且同TextView的SeekBar进行比较查看是否正确要如何做呢。
public int getProgress(Matcher<View> matcher) { final int[] progress = {0}; onView(matcher).perform(new ViewAction() { @Override public Matcher<View> getConstraints() { return ViewMatchers.isAssignableFrom(SeekBar.class); } @Override public String getDescription() { return "seekbar"; } @Override public void perform(UiController uiController, View view) { SeekBar seekBar = (SeekBar)view; progress[0] = seekBar.getProgress(); } }); return progress[0]; }
int progress = getProgress(withId(R.id.seekbar)); onView(withId(R.id.seekbarValue)).check(matches(withText(progress+"")));
结束语
Espresso 确实解决了很多UiAutomator中不能解决的问题,还有很多未发掘的内容。继续。。