Android_自动化测试

合集下载

如何进行跨平台的Android测试

如何进行跨平台的Android测试

如何进行跨平台的Android测试随着移动应用的不断发展和普及,Android已经成为最受欢迎的移动操作系统之一。

然而,由于各种设备和版本的差异,对Android应用进行全面而有效的测试变得尤为重要。

跨平台的Android测试可以帮助开发者在不同的设备和版本上进行一致和可靠的测试,以确保应用在各种环境下的性能和稳定性。

本文将介绍进行跨平台的Android测试的方法和技巧。

一、使用自动化测试工具自动化测试工具是进行跨平台的Android测试的关键。

这些工具可以模拟真实的用户操作,并自动执行测试用例。

以下是一些常用的自动化测试工具:1. Appium: Appium是一个跨平台的自动化测试工具,它支持iOS 和Android平台。

通过使用Appium,开发者可以使用多种编程语言(例如Java、Python、Ruby等)编写测试脚本,并在不同的设备和版本上运行测试。

2. Espresso:Espresso是一个由Google开发的自动化测试框架,专门用于Android应用的UI测试。

它提供了丰富的API,可以方便地模拟用户的交互操作,并进行断言和验证。

Espresso相对于其他测试工具来说,更加轻量且易于使用。

3. UI Automator:UI Automator是Android官方提供的自动化测试框架,用于测试应用的UI和功能。

它可以跨应用程序测试,并支持多个设备和版本。

二、针对不同设备和版本进行测试在进行跨平台的Android测试时,需要考虑到不同的设备和版本对应用的影响。

以下是一些需要注意的方面:1. 设备分辨率和屏幕尺寸:不同的设备具有不同的分辨率和屏幕尺寸,这可能会影响应用的布局和显示效果。

因此,在进行跨平台测试时,需要在不同的设备上测试应用的界面和布局的适应性。

2. 系统版本:Android有多个版本,每个版本之间有一些差异和特殊的功能。

在进行跨平台测试时,需要确保应用在不同的Android版本上能够正常运行和兼容。

Android移动端自动化测试框架UIAutomator2入门

Android移动端自动化测试框架UIAutomator2入门

Android移动端自动化测试框架UIAutomator2入门随着智能手机的普及,移动应用也越来越受到欢迎。

移动端应用相对于传统的Web应用或桌面应用,有自身独特的测试需求。

在这种情况下,自动化测试框架成为了移动端测试的必备工具。

本文将介绍Android移动端自动化测试框架UIAutomator2的基础知识和使用方法。

一、UIAutomator2介绍UIAutomator2是Android平台上的一个自动化测试框架,它的作用是为测试人员提供一种自动化测试手段,以验证移动应用的正确性、稳定性和性能。

UIAutomator2可以模拟用户在移动应用上的各种操作,包括点击、滑动、输入等等,以实现对应用的全面自动化测试。

二、UIAutomator2的环境搭建要使用UIAutomator2,我们首先需要构建相应的测试环境。

具体步骤如下:1. 安装Android SDK,并配置环境变量。

2. 下载UIAutomator2的源代码。

3. 根据源代码中的README文档,进行所需的编译和安装。

三、UIAutomator2的使用1. 创建测试脚本使用UIAutomator2进行自动化测试需要编写相应的测试脚本。

测试脚本是由Java编写的,并可以使用Android Studio进行编辑和调试。

下面是一个简单的测试脚本:```import androidx.test.uiautomator.By;import androidx.test.uiautomator.UiDevice;public class MyTest {public static void main(String[] args) throws Exception {UiDevice device = UiDevice.getInstance();device.pressHome();device.findObject(By.text("Chrome")).click();device.findObject(By.res("com.android.chrome:id/search_box_text")).c lick();device.findObject(By.res("com.android.chrome:id/search_box_text")).s etText("UIAutomator2");device.pressEnter();}}```这个脚本的功能是启动Chrome浏览器,并在浏览器中搜索“UIAutomator2”。

Android测试工程师的自动化测试框架选择

Android测试工程师的自动化测试框架选择

