很多人看到這個題目我相信他們可能會說,uiautomator不是java開發的嗎?python怎么用呢,其實呢 ,一開始我也是這么想的,看了金陽光老師的視頻,也是用java寫的,我表示不服,我要科學上網去查查看,結果還真有,感謝國內 賀曉聰大神進行的封裝。github地址:https://github.com/xiaocong/uiautomator ,而且給出來了詳細的教程,毫不猶豫的給大神點個贊。
安裝起來很簡單
pip install uiautomator
我們來看下官方給的第一個小demo
from uiautomator import device as d d.screen.on() d(text="Clock").click()
小試一下,用的感覺還不錯呢。
需要安裝安裝sdk 和ANDROID_HOME,並且安卓設備可以通過adb鏈接,
如果就一個設備導入下面的
from uiautomator import device as d
如果多個設備需要用
from uiautomator import Device d = Device('014E05DE0F02000E')
from uiautomator import Device d = Device('014E05DE0F02000E', adb_server_host='192.168.1.68', adb_server_port=5037)
下面我們來看下支持的定位方式
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
幾乎所有的定位方式都支持,比appium支持的定位方式多不少,個人感覺。
有興趣的可以去看下官方給的api。
下面呢我利用我們公司的app做了一個demo,使用ddt數據驅動,定位方式呢,就使用id。
from uiautomator import device as d import unittest,os,ddt,time from uiautomotpr import HTMLTestRunner data=[{'username':15964636199,'password':'111111'},{'username':15964636199,'password':'liwanlei'},{'username':15964636199,'password':'liwanlei123'}] def assert_i(cm): if cm.exists: return True else: return False @ddt.ddt class TestaixuetangCase(unittest.TestCase): def setUp(self): cmd = 'adb shell am start com.aixuetang.teacher/.activities.LoginActivity ' os.system(cmd) def tearDown(self): cmd='adb shell am force-stop com.aixuetang.teacher' os.system(cmd) @ddt.data(*data) def testlogin(self,data): d(resourceId='com.aixuetang.teacher:id/et_username').set_text(data['username']) d(resourceId='com.aixuetang.teacher:id/et_password').set_text(data['password']) d(resourceId='com.aixuetang.teacher:id/tv_login').click() assert_m=assert_i(cm=d(resourceId='com.aixuetang.teacher:id/tv_login')) self.assertTrue(assert_m) if __name__=='__main__': suite = unittest.TestSuite() now = time.strftime('%Y-%m%d', time.localtime(time.time())) report_dir = r'%s.html' % now suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestaixuetangCase)) re_open = open(report_dir, 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream=re_open, title='愛學堂demo by uiautomator', description='測試結果') runner.run(suite)
我們來看下運行結果
三個測試用例28秒搞定,速度還算快,更多的應用還在探索中,
這里作者只是用了一個小demo, 其實網上還有很多的例子,https://my.oschina.net/yangyanxing/blog/498403 這個例子就不錯。
以后繼續探索吧,
歡迎大家可以來和我一起學習,
qq群:194704520 ,歡迎大家可以前來一起來探索美妙的IT人生,探索iT技術的奧妙,扯淡荒廢的光陰。
贈言: 你在休息的時候,別人在進步,你在打鬧的時候別人在進步。 不要羡慕別人的成功,因為別人的成功付出了自己汗水。