uiautomator +python 實現安卓自動化


     很多人看到這個題目我相信他們可能會說,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技術的奧妙,扯淡荒廢的光陰。

贈言: 你在休息的時候,別人在進步,你在打鬧的時候別人在進步。 不要羡慕別人的成功,因為別人的成功付出了自己汗水




 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM