我的编程空间,编程开发者的网络收藏夹
学习永远不晚

移动设备Android平台自动化测试方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

移动设备Android平台自动化测试方法

   在编写Android自动化测试用例的时候,可能会碰到这样的情况,在一个Android版本的模拟器上运行的好好的测试用例,在另一个版本的Android模拟器上运行不正常了。基本症状是,在测试代码里获取一个View的实例,然后通过robotium的click函数点击它:

  View view = ... // 在代码里获取要点击的View的实例

  solo.click(view); // 然后点击它。

  如果是在模拟器上执行的话,因为创建模拟器的时候可以指定皮肤,模拟器也有不同的版本,可能你会发现在一个皮肤(或者模拟器版本)上运行的好好的,在另一个皮肤(或版本)上发生点不到控件的问题。

  发生这种情况,主要是由于Android支持多种屏幕造成的,不同屏幕的像素密度有可能不一样,而这会导致同样(像素)大小的控件,在低密度屏上看起来要大一些,而在高密度屏上看起来要小一些,如下图所示:

  而有些程序,为了避免发生类似上面的情况,会采用密度无关像素的方式指定控件的大小 – 即使用dp单位。因为dp单位采用中等密度屏幕的每英寸的像素个数作为基线,当程序在高密度或低密度屏上运行时,android系统会自动去根据基线来计算并缩放控件,以便相同的控件在不同密度的屏幕上显示的物理大小是一致的,如下图所示:

   这样其实给咱们自动化测试带来了一些问题,在Android官方文档里举了一个例子-当然是开发方面的例子:假如一个程序设置了手指在屏幕上至少移动了16个像素才算是滑动,那么在基准屏上,手指需要移动 16像素 / 160 dpi,也是十分之一英寸(或2.5毫米);而如果在高密度屏上面,用户只需要移动16像素 / 240 dpi,也是十五分之一英寸(或1.7毫米)。高密度屏上需要移动的距离远比低密度屏短,给用户的感觉是高密度屏上对手势更敏感些。

  放在自动化测试的点击上面,针对使用DPI指定大小的控件,由于在显示的时候会根据屏幕的密度来缩放控件,在模拟点击操作的时候,因为robotium是复用instrumentation类来向android系统发送点击操作这个消息,消息里面自带了点击位置的x, y坐标。Robotium里面点击控件的逻辑是这样的:

  1. 首先获取要点击的控件View的实例。

  2. 通过View. getLocationOnScreen函数获取控件左上角在屏幕上的坐标,坐标的单位是像素。

  3. 通过View.getWidth和View.getHeight函数获取控件的大小。

  4. 一般来说是点控件的中间位置,这个位置由控件的左上角的坐标和控件大小计算得出,这个单位也是像素。

  5. 原来robotium得到点击位置的x,y坐标之后,直接发送android消息了:

  1: public void clickOnScreen(float x, float y) {

  2: long downTime = SystemClock.uptimeMillis();

  3: long eventTime = SystemClock.uptimeMillis();

  4: MotionEvent event = MotionEvent.obtain(downTime, eventTime,

  5: MotionEvent.ACTION_DOWN, x, y, 0);

  6: MotionEvent event2 = MotionEvent.obtain(downTime, eventTime,

  7: MotionEvent.ACTION_UP, x, y, 0);

  8: try{

  9: inst.sendPointerSync(event);

  10: inst.sendPointerSync(event2);

  11: sleeper.sleep(MINISLEEP);

  12: }catch(SecurityException e){

  13: Assert.assertTrue("Click can not be completed!", false);

  14: }

  15: }

  由于所有的坐标位置都是以像素计算的,没有考虑到缩放的情形,所以在不同密度的屏幕上会发生点击错位的情况。

  为了修复这个问题,解决方案是获取当前屏幕的密度和对dpi计算大小的控件的缩放比例,然后恢复原始的比例再发送点击消息:

  1: // 需要传递要点击的控件View的实例

  2: public void clickOnScreen(View view, boolean longClick, int time) {

  3: if(view == null)

  4: Assert.assertTrue("View is null and can therefore not be clicked!", false);

  5: int[] xy = new int[2];

  6:

  7: // 获取控件在屏幕上的位置 – 如果是dpi计算大小的控件,这个位置是缩放后的位置

  8: view.getLocationOnScreen(xy);

  9:

  10: // 获取控件的大小,并且计算出点击的控件中点位置

  11: final int top = view.getTop();

  12: final int viewWidth = view.getWidth();

  13: final int viewHeight = view.getHeight();

  14: float x = xy[0] + (viewWidth / 2.0f);

  15: float y = xy[1] + (viewHeight / 2.0f);

  16:

  17: // 计算缩放比例,将要点击的x, y坐标恢复到缩放前的情况。

  18: Activity activity = activityUtils.getCurrentActivity();

  19: DisplayMetrics rdm = activity.getResources().getDisplayMetrics();

  20: DisplayMetrics wdm = new DisplayMetrics();

  21: activity.getWindowManager().getDefaultDisplay().getMetrics(wdm);

  22: x *= wdm.scaledDensity / rdm.scaledDensity;

  23: y *= wdm.scaledDensity / rdm.scaledDensity;

  24:

  25: // 后再发送Android点击消息

  26: if (longClick)

  27: clickLongOnScreen(x, y, time);

  28: else

  29: clickOnScreen(x, y);

  30: }


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

