发布网友 发布时间:2022-04-27 03:01
共2个回答
懂视网 时间:2022-04-11 00:08
import os import time # os.system(‘adb shell screencap -p /sdcard/screen4.png‘) #截图在模拟器的/sdcard文件夹下找像素点用的
#定义个模拟点击函数 def click(x,y): return os.system(‘adb shell input tap {} {}‘.format(x,y)) click(1486,919) # 下一步 1486 919 print(‘下一步‘) time.sleep(1) if __name__ == ‘__main__‘: #判断程序入口 for i in range(60): #定义刷副本次数60 click(1439,871) #闯关 1439 871 print(‘正在加载‘) time.sleep(20) #加载大概要20秒 print(‘开始闯关‘) # 随意点击,有的有对话烦的一笔 for j in range(100): #100次可以调整,0.2秒点一下也可调整 click(1255, 555) time.sleep(0.2) j+=1 print(‘点击:%s次‘%j) #返回点击次数 click(1624,1000) #再次挑战 1624 1000 time.sleep(1) #反应大概一秒 print(‘再次挑战‘) time.sleep(5)
adb自动化农药金币
标签:共享 安卓手机 代码 pre ice too car 通过 一个
热心网友 时间:2022-04-10 21:16
互相学习android自动化测试,请关注我的微博:weibo.com/ganchaojiang
一、一个BUG引发的问题
如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”。这个问题我们如何验证呢?我想,最好的方式应该是自动化测试。
那么,自动化测试可以完成哪些任务呢?
简单的说,那些重复性的测试工作,都可以交给自动化完成:
1、设置手机的语言
2、添加、删除、收藏联系人
3、拨号、挂断
4、甚至发送短信、收藏短信
如果需要上面的功能,那么就开始自动化之旅吧。
二、Android自动化测试简单介绍
Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey(在我看来这个不算)等。主要特点:
1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;
2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;
3、UiAutomator:优点:可以对所有操作进行自动化,操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;
4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;
由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;
本文主要介绍UiAutomator的使用方法。
三、环境搭建
3.1、必备条件:
1、JDK
2、SDK(API高于15)
3、Eclipse(安装ADT插件)
4、ANT(用于编译生成jar)
3.2、简要步骤:
1、安装JDK并添加环境变量。
安装后,一定要通过JAVA_HOME的方式添加环境变量,即先建立JAVA_HOME变量,然后在path中添加%JAVA_HOME%\bin;
2、添加SDK环境变量。
一定要先建立ANDROID_HOME,然后把%ANDROID_HOME%\tools添加到path中;
3、安装Eclipse,并安装ADT插件。
4、安装ANT工具,并添加环境变量。
同样一定要先建立%ANT_HOME%变量,然后在path中添加%ANT_HOME%\bin
四、详细操作
4.1、建立工程
用Eclipse新建Java Project,注意,不是Android Project!
4.2、添加JUnit库
next->Libraries->Add Library
4.3、添加Android库
Add External JARs:
找到路径Android-sdk\platforms\android-17\下面的android.jar和uiautomator.jar添加进来:
所有库添加完应该是这个样子:
4.4、在src中添加包,然后添加class文件
文件内容为:
[java] view plaincopy
package com;
import com.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;
public class Runner extends UiAutomatorTestCase {
public void testDemo() throws UiObjectNotFoundException {
getUiDevice().pressHome();
// 进入设置菜单
UiObject settingApp = new UiObject(new UiSelector().text("Settings"));
settingApp.click();
//休眠3秒
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 进入语言和输入法设置
UiScrollable settingItems = new UiScrollable( new UiSelector().scrollable(true));
UiObject languageAndInputItem = settingItems.getChildByText(
new UiSelector().text("Language & input"), "Language & input", true);
languageAndInputItem.clickAndWaitForNewWindow();
}
}
上面工程路径在e:\workspace\AutoRunner,类全名为com.Runner,至于具体的作用我们现在不去关心。
4.5、找到SDK ID
CMD进入\Android-sdk\tools\目录下,运行命令:
android list
查看对应android版本的SDK的ID值,当前是60;
4.6、创建build文件
仍然在\Android-sdk\tools\目录下,运行命令:
android create uitest-project -n <name> -t <android-sdk-ID> -p <path>
比如:
android create uitest-project -n AutoRunner -t 60 -p e:\workspace\AutoRunner
上面的name就是将来生成的jar包的名字,可以自己定义,android-sdk-ID就是上面看到的6;path是Eclipse新建的工程的路径;运行命令后,将会在工程的根目录下生成build.xml文件。如果没生成,检查上面的步骤。
4.7、编译生成jar
CMD进入项目的工程目录,然后运行ant build,将使用ant编译生成jar,成功将会提示:
然后会在bin目录下生成jar文件。
4.8、push并运行jar
adb push <jar文件路径> data/local/tmp
adb shell uiautomator runtest <jar文件名> -c <工程中的类名,包含包名>
比如:
adb push e:\workspace\AutoRunner\bin\AutoRunner.jar data/local/tmp
adb shell uiautomator runtest AutoRunner.jar -c com.Runner
然后就能看到手机会按照Runner中的步骤自动执行。具体效果就是,进入设置菜单,然后再进入“语言和输入法”菜单
五、代码分析
我们从几个最重要的对象来介绍。
5.1、UiDevice对象
getUiDevice()的方法可以得到一个UiDevice的对象,通过这个对象可以完成一些针对设备的动作:
click(int x, int y)
----在(x,y)表示的像素地方点击
pressBack()
pressDelete()
pressEnter()
pressHome()
pressMenu()
pressSearch()
----点击相应的按键
wakeUp()
----当手机处于灭屏状态时,唤醒屏幕,并解锁。
swipe(startX, startY, endX, endY, steps)
----在手机上滑动,从(startX,startY)到(endX,endY)。steps表示滑动的这个距离分为几步完成,数目越少,滑动幅度越大。
setOrientationLeft()
setOrientationRight()
----将手机向相应方向旋转。
setOrientationNatural()
----将手机旋转状态回归正常。
5.2、UiSelector对象
这个对象可以理解为一种条件对象,描述的是一种条件,经常配合UiObject使用,可以得到某个(某些)符合条件的控件对象。
checked(boolean val)
----描述一种check状态为val的关系。
className(className)
----描述一种类名为className的对象关系
clickable(boolean val)
http://blog.csdn.net/g19920917/article/details/16131565