欢迎来到皮皮网网首页

【隋唐源码】【spark源码怎么创建】【springioc源码依赖注入】android uiautomator 源码

来源:古典文学源码 时间:2024-11-24 16:19:10

1.uiautomator与appium的区别
2.Android自动化测试框架uiautomator2详解
3.uiautomator2详细使用方法
4.如何使用和调试 android UIAutomator
5.uiautomator
6.功能测试工具:UiAutomator

android uiautomator 源码

uiautomator与appium的区别

       uiautomator和appium都作为移动端自动化测试的工具.那么他们有什么区别呢?源码

        1.适用场景不同

        uiautomator适用于adroid手机端自动化测试.而appium不仅适用于Android手机,同样适用于ios手机.

        2.作用域不同

        在Android系统场景中,uiautomator可跨app,在手机ROM层面实现交互.而appium只适合在应用内部,不能跨app.

        而且appium可以实现webview界面的自动化测试,而uiautomator却不能.

        3.原理

        appium是通过webDriver调起应用,以appium server作为桥梁,通过Bootstrap.jar调用的android端uiautomator命令和ios端uiautomation/XCTest(ios 8以上).

        uiautomator通过android instrumentation获取系统上下文,设备信息状态等.

Android自动化测试框架uiautomator2详解

       uiautomator2是一种Android自动化测试框架,它提供了多种操作方法,源码如点击、源码长按、源码输入文本、源码滑动、源码隋唐源码拖拽、源码截屏等,源码能够模拟用户的源码各种动作。用户可以通过控件的源码id或text等属性,定位到控件,源码从而对控件实施上述操作。源码

       在搭建环境时,源码首先需要配置python环境变量,源码将指定的源码路径添加到系统环境变量中的path中。接着,设置pycharm的编码格式,避免乱码。最后,通过运行特定的代码安装uiautomator2。

       若内网无法下载,可以尝试使用手机为PC开启热点。weditor是一种页面信息查看工具,可以查看页面包名、运行的Activity、页面布局、spark源码怎么创建控件等信息。若执行初始化命令失败,可能是端口被其他进程占用,可以通过查看占用该端口的进程并kill掉,或者执行特定命令后再尝试。

       用户可以通过坐标控制按钮,但通过坐标不能获取对文本框的控制权。控件通常具有resourceId、text、description、className等属性,用户可以通过这些属性轻松定位到指定控件,实现对控件的控制。

       uiautomatorviewer是Android SDK中提供的页面信息查看工具,用户可以通过单击文件进入界面。使用Android Studio下载最新的platform-tools和tools,配置系统环境变量,关闭ATX软件。

       在应用uiautomator2框架时,需要导入包。设备连接分为有线连接和无线连接。应用控制包括安装应用、打开应用、关闭应用、关闭所有应用。springioc源码依赖注入元素定位可以通过控件的属性进行。元素控制包括单击、双击、长按、文本操作等。手势控制包括滑动、拖拽。系统控制包括按键、旋转、截屏等。此外,还可以通过adb shell input和os.system(command)实现模拟输入。

uiautomator2详细使用方法

       Uiautomator2是一个专为Android平台设计的自动化测试工具,基于Python编程,利用谷歌自带的uiautomator2框架,支持跨系统运行,当前版本为2..2。它的工作原理分为Python客户端和移动设备部分,主要用于元素定位、设备交互、图像操作以及应用管理等任务。

       安装与启动

       首先,通过pip安装uiautomator2,确保adb工具已配置。安装后,微服务sdk源码检查环境变量配置是否成功,如能打印设备信息即安装成功。同时,推荐安装weditor,一个浏览器UI查看器,以辅助定位和减少atx的频繁启动。

       元素定位

       uiautomator2支持UiSelector的各种定位方式,包括子元素、兄弟定位,以及相对定位。XPath定位虽然速度较慢,但可通过特定规则进行操作。

       设备交互

       -

       涉及单击、长按、拖动(Android 4.3以下不支持)、滑动、双指操作、元素出现消失的监控、输入操作、以及模拟输入法功能。

       图像操作

       -

       提供截图、录制视频功能,可用于测试记录和复现。截图和视频识别点击功能需要注意误识别问题。

       应用管理

       -

       包括获取应用信息、dubbo源码spi扩展安装与卸载、运行和停止应用,以及获取图标和通知栏操作。

       实用功能

       -

       如设备连接、设置、屏幕方向控制、文件导入导出、执行shell命令等。

       注意事项

       Uiautomator2服务的管理很重要,避免影响其他辅助功能或uiautomatorviewer的使用。可以通过特定代码或ATX APP来控制Uiautomator服务的启动和停止。