移动设备Android平台自动化测试方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

移动设备Android平台自动化测试方法

  在编写Android自动化测试用例的时候,可能会碰到这样的情况,在一个Android版本的模拟器上运行的好好的测试用例,在另一个版本的Android模拟器上运行不正常了。基本症状是,在测试代码里获取一个View的实例,然后通过robo
2022-06-06

Android移动端自动化测试,Sele

Android移动端自动化测试,Selenium3自动化测试,Python3 测试,Java接口测试21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,***测试,测试用例设计,黑盒测试,白盒测试
2023-01-31

Android自动化测试的方法是什么

本篇内容介绍了“Android自动化测试的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自动化测试自动化测试指软件测试的自动化,在
2023-06-05

Android自动化测试解决方案

现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric。另外LessPainful也提供服务
2022-06-06

GitLab的自动测试和自动化测试报告生成方法

GitLab的自动测试和自动化测试报告生成方法,需要具体代码示例随着软件开发项目的不断增加,测试变得越来越重要,而自动化测试成为了一种必不可少的手段。GitLab作为一个流行的代码托管平台,提供了许多工具和功能来支持自动测试和自动化测试报告
2023-10-22

Android 自动化测试经验分享 UiObejct.getFromParent()的使用方法

1. UiObejct.getFromParent()的用法:从这个名字就知道,就是从当前对象的父对象中查找想要的子对象,该子对象和当前对象应该是同一层级。如上图所示:Max inactivity before lock是已知条件,4 mi
2022-06-06

Android自动测试工具Monkey的实现方法

1. Android Monkey 实现操作流程: 准备:在eclipse里安装Phyon插件,可以选择在线安装,也可以下载zip解压后放在eclipse安装目录的dropins下,如 : /personal/software/androi
2022-06-06

PHP中封装性的自动化测试方法

摘要:自动化测试是一个重要的软件开发实践,它可以提高测试的效率和准确性。在PHP开发中,封装性是实现自动化测试的关键。本文将介绍一些PHP中封装性的自动化测试方法,并给出具体的代码示例。测试框架的选择在PHP开发中,有许多流行的测试框架可供
2023-10-21

Go 函数单元测试的自动化方法

在 go 中,可以通过以下方法自动化单元测试:使用 go test 命令,提供灵活的测试运行和管理选项。集成第三方测试框架,获得额外的功能和灵活性。利用持续集成工具,在每次代码更改时自动运行测试。Go 函数单元测试的自动化方法在 Go 中
Go 函数单元测试的自动化方法
2024-05-03

web自动化平台开发元数据的设计方法是是什么

这篇“web自动化平台开发元数据的设计方法是是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web自动化平台开发元数据的
2023-06-04

golang自动化运维测试的方法有哪些

Rate limit reached for gpt-3.5-turbo in organization org-68Lqb4iD2GUhNJWqRdyhiGwp on requests per day. Limit: 200 / day.
2023-10-18

Java对接ansible自动运维化平台的方法是什么

这篇文章主要介绍“Java对接ansible自动运维化平台的方法是什么”,在日常操作中,相信很多人在Java对接ansible自动运维化平台的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java对
2023-07-05

App自动化测试工具选择方法有哪些

App自动化测试工具选择方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。现在app的开发已经是火爆的一个开发趋势,手机应用的测试也显得格外的重要,现在大部分还是停留在手
2023-06-05

Linux环境中用Python脚本实现自动化测试的方法

Linux环境中用Python脚本实现自动化测试的方法随着软件开发的迅猛发展,自动化测试在保证软件质量和提高开发效率方面起着至关重要的作用。而Python作为一种简单易用的编程语言,具有很强的可移植性和开发效率,被广泛应用于自动化测试中。本
2023-10-22

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录