python安卓自動化實現方法_uiautomator +python 實現安卓UI自動化

簡單實例

注:安卓6.0以上的手機不會自動安裝app-uiautomator.apk和app-uiautomator-test.apk,需要手動安裝,否則報錯ioerror RPC server not started

uiautomator +python+HTMLTestRunner 安卓UI自動化實現

#coding:utf-8

from uiautomator importDeviceimportosimportunittestfrom HTMLTestRunner importHTMLTestRunnerimporttime

d=Device(‘127.0.0.1:62001‘)printd.infoclassTestEle(unittest.TestCase):defsetUp(self):

cmd= ‘adb shell am start me.ele/me.ele.application.ui.home.HomeActivity‘os.system(cmd)

cmd= ‘adb shell am start me.ele/me.ele.shopping.ui.search.SearchActivity‘os.system(cmd)deftearDown(self):

cmd=‘adb shell am force-stop me.ele‘os.system(cmd)deftestSearch(self):

d(resourceId=‘me.ele:id/editor‘).set_text(‘coco‘)

d(resourceId=‘me.ele:id/search‘).click()

d.screenshot(r"E:\code\auto\ele_search.png")

self.assertTrue(d(text="coco").exists)if __name__ == ‘__main__‘:

suite=unittest.TestSuite()

suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestEle))

now= time.strftime(‘%Y-%m-%d‘, time.localtime(time.time()))

test_dir= r‘E:\code\auto‘filename= test_dir + ‘/‘ + now + ‘test_result.html‘fp= file(filename,‘wb‘)

runner= HTMLTestRunner(stream=fp, title=‘ele demo by uiautomator‘, description= u‘測試結果‘)

runner.run(suite)

注:

1.通過adb devices獲取設備名,127.0.0.1:62001是夜神模擬器的設備名

2.通過adb shell dumpsys window | findstr mCurrentFocus命令獲取apk應用名和.MainActivity,如me.ele/me.ele.application.ui.home.HomeActivity

3.‘adb shell am start? me.ele/me.ele.application.ui.home.HomeActivity‘ 啟動模擬器上app的activity,使用真機無法啟動,可能是app應用不允許外部訪問

C:\Users\admin>adb shell am start? me.ele/me.ele.application.ui.home.HomeActivity

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=me.ele/.application.ui.home.HomeActivity }

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]

flg=0x10000000 cmp=me.ele/.application.ui.home.HomeActivity } from null (pid=21101, uid=2000) not exported from uid 10046

at android.os.Parcel.readException(Parcel.java:1468)

at android.os.Parcel.readException(Parcel.java:1422)

at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2150)

at com.android.commands.am.Am.runStart(Am.java:694)

at com.android.commands.am.Am.onRun(Am.java:272)

at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)

at com.android.commands.am.Am.main(Am.java:78)

at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)

at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)

at dalvik.system.NativeStart.main(Native Method)

4.通過uiautomatorviewer獲取resourceId

運行結果:d(text="coco").exists包含了搜索欄的‘coco‘,故而斷言成功

20180516121128409195.png

20180516121128626968.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541942.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES6特性之:Spread操作符