Android测试工程师的自动化测试框架选择自动化测试框架是Android测试工程师日常工作中必不可少的工具之一,选择适合的自动化测试框架对于提高测试效率和质量具有重要意义。

本文将介绍几种常见的Android自动化测试框架,并讨论它们的优缺点,以便Android测试工程师在选择时能够根据实际需求作出明智的决策。

1. AppiumAppium是一款开源的跨平台自动化测试框架,支持Android和iOS平台的自动化测试。

Appium使用WebDriver协议来驱动手机应用程序,可以通过编写脚本实现各种操作,如点击、输入、滑动等。

优点是支持多种编程语言,如Java、Python、Ruby等;缺点是配置相对复杂,需要连接真机或模拟器来运行测试。

2. EspressoEspresso是Google推出的用于Android应用程序的自动化测试框架,主要用于功能测试和界面测试。

Espresso使用简单,提供了丰富的API来进行UI操作和断言验证,适合在开发阶段快速迭代的场景下使用。

缺点是它只支持Android平台,对于跨平台需求不够灵活。

3. UI AutomatorUI Automator是Google提供的用于Android系统级UI测试的框架,可以对应用程序以及系统应用进行自动化测试。

UI Automator可以实现跨应用的测试,使用起来相对简单,并且提供了强大的UI交互能力。

缺点是编写测试脚本相对繁琐,不够灵活,对于应用程序内部的UI测试不够方便。

4. Robot FrameworkRobot Framework是一款通用的自动化测试框架,支持多种应用程序、平台和编程语言。

它使用关键字驱动的方式编写测试用例,易于学习和使用,并且提供了大量的扩展库来完成各种测试任务。

优点是灵活性高,可扩展性好;缺点是相对于其他框架,学习成本较高。

5. CalabashCalabash是一款适用于Android和iOS应用的自动化测试框架,基于Cucumber和Ruby开发。

Android测试中的自动化工具评测与选择

Android测试中的自动化工具评测与选择

Android测试中的自动化工具评测与选择随着移动应用开发的快速发展,Android平台成为了最受欢迎的移动操作系统之一。

然而,随之而来的是对移动应用质量的不断追求,这要求开发人员在应用发布之前进行全面而准确的测试。

为了提高效率和质量,Android测试中的自动化工具成为开发人员的首选。

本文将对几种常用的Android自动化测试工具进行评测,并提供选择的建议。

1. AppiumAppium是一种开源的移动应用自动化测试工具,支持多种操作系统(包括Android)。

它使用WebDriver协议进行测试,并支持各种编程语言(如Java、Python和Ruby)。

Appium的优点在于可以在真实设备和模拟器上运行测试,且支持多种操作系统版本。

然而,Appium需要开发人员具备较强的编程能力,并且在配置和安装方面较为复杂。

2. EspressoEspresso是由Google开发的Android自动化测试工具,专注于用户界面(UI)测试。

它提供了一套简洁明了的API,可以方便地编写和运行UI测试。

Espresso的优点在于速度快、稳定性高,且无需涉及设备配置或者系统安装。

然而,在处理复杂场景或者多个应用程序之间的交互时,Espresso的能力相对较弱。

3. UI AutomatorUI Automator也是由Google开发的自动化测试框架,用于执行跨应用程序的功能测试。

它可以与Android系统进行交互,并模拟用户在多个应用程序之间的操作。

UI Automator的优点在于支持多应用程序测试和跨应用程序交互,适用于复杂的测试场景。

然而,使用UI Automator需要对Android框架有一定的了解,并且测试脚本编写较为繁琐。

4. RobotiumRobotium是一种Android自动化测试工具,专注于功能和用户界面的测试。

它提供了易于使用的API,能够模拟用户在应用程序中的操作和事件。

Robotium的优点在于容易上手、功能强大,可用于测试各种应用程序场景。

Android自动化测试工具的选择与比较

Android自动化测试工具的选择与比较

Android自动化测试工具的选择与比较Android应用程序的自动化测试在软件开发过程中扮演着重要的角色。

