uiautomator2 手工翻译版

原文:https://github.com/openatx/uiautomator2

1、安装

  1. pip install --pre uiautomator2  
  2. #或者你可以直接从github源码安装  
  3. git clone https://github.com/openatx/uiautomator2
  4. pip install -e uiautomator2  

pip install pillow #截屏工具

2、初始化手机,需要的环境sdk

  1. python -m uiautomator2 init  

自动安装本库所需的设备端程序:uiautomator-serveratx-agentopenstf / minicapopenstf / minitouch 可单独下载安装

3、打开手机端口:adb forward tcp:7912 tcp:7912

连接手机device_ip=127.0.0.1

4、常用命令:

  1. 1、安装apk:python -m uiautomator2 install $ device_ip https://example.org/some.apk
  2. 2、清缓存:python -m uiautomator2  
  3. 3、停止所有应用:python -m uiautomator2 app-stop-all $ device_ip  
  4. 4、截图:python -m uiautomator2截图$ device_ip screenshot.jpg  
  5. 5、检查守护线程:d.healthcheck()  
  6. 6、打开调试:d.debug =  true  
  7. 7、获取连接信息:d.info  
  8. 8、shell命令:d.adb_shell(‘ pwd ‘)  
  9. 9、分辨率:d.window_size()  
  10. 10、查看当前应用信息:d.current_app()  
  11. 11、查看序列号:d.serial  

5、连接:

  1. import uiautomator2 as u2  
  2. #通过WIFI  
  3. d = u2.connect(‘10.0.0.1‘) # alias for u2.connect_wifi(‘10.0.0.1‘)   
  4. #通过usb获取 devices  
  5. d = u2.connect(‘123456f‘) # alias for u2.connect_usb(‘123456f‘)  

