zoukankan      html  css  js  c++  java
  • espresso Seekbar

     1 package test.utils;
     2 
     3 import android.support.test.espresso.PerformException;
     4 import android.support.test.espresso.ViewAction;
     5 import android.support.test.espresso.action.CoordinatesProvider;
     6 import android.support.test.espresso.action.GeneralSwipeAction;
     7 import android.support.test.espresso.action.Press;
     8 import android.support.test.espresso.action.Swipe;
     9 import android.support.test.espresso.util.HumanReadables;
    10 import android.view.View;
    11 import android.widget.SeekBar;
    12 
    13 import static android.support.test.espresso.action.ViewActions.actionWithAssertions;
    14 
    15 /**
    16  * Created by qiantao on 17-10-19.
    17  */
    18 
    19 public class SeekBarActions {
    20     public static ViewAction scrubSeekBarAction(int progress) {
    21         return actionWithAssertions(new GeneralSwipeAction(
    22                 Swipe.SLOW,
    23                 new SeekBarThumbCoordinatesProvider(-1),
    24                 new SeekBarThumbCoordinatesProvider(progress),
    25                 Press.PINPOINT));
    26     }
    27 
    28     /**
    29      * -1 表示起始位置
    30      */
    31     private static class SeekBarThumbCoordinatesProvider implements CoordinatesProvider {
    32         int mProgress;
    33 
    34         public SeekBarThumbCoordinatesProvider(int progress) {
    35             mProgress = progress;
    36         }
    37 
    38         private static float[] getVisibleLeftTop(View view) {
    39             final int[] xy = new int[2];
    40             view.getLocationOnScreen(xy);
    41             return new float[]{(float) xy[0], (float) xy[1]};
    42         }
    43 
    44         @Override
    45         public float[] calculateCoordinates(View view) {
    46             if (!(view instanceof SeekBar)) {
    47                 throw new PerformException.Builder()
    48                         .withViewDescription(HumanReadables.describe(view))
    49                         .withCause(new RuntimeException(String.format("SeekBar expected"))).build();
    50             }
    51             SeekBar seekBar = (SeekBar) view;
    52             int width = seekBar.getWidth() - seekBar.getPaddingLeft() - seekBar.getPaddingRight();
    53             LogUtils.i("seekBar.getProgress():" + seekBar.getProgress());
    54             double progress = mProgress == -1 ? seekBar.getProgress() : (mProgress * seekBar.getMax() / 100);
    55             int xPosition = (int) (seekBar.getPaddingLeft() + (width * progress / seekBar.getMax()));
    56             float[] xy = getVisibleLeftTop(seekBar);
    57             return new float[]{xy[0] + xPosition, xy[1]};
    58         }
    59     }
    60 }

    检查Mtacher

        public static Matcher<View> withSeekBarProgress(final int expectedProgress) {
            return new BoundedMatcher<View, SeekBar>(SeekBar.class) {
                @Override
                public void describeTo(Description description) {
                    description.appendText("expected: ");
                    description.appendText("" + expectedProgress);
                }
    
                @Override
                public boolean matchesSafely(SeekBar seekBar) {
                    LogUtils.i("seekBar.getProgress():" + seekBar.getProgress());
                    return seekBar.getProgress()*100/seekBar.getMax() == expectedProgress;
                }
            };
        }

    用法

    for (int i = 0; i <= 100; i += 50) {    
      onView(seekBarViewMatcher).perform(SeekBarActions.scrubSeekBarAction(i));
      onView(seekBarViewMatcher).check(matches(withSeekBarProgress(i))); }
  • 相关阅读:
    Python 7步机器学习
    STL容器-- map and multimap 用法
    STL容器-- forward_list 用法
    STL容器-- fixed-size array 用法
    STL容器-- deque 用法
    网站502与504错误分析
    git将一个分支的某个文件合并到当前分支
    阿里云RDS上用mysqldump导入导出
    mysqldump具体应用实例
    mysql的导入导出工具mysqldump命令详解
  • 原文地址:https://www.cnblogs.com/guhan121/p/7691634.html
Copyright © 2011-2022 走看看