前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android UiAutomator获取视频播放进度的方法

android UiAutomator获取视频播放进度的方法

作者头像
FunTester
发布2019-10-08 16:53:37
6860
发布2019-10-08 16:53:37
举报
文章被收录于专栏:FunTesterFunTester

本人在使用android UiAutomator做测试的时候,有时候需要统计视频播进度,然后去断言上传的进度数据正确与否。具体的思路就是根据进度条的颜色区分,我选的红色,然后去计算各个点的数值,然后计算进度的百分比。

这是app的界面进度条的截图

下面是我两次获取到的数据。

下面是我的代码:

代码语言:javascript
复制
package student;

import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import com.android.uiautomator.core.UiObjectNotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.RemoteException;
import source.UiAutomatorHelper;
/**
* @author ··-·尘
* @E-mail:Fhaohaizi@163.com
* @version 创建时间:2017年8月18日 上午10:53:24
* @alter 修改时间:2017年9月7日 12:55:36
* 类说明:测试调试用例
*/
@SuppressWarnings("deprecation")
public class Student extends StudentCase{
    public static String jarName,testClass,testName,androidId;
    public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException, IOException, ParseException {
        jarName = "DemoStudent";testClass="student.Student";testName="testTest";
//        PerformanceThread.getInstance().start();//启动线程
        new UiAutomatorHelper(jarName, testClass, testName);//调试用例
//        PerformanceThread.key = false;//结束线程
    }
    public void testTest() throws InterruptedException, IOException, UiObjectNotFoundException, RemoteException {
        clickPiont(500, 500);//点击屏幕,显示播放进度条
        sleep(100);//休眠等待截图
        Bitmap bitmap = getBitmapByResourceId("com.genshuixue.student:id/view_video_coursede_control_seekbar");//获取播放空间的bitmap实例
        double percent = getVideoProgress(bitmap);
    }
}

下面是获取bitmap的方法

代码语言:javascript
复制
    //截取某个控件的图像
    public Bitmap getBitmapByResourceId(String id) throws UiObjectNotFoundException {
        Rect rect = getUiObjectByResourceId(id).getVisibleBounds();//获取控件的rect对象
        String path = screenShot("test");//截图
        Bitmap bitmap = BitmapFactory.decodeFile(path);//创建并实例化bitmap对象
        bitmap = Bitmap.createBitmap(bitmap, rect.left, rect.top, rect.width(), rect.height());//截取bitmap实例
        return bitmap;
    }

下面是获取进度的方法:

代码语言:javascript
复制
    //获取视频播放进度条
    public double getVideoProgress(Bitmap bitmap) {
        int height = bitmap.getHeight();
        int width = bitmap.getWidth();
        List<Integer> date = new ArrayList<Integer>();
        for (int i = 0;i < width; i++) {
            int color = bitmap.getPixel(i, height / 2);
            int red = Color.red(color);
//            output(red);
            date.add(red);
            }
        int date1 = 0,date2 = 0,date3 = 0,date4 = 0;
        int status1 = 0,status2 = 0;
        for (int i = 1;i < date.size() - 1;i++) {

            if (date.get(i) == 255 && status1 == 0) {
                status1++;
                date1 = i;
            }
            if (date.get(i) == 238 && status2 == 0) {
                status2++;
                date2 = i;
            }
            if (date.get(i + 1) < 238 && date.get(i) == 238) {
                date3 = i;
            }
            if (date.get(i + 1) < 165 && date.get(i) == 165) {
                date4 = i;
            }
        }
//        output(date1, date2, date3, date4);
//        output((date2 + date3 - date1 * 2.00)/(date4 - date1)/2);
        return (date2 + date3 - date1 * 2.00)/(date4 - date1)/2;
    }

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档