6、系统操作:

  1. 1、安装,只指出url:d.app_install(‘ http://some-domain.com/some.apk ‘)  
  2. 2、启动:d.app_start(“ com.example.hello_world ”)#以包名称开头  
  3. 3、停止应用:d.app_stop( “ com.example.hello_world ”)或者d.app_clear( ‘ com.example.hello_world ‘)  
  4. 4、停止所有应用:d.app_stop_all()  
  5. 5、推送一个文件到手机:d.push( “ foo.txt的”, “ / SD卡/ ”)  
  6. 6、推和重命名 :d.push( “ foo.txt的”, “ /sdcard/bar.txt ”)  
  7. 7、推送并更改文件模式:d.push("foo.sh", "/data/local/tmp/", mode=0o755)  
  8. 8、从设备中拉取文件:d.pull(“/ sdcard/tmp.txt ”,“ tmp.txt ”)#如果文件在设备上找不到,FileNotFoundError将会出现   
  9. d.pull(“/ sdcard/some-file-not-exists.txt ”,“ tmp.txt ”)  

7、app连接会话:

  1. 1、启动应用:sess = d.session(“ com.netease.cloudmusic ”  
  2. 2、会话连接运行中的程序:sess = d.session(“ com.netease.cloudmusic ”  
  3. 3、检测应否崩溃:sess(text="Music").click()  
  4. 4、检查会话是否正常:sess.running()  

8、手机操作

  1. 1、d.screen_on()#打开屏幕 d.screen_off()#关闭屏幕  
  2. 2、获取当前屏幕状态:d.info.get(‘ screenOn ‘)# android 4.4  
  3. 3、按软/硬件  
  4. d.press("home") #按home键,用键名   
  5. d.press("back") #按返回键,与主要的名称   
  6. d.press(0x07, 0x02) #按下键码0×07(” 0‘)与META ALT(0x02)  
  7. 这些目前支持:  
  8. home    
  9. back   
  10. left  
  11. right  
  12. up     
  13. down   
  14. center  
  15. menu   
  16. search 搜索  
  17. enter 输入  
  18. delete(or del)删除  
  19. recent(recent apps)  
  20. volume_up     提高音量  
  21. volume_down   减小音量  
  22. volume_mute    关闭声音  
  23. camera     相机  
  24. power  
  25. 4、解锁屏幕d.unlock()  

9、事件:

  1. 支持百分比d.long_click(0.5, 0.5)  
  2. 1、点击屏幕:d.click(x,y)  
  3. 2、长按屏幕:d.long_click(x,y)或d.long_click(x,y,0.5)#长按0.5s(默认)  
  4. 3、拖动:d.drag(sx,sy,ex,ey)或d.drag(sx,sy,ex,ey,0.5)#刷新0.5s(默认)  
  5. 4、刷卡:d.swipe(sx,sy,ex,ey)或d.swipe(sx,sy,ex,ey,0.5)#刷新0.5 秒(默认)  
  6. 5、滑动:#由点划动(X0,Y0)到点(X1,Y1),然后到点(X2,Y2)   
  7. #时间将加速0.2秒bwtween两点   
  8. d.swipe((X0,Y0),(X1,Y1),( x2,y2), 0.2)  

10、屏幕相关:

  1. 1、获取方向:d.orientation  
  2. 2、设置方向:d.set_orientation(‘l‘)   
  3.    值:natural  或者 n  
  4.       left   或者 l  
  5.        right   或者 r  
  6.        upsidedown 或者 u  (不能设置)  
  7. 3、不能选择/解冻:d.freeze_rotation()#冻结旋转 d.freeze_rotation( False)  
  8. 4、截屏:image = d.screenshot() #支持png和jpg  
  9.         image.save("home.jpg")   
  10. 5、截屏:这个不知道什么意思  
  11. import cv2  
  12. image = d.screenshot(format=‘opencv‘)  
  13. cv2.imwrite(‘home.jpg‘, image)  
  14. 6、屏幕UI转xml:xml = d.dump_hierarchy()  
  15. 7、打开通知或快速设置:d.open_notification()  d.open_quick_settings()  

11、选择器:识别屏幕对象,请参阅UiSelector Java doc

支持的参数:

text,textContains,textMatches,textStartsWith

className, classNameMatches

description,descriptionContains,descriptionMatches,descriptionStartsWith

checkable,checked,clickable,longClickable

scrollable,enabled,focusable,focused,selected

packageName, packageNameMatches

resourceId, resourceIdMatches

index, instance

  1. 1、选择:d(text=‘Clock‘, className=‘android.widget.TextView‘)  
  2. 2、获取孩子或孙子:d( className = “ android.widget.ListView ”).child( text = “ Bluetooth ”)  
  3. 3、兄弟姐妹:d(text="Google").sibling(className="android.widget.ImageView")  
  4. 4、获取子节点根据文本:d(className="android.widget.ListView", resourceId="android:id/list") \  
  5.  .child_by_text("Bluetooth", className="android.widget.LinearLayout")  
  6. 5、获取子节点根据文本允许滚动搜素:d(className="android.widget.ListView", resourceId="android:id/list") \  
  7.  .child_by_text("Bluetooth",allow_scroll_search=True,className="android.widget.LinearLayout")  
  8. 6、支持多级:d(className = “ android.widget.ListView ”,resourceId = “ android:id / list ”)\   
  9.   .child_by_text(“ Wi-Fi ”,className = “ android.widget.LinearLayout ”)\   
  10.   .child(className = “ android .widget.Switch “)\ .click   
  11.   ()  
  12. 7、支持相对定位:  
  13.     ?   d(A).left(B),在A的左侧选择B.  
  14.     ?   d(A).right(B),在A的右侧选择B.  
  15.     ?   d(A).up(B),在A之上选择B.  
  16.     ?   d(A).down(B),在A下选择B.  
  17. d(text="Wi?Fi").right(className="android.widget.Switch").click()  
  18. 8、第一个文本带有“Add new”的实例:d(text = “ Add new ”,instance = 0)  
  19. 9、在屏幕上查找:d(text="Add new").count  
  20. d(text="Add new”)[0]#第一个  
  21. d(text="Add new”)[1]#第二个  
  22. 10、显示控件信息:view.info   
  23. 11、检查控件是否存在:d(text = “ Settings ”).exists或者d.exists(text = “ Settings ”)  
  24. 12、检查控件信息:d(text = “设置”).info  
  25. 13、文本控件操作:  
  26. d(text = “ Settings ”).get_text()   #获取小部件文本   
  27. d(text = “ Settings ”).set_text(“ My text ... ”)   #设置文本   
  28. d(text = “ Settings ”).clear_text )   #清除文字  
  29. 14、点击:  
  30. d( text = “ Settings ”).click()  
  31. #等待元素出现最多10秒钟,然后点击   
  32. d( text = “ Settings ”).click( timeout = 10)  
  33. #点击的别名   
  34. d(文本= “设置”).tap()  
  35. 15、长按:d( text = “ Settings ”).long_click()  
  36. 16、拖动元素到另一个位子:  
  37. d( text = “ Settings ”).drag_to(x,y, duration = 0.5)  
  38. d( text = “ Settings ”).drag_to( text = “ Clock ”, duration = 0.25)#clock的中心点  
  39. 17、从一点到另一点的两点手势  
  40. d(text = “ Settings ”).gesture((sx1,sy1),(sx2,sy2),(ex1,ey1),(ex2,ey2))  
  41. 18、特定UI对象上的两点手势  
  42.     ?   In,从边缘到中心  
  43.     ?   Out,从中心到边缘  
  44. #从边缘到中心。这里是“以”不“在”   
  45. d(text="Settings").pinch_in(percent=100, steps=10)  
  46. #从中心到边缘   
  47. d(text="Settings").pinch_out()  
  48. 19、等待ui出现或消失  
  49. d(text="Settings").wait(timeout=3.0) # return bool  
  50. d(text="Settings").wait_gone(timeout=1.0)  
  51. 20、#设置默认元素等待超时(秒)   
  52. d.wait_timeout =  30.0   
  53. 21、控件不知道控件的情况下  
  54. d.set_fastinput_ime(True)#切换成FastInputIME输入法   
  55. d.send_keys(“你好123abcEFG ”)# adb广播输入   
  56. d.clear_text()#清除输入框所有内容(需要android-uiautomator.apk版本> = 1.0.7 )   
  57. d.set_fastinput_ime(False)#切换成正常的输入法  
  58. 22、显示:Toast  
  59. d.make_toast("Hello world")  
  60. d.make_toast("Hello world", 1.5) # show for 1.5s  

child_by_description就是找到孙子有特定描述的儿童,其他参数与之相似child_by_text。

child_by_instance就是要找到在其子层次结构中指定实例的任何位置具有子UI元素的子元素。它在没有滚动的可见视图上执行。

详细信息请参阅下面的链接: ? UiScrollable,getChildByDescription,getChildByText,getChildByInstance

6、常见的问题:

1、发现sdk的某些功能或手机的不能用:直接打开uiautomator的应用程序(INIT成功后,就会安装上的),点击关  闭UIAutomator  或者 d.service(“ uiautomator ”).stop()

2、502错误:

  1. 控制台:adb shell am instrument -w -r -e debug false -e class com.github.uiautomator.stub.Stub \  
  2.     com.github.uiautomator.test/android.support.test.runner.AndroidJUnitRunner    

如果运行正常,启动测试之前增加一行代码d.healthcheck()

如果报错,可能是缺少某个设备组件没有安装,使用下面的命令重新初始化 python -m uiautomator2 init --reinstall

手机python -m uiautomator2 init之后,浏览器输入<device_ip:7912>,会发现一个远程控制功能,延迟非常低噢。^ _ ^

原文链接:https://blog.csdn.net/qq_38071435/article/details/80003212

原文地址:https://www.cnblogs.com/jec1999/p/8976044.html

时间: 2024-08-30 14:16:53

uiautomator2 手工翻译版的相关文章

第三方苹果开发库之ASIHTTPRequest(翻译版)

本文转载至 http://www.cnblogs.com/daguo/archive/2012/08/03/2622090.html 来自:http://www.dreamingwish.com/dream-2011/apples-third-party-development-libraries-asihttprequest.html 第三方苹果开发库之ASIHTTPRequest ASIHttpRequest库简介.配置和安装 ASIHttpRequest-创建和执行request ASIH

苹果App Store审核指南–2014最新翻译版----【转载】

苹果App Store审核指南[2014最新翻译版]–是针对2013-03-04最近一次<苹果App Store审核指南>版本的中文版本,文中红色部分是相对于前版本新增的内容,绿色部分是更改的内容. 前言 感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业,我们希望帮助您加入这个成功的组织.我们发布了<App Store审核指南>(App Store Review Guidelines),希望通过它帮您避开

Cardboard Unity SDK Reference 翻译版

最近正在准备雅思,趁机翻译了Cardboard的文档,这个文档挂在谷歌官网上,不翻墙根本看不了,翻了墙这个网页也很不稳定,经常上不去,所以就搬运了过来,不过我英语水平实在有限,这次翻译也是对自己的一次锻炼,有的地方我自己明白但是也很难表述好,还请大神轻喷. 里面有很多奇怪的词汇查不到,都是我自己猜着翻译的,还有的词查到了也不知道是啥,比如"剔除掩膜"啥的-,翻译工作量也很大,都是我自己挤时间翻译的,还请大神们指出翻译的不好的地方,英文版请见我上一篇博客:http://blog.csdn

《架构之美》这本书的翻译版就是彻头彻尾的垃圾

上周手贱,入了<架构之美>的翻译版,花了我1.5只大虾币,今天用香皂好好洗了洗手准备瞻仰来着,看了一段序就把我雷倒了. 摘取一句大家瞻仰一下: 每个事实应该是单一的.不可分解的单元(我不理解什么是事实,我从来也没有见过,什么是不可分解的单元?单元好吗?) 其他的就不说了,我已经没有勇气读不下去了,感觉话都读不通顺了,老师教育我们说翻译要遵循“信.达.雅”的原则,咱是程序员,不是读名著,这些要求有些高,但至少句子要通顺吧,约定的术语要有吧,不要老是找些外行指导内行,几位翻译者的学历和经历都很NB

关于中文翻译版书籍的一点小吐槽

作为一个“高大上”的软件工程师(通俗点就是屌丝程序员,^_^),时刻保持学习的斗志,才能有朝一日“出人头地”,成为他人口中的大牛.所以LZ也不敢落后,想利用工作闲暇之余多读一些书.但是备受推崇的书籍大都是英文版,好在有好多“大师们”的中文翻译版.这真是满足了像我这种英语差,而又想学高大上技术的渴望.于是找来翻译版书籍爽快的学一场.可是读着读着总是会遇到一些晦涩难懂的句子,甚至一句话连续读上几遍也还是搞不清其本意(不知道广大园友有没有过这种感触),坚持读下去真的感觉痛苦至极啊.心里不免想,是自己阅

PHPExcel中文开发手册翻译版+应用实例

英文原版在线文档 https://github.com/PHPOffice/PHPExcel/wiki/User%20Documentation%20AutoFilters 英文doc pdf 版本下载 http://phpexcel.codeplex.com/releases/view/119187 2016年8月3日10:26:02 以下是翻译版,基于 1.8.0英文doc版本翻译 如有问题,请反馈楼主 PHPExcel AutoFilter Reference developer docu

苹果商店应用审核指南(2014年翻译版)

官方文档地址 苹果商店应用审核指南 前言 非常高兴您能付出宝贵的时间和精力来开发iOS应用.成千上万的开发者的经历表明,无论从专业技术还是经济收入上,开发iOS应用都是个有意义的事情,我们将帮助你更快成功,成为其中的一员.这篇App Store Review Guidlines主要是为了协助你弄清楚开发过程中会遇到的一些疑惑,加快你提交应用后的审核过程. 我们认为应用不同于书籍和歌曲,我们不支持这些.如果你要讨论宗教信仰,那么应该去写书.如果你要谈论性,那么写书,或者去写歌,或者去做一个生理卫生

ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1-1 手把手引进门 1-2 进阶 1-3 杂项 (相关理论知识) 第一篇含两个步骤. 1-1-1 ASP.NET Core & Entity Framework Core 后端(内核)含两篇 ( 第一篇链接    

《Linux 黑客基础教程》翻译版发布

本文作者:两块(信安之路高校安全联盟负责人) Linux Basics for Hackers: Getting Started with Networking, Scripting, and Security in Kali 此书由 No Starch Press 出版社在 2018 年 12 月份出版,亚马逊 Linux 书籍销售排行榜第 6 名. 作者 OccupyTheWeb 是一名信息安全顾问.调查取证专家和培训讲师,拥有 20+ 年的行业经验.他维护着 HackersArise 培训