如何使用和调试 android UIAutomator

       Google在sdk4.0以后提供了一个自动化解决方案uiautomator:

       ä¼˜ç‚¹ï¼šå¯ä»¥è·¨åº”用了;这可是亲生的;

       ç¼ºç‚¹ï¼šå¿…é¡»sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为jar后需要push到手机才能运行,也就是说必须打印日志暴力调试。

       Appium基于Android InstrumentationFramework和UIAutomator,也就是说这个工具是可以跨应用的。说远了,好吧,为了帮大家更容易理解appium的使用,我这里就讲一下uiautomator的使用方法。

       ä½ åº”该有android-sdk吧,升级到4.0以上,进入目录android-sdk\tools,你会看到两个文件:

       traceview.bat 和 uiautomatorviewer.bat,这俩文件让你想起了monkeyrunner了吧,是的,traceview.bat就对应于hierarchyviewer.bat,用来查看程序的ui界面的,通常也是使用管理员权限启动的。

       å¥½äº†ï¼ŒçŽ°åœ¨ç”¨eclipse创建一个java project,是的,你没看错,是java project不是android project,添加引用:

       åœ¨project.properties中内容为:

       # Project target.

       target= android-

       è¿™é‡Œçš„android-需要和之前的android.jar和uiautomator.jar位置相一致。

       ç„¶åŽå‘¢ï¼Ÿå†™ä»£ç å§ï¼Œå»ºç«‹ä¸€ä¸ªç±»ï¼Œå¾—,发个给大家参考:

       package com.uia.example.my;

       import org.apache..android.uiautomator.core.UiObject;

       import com.android.uiautomator.core.UiObjectNotFoundException;

       import com.android.uiautomator.core.UiScrollable;

       import com.android.uiautomator.core. UiSelector ;

       import com.android.uiautomator.testrunner.UiAutomatorTestCase;

       import java.io.File;

       import java.io.FileOutputStream;

       import java.io.IOException;

       public class TAppWorkAssistV1 extends UiAutomatorTestCase {

       public String sLog ;

       public File fout = null ;

       public FileOutputStream outStream = null ;

       public void write2file(String filename,String sData)

       {

       String sLog= “” ;

       // 初始化日志文件

       if (Environment. getExternalStorageState ()。equals(Environment.MEDIA_MOUNTED )){

       sLog = Environment. getExternalStorageDirectory()。getAbsolutePath();

       try {

       fout = new File(sLog,filename);

       outStream = new FileOutputStream( fout , true ); // 此处的 true 是append

       sData=sData + “\n” ;

       outStream .write(sData.getBytes());

       outStream .flush();

       outStream .close();

       fout = null ;

       }

       catch (Exception e){

       e.printStackTrace();

       }

       } else {

       System. out .println( “ 该手机没有 SD 卡 ” );

       }

       }

       public void testDemo() throws UiObjectNotFoundException {

       //1. 启动 app

       getUiDevice()。pressHome();

       UiObject allAppsButton = new UiObject( newUiSelector()。description( “Apps” ));

       allAppsButton.clickAndWaitForNewWindow();

       UiObject appsTab = new UiObject( new UiSelector()。text( “Apps” ));

       appsTab.click();

       UiScrollable appViews = new UiScrollable( newUiSelector()。scrollable( true ));

       UiObject settingsApp = appViews.getChildByText( newUiSelector()。className(android.widget.TextView. class .getName()), “Efilm” );

       settingsApp.clickAndWaitForNewWindow();

       //2. 进入主界面

       System. out .println( “into main view” );

       System. out .println(getUiDevice()。waitForWindowUpdate(“com.eshore.efilm” , ));

       System. out .println( “intoed main view” );

       UiObject tv1 = new UiObject( new UiSelector()。text( “ 影院 ” ));

       tv1.click();

       //3. 点击影院

       UiObject oyy= new UiObject( new UiSelector()。description(“cinema_row” ));

       System. out .println( “wait yingyuan come out” );

       oyy.waitForExists();

       System. out .println( “yingyuan come out” );

       oyy.clickAndWaitForNewWindow();

       System. out .println( “click yingyuan” );

       //4. 场次

       UiObject occ= new UiObject( new UiSelector()。description(“LinearLayout” ));

       System. out .println( “wait changci come out” );

       oyy.waitForExists();

       System. out .println( “changci come out” );

       occ.clickAndWaitForNewWindow();

       System. out .println( “click changci” );

       //5. 座位

       UiObject oseat= new UiObject( new UiSelector()。description(“cinema_shows_list_item” )。index(0)。childSelector( newUiSelector()。description( “LinearLayout” )));

       System. out .println( “wait seat come out” );

       oseat.waitForExists();

       int h=getUiDevice()。getDisplayHeight();

       int w=getUiDevice()。getDisplayWidth();

       System. out .println( “(h/2,w/2)=” +h/2+ “,” +w/2);

       getUiDevice()。click(h/2,w/2);

       //System.out.println(“seat count:”+String.valueOf(oseat.getChildCount()));

       //System.out.println(“seat getText:”+ oseat.getText());

       // 截座位图

       Process process;

       try {

       process = Runtime. getRuntime ()。exec( “screencap /mnt/sdcard/EfilmFailSnapShot.png” );

       try {

       process.waitFor();

       } catch (InterruptedException e) { // TODO Auto-generated catch block

       e.printStackTrace();

       }

       } catch (IOException e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

       }

       //takeScreenShots(“EfilmSeatSnapShot”);

       }

       }

       è¿™ä¸ªä¾‹å­æ˜¯éšä¾¿å†™çš„,可能不够严谨。大体就这么个情况吧。下一步就是编译执行了,先插上手机usb接口,然后打开cmd,执行:

       æ‰¾åˆ°SDKID,也就是android create中的-t参数:

       cd C:\ PROGRAM\android-sdk\tools

       android list

       æ‰¾åˆ°t参数的值以后:

       cd C:\ PROGRAM\android-sdk\tools

       android create uitest-project -n TAppWorkAssistV1 -t -p C:\android自动化\Tv2.0\TestSetting

       cd C:\android自动化\Tv2.0\TestSetting

       ant build

       cd C:\android自动化\Tv2.0\TestSetting\bin

       adb push TAppWorkAssistV1.jar /data/local/tmp/

       adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1

       çœ‹äº†çœ‹ï¼Œå¥½åƒæ²¡æœ‰ä»€ä¹ˆç‰¹åˆ«å€¼å¾—解释的

       -n TAppWorkAssistV1:类名

       -p: 项目所在目录

       Ant build 把这个类编译成一个jar包:TAppWorkAssistV1.jar

       ç„¶åŽæŠŠjar包push到手机上,调用执行这个类就可以了

       å¤§è‡´æ˜¯è¿™ä¹ˆä¸ªæ­¥éª¤ï¼Œä¸è¿‡æœ‰ä¸€ä¸ªéžå¸¸é‡è¦çš„细节,就是如果你需要更省心,就最好把界面元素,无论动态的还是布局文件中的,都加上content-description属性,并保证唯一性,根据:

       UiSelector:description(String desc)

       Set the search criteria to match thecontent-description property for a widget.

       é‚£å°±å¯ä»¥ç»Ÿä¸€åªä½¿ç”¨è¿™ä¸€ä¸ªå¼•ç”¨ç•Œé¢å…ƒç´ çš„方法就行了,就不用去想方设法利用其它的属性来引用了。