为了保证应用程序的质量和稳定性,开发人员需要选择一个适合他们需求的自动化测试工具。

在本文中,我们将比较几种常见的Android自动化测试工具,并为您提供有关如何选择适合您的项目的建议。

一、UI AutomatorUI Automator是由Google开发的一个基于黑盒测试的自动化测试框架。

它允许开发人员跨应用程序的用户界面元素进行测试。

UI Automator支持Android 4.1及以上的设备,并提供了丰富的API来与设备进行交互。

它的优点是可以通过模拟用户的真实操作来测试应用程序的性能和用户体验。

然而,UI Automator的学习曲线较陡峭,对于新手来说可能需要一些时间来熟悉其使用方法。

二、EspressoEspresso是一个由Google开发的轻量级自动化测试框架,旨在简化Android应用程序的UI测试。

Espresso的主要特点是易于使用和快速执行测试。

它提供了简洁的API用于编写可读性强的测试代码,并且能够处理异步操作和UI事件。

Espresso还集成了多种延时和等待机制,以便于开发人员进行稳定的测试。

然而,Espresso的适用范围相对较窄,主要针对应用程序的单个Activity进行测试。

三、AppiumAppium是一个开源的跨平台自动化测试框架,支持Android和iOS平台。

它使用WebDriver协议来驱动真实的设备和模拟器,可以以多种编程语言编写测试脚本。

Appium的优点是支持网页应用测试和混合应用测试,可以覆盖更广泛的测试场景。

然而,Appium的配置和设置相对复杂,对于初学者来说可能需要一些技术知识和经验。

四、Robot FrameworkRobot Framework是一个通用的自动化测试框架,支持多种应用程序和系统的测试。

它具有可扩展性、易用性和灵活性的特点。

行为触发之Android自动化测试instrumentation(一)

行为触发之Android自动化测试instrumentation(一)

⾏为触发之Android⾃动化测试instrumentation(⼀)由于对测试并没有太多的概念,⼀不⼩⼼搜索到各种前缀:Instrumentation、InstrumentationTestCase、InstrumentationTestSuite、InstrumentationTestRunner 傻了眼,但仔细⼀看把前缀去掉后⼤致就分类为了这三类:TestCase、TestSuite、Tes 常规Android⾃动化⽅法分3步⾛:1、先继承各种****TestCase完成测试样例的编写(这⾥有很多***TestCase,适⽤于不⽤场景,都可以使⽤,对于broadcastreceiver⽤intent可以触发)2、在Andriodmanifest中需要加⼊<instrumentation> 并配置些啥3、完成之后可以adb shell am instrument ****执⾏我们的⾃动化测试下⾯⽤⼀个⼩demo来完成⼊门,主要还是⾃⼰单独建⽴⼀个测试项⽬,但重做安全的⾓度来说,我们更多的是在做⿊盒测试,那么就会产⽣了不少疑问,在下⾯阐述。

