Python Appium 開啟Android測試之路
阿新 • • 發佈:2017-09-16
ppp encoding dev aps 發出 cli 進行 utf8 androi
driver.find_element_by_accessibility_id()
driver.find_element_by_android_uiautomator()
driver.find_element_by_ios_uiautomation()
(第三個是ios的專用的)
resrouce-id屬性是id:
driver.find_element_by_id(‘username‘)
1、獲取 Android app的Activity
打開終端cmd,先cd進入到剛才下載的“新浪.apk”目錄下,然後使用aapt dump badging xxx.apk命令獲取包內信息。註意,啟動類名稱一個字母都不能錯。
aapt dump badging 新浪.apk cat>d:/log.txt 這樣可以將信息指定到某一文件下然後 查看
2、啟動微博
#-*-coding:utf-8-*- #Time:2017/7/20 18:06 #Author:YangYangJun import time from appium importwebdriver desired_caps = {} desired_caps[‘platformName‘] = ‘Android‘ desired_caps[‘platformVersion‘] = ‘6.0‘ desired_caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘ desired_caps[‘appPackage‘] = ‘com.sina.weibo‘ desired_caps[‘appActivity‘] = ‘com.sina.weibo.SplashActivity‘ driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, desired_caps) driver.implicitly_wait(5) time.sleep(3) driver.quit()
3、元素定位
3.1、appium的webdriver提供了11種元素定位的方法,在selenium的基礎上擴展了三個,可以在pycharm裏面輸入driver.find_element_by然後會自動匹配出來 多的三個:driver.find_element_by_accessibility_id()
driver.find_element_by_android_uiautomator()
driver.find_element_by_ios_uiautomation()
3.2、下面一一舉例進行 介紹
3.2.1、元素定位本篇主要介紹如何使用uiautomatorviewer,通過定位到頁面上的元素,然後進行相應的點擊等操作.
uiautomatorviewer是android-sdk自帶的一個元素定位工具,非常簡單好用,使用uiautomatorviewer,你可以檢查一個應用的UI來查看應用的布局和組件以及相關的屬性。
啟動uiautomatorviewer.bat
打開目錄D:\SProgram\Sdk\tools
雙擊啟動,啟動之後出現如下界面
如果不喜歡雙擊啟動的話,也可以在cmd裏面通過指令啟動
先cd到tools目錄下,然後輸入uiautomatorviewer.bat回車後啟動服務
3.2.1、find_element_by_accessibility_id
driver.find_element_by_accessibility_id(u"我的").click()
3.2.2、通過id定位元素
resrouce-id屬性是id:
driver.find_element_by_id(‘username‘)
3.2.3、通過name定位元素
text屬性是name
driver.find_element_by_name(‘password‘)
4、結合公司剛開發出來的app,進行項目實訓
#-*-coding:utf-8-*- #Time:2017/7/21 16:32 #Author:YangYangJun import time import unittest from appium import webdriver import sys reload(sys) sys.setdefaultencoding(‘utf8‘) class Login(unittest.TestCase): def setUp(self): self.desired_caps = {} self.desired_caps[‘platformName‘] = ‘Android‘ self.desired_caps[‘platformVersion‘] = ‘6.0‘ self.desired_caps[‘deviceName‘] = ‘N79SIV5PVCSODAQC‘ self.desired_caps[‘appPackage‘] = ‘com.xxxx.mrg‘ self.desired_caps[‘appActivity‘] = ‘com.uzmap.pkg.EntranceActivity‘ #隱藏鍵盤 self.desired_caps[‘unicodeKeyboard‘] = True self.desired_caps[‘resetKeyboard‘] = True self.driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, self.desired_caps) #self.driver.implicitly_wait(15) #測試異常登錄-用戶不存在 def test_aNoUserLogin(self): driver = self.driver time.sleep(5) driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登錄/註冊").click() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).send_keys(‘xzbuyer1‘) time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).send_keys(‘111111‘) time.sleep(2) driver.find_element_by_accessibility_id(u"登錄").click() time.sleep(18) get_alertMessage = driver.find_elements_by_android_uiautomator(‘new Uiselector().resourceId("android:id/message")‘).get_attribute(‘name‘) time.sleep(2) if get_alertMessage == u‘用戶不存在‘: print u"用戶不存在,用例執行成功!" else: print u"用例執行失敗!" def test_bNoPassLogin(self): driver = self.driver time.sleep(5) driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登錄/註冊").click() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).send_keys(‘xzbuyer‘) time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).send_keys(‘1111112‘) time.sleep(2) driver.find_element_by_accessibility_id(u"登錄").click() time.sleep(18) get_alertMessage = driver.find_elements_by_android_uiautomator(‘new Uiselector().resourceId("android:id/message")‘).get_attribute(‘name‘) time.sleep(2) print get_alertMessage[0:5] # if get_alertMessage == u‘用戶不存在‘: # print u"用戶不存在,用例執行成功!" # else: # print u"用例執行失敗!" # # 測試正常登錄 def test_cLogin(self): driver = self.driver time.sleep(5) driver.find_element_by_accessibility_id(u"我的").click() time.sleep(5) driver.find_element_by_accessibility_id(u"登錄/註冊").click() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("username")‘).send_keys(‘xzbuyer‘) time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).clear() time.sleep(2) driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("password")‘).send_keys(‘111111‘) time.sleep(2) driver.find_element_by_accessibility_id(u"登錄").click() time.sleep(2) # 判斷是否登錄成功 print driver.find_element_by_accessibility_id(u"西藏醫藥銷售有限公司").get_attribute(‘name‘) nickName = driver.find_element_by_accessibility_id(u"西藏醫藥銷售有限公司").get_attribute(‘name‘) temp = nickName[0:2] print temp if nickName == u‘西藏醫藥銷售有限公司‘: print ‘登錄成功!‘ else: print ‘登錄失敗!‘ def tearDown(self): self.driver.close_app() self.driver.quit() if __name__ == "__main__": unittest.main()
Python Appium 開啟Android測試之路