uiautomator

       UiAutomator是Android测试框架的一部分,用于自动化UI测试。

       UiAutomator简介

       UiAutomator是Android开发中的一个自动化测试框架,主要用于进行UI相关的自动化测试。它能够模拟用户的各种操作,如点击、滑动、输入文本等,从而实现对应用程序的自动化测试。这个框架提供了丰富的API,使得开发者可以轻松地编写出强大的测试用例。

       UiAutomator的主要功能

       UiAutomator框架包含了多种测试组件,其中包括:

       1. UI测试器:用于模拟用户操作,包括点击按钮、滑动屏幕、输入文本等动作。这使得开发者无需手动操作设备,就可以对应用程序的UI进行测试。

       2. UI验证器:用于验证应用程序的UI元素是否按照预期显示。开发者可以定义特定的验证规则,然后UiAutomator会检查这些规则是否被满足。

       3. 布局检查器:允许开发者在运行时查看和编辑应用的界面布局,以便发现和解决布局问题。

       使用UiAutomator的优势

       使用UiAutomator进行UI自动化测试具有以下优势:

       1. 提高测试效率:自动化测试可以大幅度提高测试效率,减少人工操作的繁琐性。

       2. 减少人为错误:自动化测试能够避免因人为因素导致的测试误差。

       3. 持续集成:UiAutomator可以与持续集成工具结合使用,确保每次代码变更后都能自动进行测试,从而确保软件质量。

       总的来说,UiAutomator是Android开发中一个强大的UI自动化测试框架,能够帮助开发者提高测试效率,确保应用程序的UI质量。

