UIAutomator2.0详解(UIDevice篇----截屏)

2023-10-11 02:40

本文主要是介绍UIAutomator2.0详解(UIDevice篇----截屏),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UIDevice为截屏提供了两个接口方法。分别是:

(1)public boolean takeScreenshot(File storePath)
(2)public boolean takeScreenshot(File storePath, float scale, int quality)

查看源码,可以发现方法(1)实质上是对方法(2)的调用,2,3传参分别为1.0和90。
scale为缩小放大比例,quality为压缩质量。quality有效值为【0,100】。

这里写图片描述

我们再来看一下方法(2)的源码。

这里写图片描述

这里写图片描述

可以发现

(1)参数scale并未传给底层。因此,不管scale为何值,其实都无效。
(2)最终实质是对Bitmap的nativeCompress方法的调用。

注:当前UIAutomator源码版本为v18-2.1.2,其他版本可能有差异。

我们再通过测试实验来看一下,对于quality不同值的不同效果。

案例代码如下:

package com.breakloop.u2demo.uidevice;import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.util.Log;import org.junit.Test;import java.io.File;
import java.io.IOException;/*** Created by user on 2017/11/14.*/public class ScreenShotTest extends UIDeviceTest {private String path;private void init(){Context context= InstrumentationRegistry.getTargetContext();path=context.getExternalCacheDir().getPath();Log.i(TAG, "init: path = " + path);}private File createFile(String path,String fileName){File file=new File(path,fileName);try {if (file.exists()){file.delete();}file.createNewFile();} catch (IOException e) {e.printStackTrace();return null;}return file;}@Testpublic void TestCase1(){init();File file =createFile(path,"1.png");Log.i(TAG, "TestCase1: file path = " + file.getPath());mDevice.takeScreenshot(file,1.0f,10);mDevice.waitForIdle();}
}

执行后,使用adb将图片导出。
这里写图片描述

1_0.1.png:scale为0.1,quality为100
1_1.png:scale为1,quality为100
1_1_10.png:scale为1,quality为10
1_1_50.png:scale为1,quality为50
1_10.png:scale为1,quality为100

从文件大小来看,竟然无任何差别!测试手机为华为mate9,android7.0

这篇关于UIAutomator2.0详解(UIDevice篇----截屏)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/184941

相关文章

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2