1.先是需要测试的app,我这⾥简单写了⼀个[java] view plain copy 在CODE上查看代码⽚派⽣到我的代码⽚package com.example.hello;import com.example.hello.R;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class HelloActivity extends Activity {final String TAG = "helloactivity";Button mButton;EditText mEditText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i(TAG, "hello onCreate");setContentView(yout.activity_hello_test);mButton = (Button) findViewById(R.id.Button1);mEditText = (EditText) findViewById(R.id.EditText1);mEditText.setHint("INPUT");mButton.setOnClickListener(new OnClickListener(){public void onClick(View v){String msg = mEditText.getText().toString();if (msg.equals("1")) {Toast.makeText(getApplicationContext(), "hello_1", Toast.LENGTH_LONG).show();} else if(msg.equals("2")){Toast.makeText(getApplicationContext(), "hello_2", Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), "hello_nothing", Toast.LENGTH_SHORT).show();}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.hello_test, menu);return true;}@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG,"hello onDestroy");}功能就是输⼊1、2、其他字符串之后onClick之后会⾛不同路径2、编写⾃动化测试的TestCase官⽅推荐测试样例项⽬建⽴路径最好满⾜⼀下规范(刚开始以为这样⼦是为了更好的找到测试APP中相应的类,后来想想也不对,不是同⼀个项⽬,为啥能直接导⼊测试APP的类import com.example.hello.HelloActivity呢,⾃⼰还索性在其他路径建了MyProject/AndroidManifest.xmlres/... (resources for main application)src/... (source code for main application) ...tests/AndroidManifest.xmlres/... (resources for tests)src/... (source code for tests)上图新建-》其他项⽬-》Android Test Project:之后可以选择需要测试的⽬标APP:我们这⾥需要测试的是Hello,这样⾃动⽣成后,ADT⾃动帮我们完成了第⼆步中在AndroiManifest⾥加⼊需要声明的东西[html] view plain copy 在CODE上查看代码⽚派⽣到我的代码⽚<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.hello.test"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" /><instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.hello"android:label="the hello test" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><uses-library android:name="android.test.runner" /></application></manifest>target指明了需要测试的⽬标,label为测试的标签(在模拟器中使⽤dev tool可以看到对应的标签),这⾥写了个⼀个简单的测试样例,⾃动向编辑框中输⼊1,2,3然后分别⾃动点击按钮[java] view plain copy 在CODE上查看代码⽚派⽣到我的代码⽚package com.example.hello.test;import android.app.Instrumentation;import android.content.Intent;import android.os.SystemClock;import android.test.InstrumentationTestCase;import android.util.Log;import android.widget.Button;import android.widget.EditText;import com.example.hello.HelloActivity;import com.example.hello.R;public class TestHelloActiviry extends InstrumentationTestCase {final String TAG = "TestHelloAppTestHelloApp";Button mHelloTestButton;EditText mHelloEditText;HelloActivity mHelloTestActivity;Instrumentation mInstrumentation;public void testHelloActivity() {Log.i(TAG, "call testHelloActivity()");mHelloTestButton = (Button)mHelloTestActivity.findViewById(R.id.Button1);mHelloEditText = (EditText)mHelloTestActivity.findViewById(R.id.EditText1);for (int i = 0; i < 3; i++) {//设置事件在主线程中执⾏mInstrumentation.runOnMainSync(new Click(mHelloTestButton,mHelloEditText,Integer.toString(i)));SystemClock.sleep(3000);}}public void testHelloActivity2() {}private class Click implements Runnable{Button button;EditText editText;String str;Click(Button b,EditText e,String s){button = b;editText = e;str = s;}@Overridepublic void run() {editText.setText(str);button.performClick();}}//负责testcase开始前的初始化⼯作@Overrideprotected void setUp() throws Exception {super.setUp();Log.i(TAG, "call setUp()");mInstrumentation = getInstrumentation();Intent intent = new Intent();intent.setClassName("com.example.hello", "com.example.hello.HelloActivity");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//通过intent触发activitymHelloTestActivity = (HelloActivity)mInstrumentation.startActivitySync(intent);}@Overrideprotected void tearDown() throws Exception {super.tearDown();Log.i(TAG, "tearDown()");}}3、运⾏起来吧接下来要么直接在ADT中run as-》Android jUnit test,但这样太智能了,我们并不知道实际上做了什么,对于我们安全来说,我们肯定不能开个ADT直接点点点吧。

Android自动化测试框架对比选择最适合你的工具

Android自动化测试框架对比选择最适合你的工具

Android自动化测试框架对比选择最适合你的工具随着移动应用的快速发展,测试移动应用的重要性变得愈加显著。

为了提高测试效率和质量,许多开发者和测试人员转向自动化测试框架。

而对于Android平台而言,选择最适合的自动化测试工具成为了关键。

本文将对比一些常用的Android自动化测试框架,帮助读者选择最适合自己的工具。

以下是几个常见的框架:1. EspressoEspresso是Google提供的一款简单易用的自动化测试框架,主要用于UI测试。

它支持Java和Kotlin语言,可以在Android Studio中直接集成使用。

Espresso提供了丰富的API,可以方便地进行View的查找和交互操作,同时还支持断言和验证UI行为。

2. UI AutomatorUI Automator同样由Google开发,专注于系统层面的UI自动化测试。

它可以跨应用进行测试,并支持Java编写。

UI Automator提供了强大的查找和操作能力,可以轻松地访问系统组件和UI元素,适用于跨应用的复杂场景。

3. AppiumAppium是一个跨平台的自动化测试框架,支持Android和iOS平台。

它使用WebDriver协议,可以用多种编程语言编写测试脚本,包括Java、Python和JavaScript等。

Appium可以与Android Studio等开发环境集成,支持UI交互和断言,同时也支持跨应用的测试。

4. RobotFrameworkRobotFramework是一个通用的开源自动化测试框架,可以用于不同的平台和应用。

它使用关键字驱动的方式编写测试脚本,支持多种编程语言,包括Python和Java等。

RobotFramework提供了丰富的测试库和插件,支持UI和API层面的测试,并且具有良好的扩展性。

5. CalabashCalabash是一个基于Cucumber的自动化测试框架,使用Ruby语言编写。

探秘Android自动化测试的利与弊

探秘Android自动化测试的利与弊

探秘Android自动化测试的利与弊随着移动应用的快速发展,Android自动化测试逐渐成为开发者和测试人员的热门话题。

本文将探讨Android自动化测试的利与弊,并分析其在软件开发中的应用。

一、Android自动化测试的概述Android自动化测试指的是通过编写测试脚本,模拟用户行为并对Android应用进行测试的过程。

它通过自动执行一系列预定义的测试步骤,可以有效地减少人工测试的工作量,提高测试效率和质量。

二、Android自动化测试的利益1. 提高测试效率:自动化测试可以快速执行大量的测试用例,比手工测试更高效。

它可以在短时间内覆盖更多的功能模块,并检测出潜在的问题。

2. 提高测试覆盖率:自动化测试可以覆盖广泛的测试场景,包括用户界面、数据输入、业务逻辑等。

通过模拟用户交互,可以发现更多可能存在的问题,并全面验证软件的功能性。

3. 提高软件质量:自动化测试可以帮助开发人员及时发现代码缺陷和功能问题。

它可以在软件开发早期发现并修复bug,避免问题逐步累积导致更严重的后果。

4. 降低测试成本:相比手工测试,自动化测试可以减少人工测试的工作量和测试周期。

虽然初期的投入可能较大,但随着时间的推移,自动化测试可以节省大量的人力资源,从而降低测试成本。

5. 提高持续集成能力:自动化测试可以与持续集成工具结合,实现持续集成和持续交付。

这可以加速软件的交付速度,提升团队的开发效率,并使软件更具可靠性和稳定性。

三、Android自动化测试的弊端1. 测试脚本编写困难:自动化测试需要编写测试脚本,对测试人员要求较高。

测试脚本的编写过程可能会比手工测试更加复杂和繁琐,需要投入大量的时间和精力。

2. 需要适应各种设备和平台:Android系统的碎片化现象比较严重,不同厂商的设备和不同版本的系统都可能存在兼容性问题。

这使得自动化测试需要适配不同的设备和平台,增加了测试的难度。

3. 需要持续维护和更新:随着软件的迭代和升级,测试脚本也需要不断地进行维护和更新。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android自动化测试初探-1:捕获Activity上的Element第一部分:前言Android系统下应用程序的测试现在应该还算是个新的领域,网上关于这方面的资料很多都是基于白盒测试的,一般都是基于JUnit框架和Android SDK中android.test等命名空间下的内容进行,但是有一个前提,那就是必须要有应用程序的源代码以提供测试接入点,但是这在很多软件公司中是不现实的。

很多测试工程师做的工作是完全黑盒,基本接触不到源代码,白盒测试大部分也是由开发自己完成。

回顾一下Windows下的黑盒测试自动化,先前使用的是微软提供的基于.net framework的UI Automation自动化测试框架(要求版本在.net framework3.0以上,即 2008开发环境),对与擅长C#语言的人来说,使用起来确认比较好用。

本人也写了基于UI Automation的轻量级的自动化框架,将在以后的博文中引出。

那在Android操作系统中能不能做类似于UI Automation的事情呢?不幸的是,Android的权限控制分的非常清楚,不同程序之间的数据访问只能通过Intent,content provider类似的功能实现。

也就是说你开发的运行在Android中的自动化程序想要捕获当前运行的AUT(Application under Test)界面上的控件等Element(该术语引自UI Automation,觉得翻译成元素有点生硬,故不作翻译)基本不可能,你也拿不到当前active activity的引用(截止本文发帖为止,个人暂时没有找到办法获得此引用)。

无路可走了?模拟器里面不能走,外面能不能走?或许可以。

第二部分:捕获Activity上的Element在Android的SDK中自带了一个对自动化测试比较有用的工具:hierarchyviewer(位于SDK的tools目录下)。

在模拟器运行的情况下,使用该工具可以将当前的Activity上的Element以对象树的形式展现出来,每个Element所含的属性也能一一尽显。

这有点像Windows上运行的UI SPY,唯一遗憾的是不支持事件的触发。

不过没有关系,可以想办法绕,当务之急是能在自行编写的自动化测试代码里找到Activity上的Element。

第一个想到的办法就是看hierarchyviewer源码,不巧,网上搜了一下,没有资源。

或许Google的官网上有,但是上不去。

看来只能反编译了,找来XJad,暴力之。

虽然反编译出来的代码很多地方提示缺少import,但代码基本上是正确的。

看了一下,确实也知道了许多。

后来在编写代码的过程中,确实也证明了如果想引用hierarchyviewer.jar这个包并调试,还是需要知道里面的一些设置的。

创建基于hierarchyviewer.jar这个包的调用,需要将它和另外两个包,ddmlib.jar(在hierarchyviewer.jar同级目录中有)和org-netbeans-api-visual.jar(需要下载并安装netbeans,在其安装目录中有)一并导入到工程项目中,因为hierarchyviewer的实现依附于这两个包。

想在代码中获取Activity上的Element需要进行如下几个步骤(如果使用过hierarchyviewer这个工具后会发现,自动化代码所要写的就是该工具上的使用步骤):1.Ensure adb running2.Set adb location(因为hierarchyviewer和模拟器的沟通完全是依靠adb做的,所以设定正确的adb程序的位置至关重要,本人就曾在这个问题上栽了半天多)3.Get Active Device(这个等同动作发生在启动hierarchyviewer工具时)4.Start View Server(等同于工具上Start Server菜单触发事件)5.Load Scene(等同于工具上Load View Hierarchy菜单触发事件)6.Get Root View Node(获得对象树的根节点,这个动作在工具上点击Load View Hierarchy 菜单后会自动加载)7.Get Sub View Node(获得想要查找的View Node,这个动作在工具上点击Load View Hierarchy菜单后会自动加载)说明:上述步骤中一些名称实际上就是hierarchyviewer中所提供的可访问方法名称,如startViewServer、loadScene、rootNode等。

另外View Node实际上hierarchyviewer中的一个类,表示的对象树上的一个Element。

现将部分核心代码粘贴如下:1.Set adb locationSystem.setProperty("hierarchyviewer.adb","E:\\\\Android\\android-sdk-windows\\tools");其中”hierarchyviewer.adb”这个key是hierarchyviewer.jar中指定的,后面的value是存放Android SDK的路径。

这个目录必须是当前运行的模拟器所对应的adb的目录,不能自行使用其他目录下adb,否则会发生adb进程异常退出的错误。

2.Get Active DeviceIDevice[]devices=null;DeviceBridge.terminate();while(null==devices||0==devices.length){DeviceBridge.initDebugBridge();//it must wait for some time,otherwise will throw exceptiontry{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}devices=DeviceBridge.getDevices();}return devices;以上方法返回的是所有当前运行的Device列表3.Start View ServerDeviceBridge.startViewServer(device);4.Load SceneViewHierarchyLoader.loadScene(device,Window.FOCUSED_WINDOW);5.Get Root View Nodevhs.getRoot();其中vhs是ViewHierarchyScene的实例对象6.Get Sub View Nodepublic ViewNode findFirstChildrenElement(IDevice device,ViewNode entryViewNode,String elementID){ViewNode node=null;if(0!=entryViewNode.children.size()){for(int i=0;i<entryViewNode.children.size();i++){node=entryViewNode.children.get(i);if(node.id==elementID)return node;elsecontinue;}}return node;}虽然上述步骤所涉及的代码量不多,但是花了一天多的时间才终究研究出来,写下此文希望对正在研究Android自动化测试的同学们有些帮助。

到目前为止,Element已经得到了,接下去就是实现怎么去触发这些Element,如click button,enter text等等,尚需再慢慢研究,等有结果再贴出来分享!Android自动化测试初探-2:Hierarchyviewer捕获Element的实现原理Android SDK tools下的工具hierarchyviewer可以展现Device上的Element的层次分布和自身属性,其核心函数之一就是LoadScene,研究后发现其实现方法是向Device的4939端口通过socket的方式发送了一个DUMP的命令,Device会自动处理该命令并将所有Screen上的Element层次结构和属性一并发回,实现代码如下:public static void listElement(IDevice device){Socket socket;BufferedReader in;BufferedWriter out;socket=null;in=null;out=null;do{DeviceBridge.setupDeviceForward(device);}while(4939!=DeviceBridge.getDeviceLocalPort(device));socket=new Socket();try{socket.connect(new InetSocketAddress("127.0.0.1",DeviceBridge.getDeviceLocalPort(device))); out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));in=new BufferedReader(new InputStreamReader(socket.getInputStream()));System.out.println("==>DUMP");out.write((new StringBuilder()).append("DUMP-1").toString());out.newLine();out.flush();do{String line;if((line=in.readLine())==null||"DONE.".equalsIgnoreCase(line))break;line=line.trim();System.out.println(line);}while(true);}catch(IOException e){e.printStackTrace();}}运行后的结果摘录其中一部分(button5),列举如下。