功能测试工具:UiAutomator

       UiAutomator是Android系统提供的功能测试工具,用于进行UI功能测试。基于黑盒测试的原理,无需深入了解程序内部实现,只需验证操作结果是否符合预期。

       传统的人工验证方式耗时且易出错,而自动化测试通过编写测试代码执行任务,覆盖多种使用场景,显著提升测试效率和可靠性。UiAutomator工具的优势有:

       (1) 灵活性高,易于使用。

       (2) 学习曲线平缓。

       (3) 约束较少。

       (4) 可模拟%以上的手动操作。

       (5) 具有良好的扩展性。

       下载与配置

       为了运行UiAutomator,需要安装JDK、ATD等软件。

       JDK:版本1.8及以上。

       Android Studio。

       Android SDK。

       安装JDK

       从官网下载JDK1.8,选择位或位。

       安装下载的安装包。

       配置环境参数:

       建立JAVA_HOME环境变量,路径为JDK安装路径,如:C:\Program Files\Java\jdk1.8.0_\。

       在PATH中添加:%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin。

       建立CLASSPATH环境变量,值为:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;。

       在命令行中输入相关命令验证环境建立成功。

       安装SDK

       下载SDK文件,配置环境变量:%ANDROID_HOME%,在PATH中添加:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;。

       在Android Studio下建立UiAutomator环境,需要更新SDK中的tools目录。

       通过命令行操作完成SDK目录结构的更新。

       同步更新后,将新生成的tools目录文件复制到原有tool目录下。

       删除原有tools目录,将tool目录改名为tools。

       再次验证环境配置。

       配置开发测试代码

       建立Android Studio的SDK

       打开Android Studio,通过菜单“File->Other Settings->Default Project Structure”选择下载的SDK路径。

       新建项目,配置项目名称、包名称、工作路径、使用语言及最小API版本(注意最小API版本不低于)。

       配置成功后,将项目转换为Android视图模式查看,打开build.gradle文件,添加相应的类路径配置。

       项目目录结构将如图所示,分层为普通单元测试区、Android单元测试区、Android产品代码区。

       建立测试工程

       通过菜单“File->New->New Project”建立测试工程。

       进行配置,包括项目名称、包名称、工作路径、使用的开发语言及最小API版本。

       完成配置后,根据需要将项目设置为按Android视图模式查看。

       在Android单元测试区建立测试代码(如myclass),并按照文件结构组织。

正厚软件干货|UIAutomator2的使用教程(上)

       UIAutomator2使用教程(上)

       成都正厚沈瑜老师提供

       UIAutomator2是一款Python库,专为Android UI自动化测试设计,它基于Google的uiautomator,可轻松操作APP中的控件。GitHub地址为:github.com/openatx/uiauto...

       它支持Python编程,允许测试人员在PC上编写代码,通过HTTP请求远程操控手机应用,极大地提高了测试效率。

       其工作原理包括客户端(Python脚本)发送请求,设备端的atx-agent接收并执行,通过uiautomator2服务完成操作。具体步骤如下:

       在设备上安装atx-agent,启动uiautomator2服务,监听指定端口。

       PC上执行Python脚本,向设备发送HTTP请求。

       设备接收到请求,执行相应操作。

       安装步骤

       开始前确保你的环境满足:Python 3.6+,Android 4.4+。安装adb后,通过pip安装uiautomator2及其依赖(如需截图,还需安装pillow):

       pip install --pre uiautomator2

       pip install pillow

       在设备上使用`python -m uiautomator2 init`安装atx-agent,支持指定设备或全局安装。可以考虑使用国内镜像以提高安装速度。

       最后,安装weditor辅助元素识别和编写自动化测试代码,通过`pip install -U weditor`完成,Windows用户可以创建桌面快捷方式。

       连接手机时,通过adb devices找到设备序列号或IP,输入到weditor中,点击Connect即可实时同步手机界面,便于自动化测试。