Spread操作符(...),也稱作展開操作符,作用是將可迭代的(Iterable)對象進行展開。 比如有2個數組,我們要將其中一個數組中所有元素插入到另一個數組中,通過Spread操作符,就可以這樣進行: var fruits ["…

Java類class isMemberClass()方法及示例

類的類isMemberClass()方法 (Class class isMemberClass() method) isMemberClass() method is available in java.lang package. isMemberClass()方法在java.lang包中可用。 isMemberClass() method is used to check whether the underlying class is a member class or not.…

velocity自定義函數_velocity基本語法和總結

一:基本語法:1、#set(#a "a")$a ##輸出語句時直接寫變量的名稱即可2、判斷語句:#if($a "a") ##判斷語句沒有括號,也是直接輸出$a3、數組:#set($arry [0..10])$foreach($i in $arry)$i ##換行#e…

docker-machine指定cpu個數

序 給本機的一個服務壓測,結果半天qps上不了萬,而且經常跑滿cpu,搞半天發現,docker里頭才1核1G內存。原來boot2docker默認給docker-machine分配1個cpu和1G內存。 修改配置 docker-machine create \--driver virtualbox \--virtual…

Java ClassLoader findResources()方法與示例

ClassLoader類findResources()方法 (ClassLoader Class findResources() method) findResources() method is available in java.lang package. findResources()方法在java.lang包中可用。 findResources() method is used to find all the resources with the given resource …

Java ByteArrayInputStream mark()方法與示例

ByteArrayInputStream類mark()方法 (ByteArrayInputStream Class mark() method) mark() method is available in java.util package. mark()方法在java.util包中可用。 mark() method is used to set the current mark position in the stream from where read or write can b…

java mediainfo.dll_MediaInfo庫的簡單使用

想到一個問題, 如何獲得一個圖像文件(比如jpg, bmp, png)的信息. 自己查查文件的格式, 寫一個解析, 應該不困難; 但是找了下現成的, 發現MediaInfo庫已經可以非常好的實現需要的功能了.MediaInfo可以在sourceforge上找到, 是一個解析視頻,音頻, 圖片等媒體文件的庫. 可以得到文…

Redis配置和常用命令

1 redis.conf配置文件:2 引用3 #是否作為守護進程運行4 daemonize yes5 #配置pid的存放路徑及文件名,默認為當前路徑下6 pidfile redis.pid7 #Redis默認監聽端口8 port 63799 #客戶端閑置多少秒后,斷開連接 10 timeout 300 11 #日志顯示級別 …

oracle中dbms_DBMS中的功能依賴性和屬性關閉

oracle中dbms功能依賴 (Functional Dependency) A relational Database management System (RDBMS) represents the database o a collection of relations/tables. A functional dependency is a constraint between two sets of attributes in a relation. It is the propert…

java invoke 泛型_利用Java反射機制和泛型,全自動解析json

有啦這個簡直,太爽啦,利用Java 反射機制,利用Class 就可以得到 類的 變量 Field[] fieldscls.getDeclaredFields();還可以通過類中 的方法名字 去執行這個方法m1 cls.getDeclaredMethod(getMothodName(fields[j].getName()), String.class)…

2_C語言中的數據類型 (四)整數與無符號數

1.1 sizeof關鍵字 sizeof是c語言關鍵字,功能是求指定數據類型在內存中的大小,單位:字節 sizeof與size_t類型 1.1 int類型 1.1.1 int常量,變量 int就是32位的一個二進制整數,在內存當中占據4個字節…

python 示例_Python TextCalendar類別| pryear()方法與示例

python 示例Python TextCalendar.pryear()方法 (Python TextCalendar.pryear() Method) pryear() method is an inbuilt method of the TextCalendar class of calendar module in Python. It works on text calendars. It uses an instance of TextCalendar class and prints …

Spring實戰——通過Java代碼裝配bean

上篇說的是無需半行xml配置完成bean的自動化注入。這篇仍然不要任何xml配置,通過Java代碼也能達到同樣的效果。 這么說,是要把上篇的料拿出來再煮一遍? 當然不是,上篇我們幾乎都在用注解的方式如ComponentScan Component等就完成了…

java 謂詞_java8-謂詞(predicate)

傳遞代碼我們首先看一個例子,假設你有一個 Apple 類,它有一個getColor方法,還有一個變量inventory保存著一個Apples的列表。你可能想要選出所有的綠蘋果,并返回一個列表。通常我們用篩選(filter)一詞來表達這個概念。在 Java 8之前…

getlong_Java LocalDateTime類| 帶示例的getLong()方法

getlongLocalDateTime類的getLong()方法 (LocalDateTime Class getLong() method) getLong() method is available in java.time package. getLong()方法在java.time包中可用。 getLong() method is used to get the value as long for the given temporal field from this dat…

java.io和util的區別_Java NIO與IO的區別和比較

Java NIO與IO的區別和比較導讀J2SE1.4以上版本中發布了全新的I/O類庫。本文將通過一些實例來簡單介紹NIO庫提供的一些新特性:非阻塞I/O,字符轉換,緩沖以及通道。一. 介紹NIONIO包(java.nio.*)引入了四個關鍵的抽象數據類型,它們共…

Java LocalDate類| isSupported()方法與示例

LocalDate類isSupported()方法 (LocalDate Class isSupported() method) Syntax: 句法: public boolean isSupported (TemporalField t_field);public boolean isSupported (TemporalUnit t_unit);isSupported() method is available in java.time package. isSupp…

區塊鏈+稅務的思考

2016年,區塊鏈技術火了!各大金融公司、互聯網巨頭都競相參加到區塊鏈技術的研究中。我們公司的業務是稅務的信息化領域,也希望通過區塊鏈技術的應用,來提升為財稅領域的服務。 區塊鏈技術優缺點總結 下圖是對區塊鏈技術的一些特點…

java hasset 順序_java集合排序問題

List: 元素是有序的,元素可以重復,因為該集合體系有索引(腳標)常用的子類對象:1————ArrayList 底層的數據結構是使用的數組結構特點:查詢速度快,但是增刪比較慢2————LinkedList底層的數據結構使用的是鏈表結構…