注:当前device中运行的是2.1SDK 中自带的Calculator程序:com.android.calculator2.ColorButton@43b8bee8mText=1,5getEllipsize()=4,null mMinWidth=1,0 mMinHeight=1,0mMeasuredWidth=2,79mPaddingBottom=1,0mPaddingLeft=1,0 mPaddingRight=1,0mPaddingTop=1,0mMeasuredHeight=2,78mLeft=2,81mPrivateFlags_DRAWING_CACHE_INVALID=3,0x0mPrivateFlags_DRAWN=4,0x20 mPrivateFlags=8,16779312mID=9,id/digit5mRight=3,160mScrollX=1,0mScrollY=1,0mTop=1,0 mBottom=2,78mUserPaddingBottom=1,0mUserPaddingRight=1,0mViewFlags=9,402669569 getBaseline()=2,54getHeight()=2,78layout_gravity=4,NONE layout_weight=3,1.0layout_bottomMargin=1,0layout_leftMargin=1,1layout_rightMargin=1,0layout_topMargin=1,0 layout_height=11,FILL_PARENT layout_width=11,FILL_PARENT getTag()=4,nullgetVisibility()=7,VISIBLE getWidth()=2,79hasFocus()=5,false isClickable()=4,true isDrawingCacheEnabled()=5,false isEnabled()=4,true isFocusable()=4,true isFocusableInTouchMode()=5,false isFocused()=5,false isHapticFeedbackEnabled()=4,true isInTouchMode()=4,true isOpaque()=5,false isSelected()=5,false isSoundEffectsEnabled()=4,true willNotCacheDrawing()=5,false willNotDraw()=5,false另外还支持如下命令:-LIST will show the list of windows:LISTuncher/uncher4359e4d0TrackingView435b00a0StatusBarExpanded43463710StatusBar43484c58KeyguardDONE.Android自动化测试初探-3:架构实现前两节讲了用Android SDK自带的tool-hierarchyviewer来捕获Activity上Element,并分析了其中的原理。

相关文档
最新文档