
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 import webdriver
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()
(第三個是ios的專用的)
3.2、下面一一舉例進行介紹
3.2.1、元素定位本篇主要介紹如何使用uiautomatorviewer,通過定位到頁面上的元素,然后進行相應的點擊等操作.
uiautomatorviewer是android-sdk自帶的一個元素定位工具,非常簡單好用,使用uiautomatorviewer,你可以檢查一個應用的UI來查看應用的布局和組件以及相關的屬性。
啟動uiautomatorviewer.bat
打開目錄D:\SProgram\Sdk\tools

雙擊啟動,啟動之后出現(xiàn)如下界面

如果不喜歡雙擊啟動的話,也可以在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、結合公司剛開發(fā)出來的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'用戶不存在,用例執(zhí)行成功!'
else:
print u'用例執(zhí)行失??!'
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'用戶不存在,用例執(zhí)行成功!'
# else:
# print u'用例執(zhí)行失敗!'
#
# 測試正常登錄
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'西藏醫(yī)藥銷售有限公司').get_attribute('name')
nickName = driver.find_element_by_accessibility_id(u'西藏醫(yī)藥銷售有限公司').get_attribute('name')
temp = nickName[0:2]
print temp
if nickName == u'西藏醫(yī)藥銷售有限公司':
print '登錄成功!'
else:
print '登錄失??!'
def tearDown(self):
self.driver.close_app()
self.driver.quit()
if __name__ == '__main__':
unittest.main()