詳解基于Android的Appium+Python自動(dòng)化腳本編寫
1.Appium
Appium是一個(gè)開源測試自動(dòng)化框架,可用于原生,混合和移動(dòng)Web應(yīng)用程序測試, 它使用WebDriver協(xié)議驅(qū)動(dòng)iOS,Android和Windows應(yīng)用程序。
通過Appium,我們可以模擬點(diǎn)擊和屏幕的滑動(dòng),可以獲取元素的id和classname,還可以根據(jù)操作生成相關(guān)的腳本代碼。
下面開始Appium的配置。
appPackage和APPActivity的獲取
任意下載一個(gè)app
解壓
但是解壓出來的xml文件可能是亂碼,所以我們需要反編譯文件。
逆向AndroidManifest.xml
下載AXMLPrinter2.jar文件,逆向xml文件:命令行輸入以下命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml ->AndroidManifest.txt
獲得以下可以查看的TXT文件
尋找?guī)в衛(wèi)auncher 的Activity
尋找manifest里面的package
Devicename的獲取
通過命令行輸入 adb devices:
appium的功能介紹
下面將根據(jù)上圖序號(hào)一一介紹功能:
選中界面元素,顯示元素相關(guān)信息
模擬滑動(dòng)屏幕,先點(diǎn)擊一下代表觸摸起始位置,在點(diǎn)擊一下代表觸摸結(jié)束為止
模擬點(diǎn)擊屏幕
模擬手機(jī)的返回按鈕
刷新左邊的頁面,使之與手機(jī)同步
記錄模擬操作,生成相關(guān)腳本
根據(jù)元素的id或者其他相關(guān)信息查找元素
復(fù)制當(dāng)前界面的xml布局
文件退出
2.Python的腳本
元素定位的使用
(1).xpath定位
xpath定位是一種路徑定位方式,主要是依賴于元素絕對(duì)路徑或者相關(guān)屬性來定位,但是絕對(duì)路徑xpath執(zhí)行效率比較低(特別是元素路徑比較深的時(shí)候),一般使用比較少。
通常使用xpath相對(duì)路徑和屬性定位。
by_xpath.py
from find_element.capability import driver driver.find_element_by_xpath('//android.widget.EditText[@text="請(qǐng)輸入用戶名"]').send_keys('123456') driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]').send_keys('123456') driver.find_element_by_xpath('//android.widget.Button').click() driver.find_element_by_xpath('//[@class="android.widget.Button"]').click()
(2).classname定位
classname定位是根據(jù)元素類型來進(jìn)行定位,但是實(shí)際情況中很多元素的classname都是相同的,
如用戶名和密碼都是clasName屬性值都是:“android.widget.EditText” 因此只能定位第一個(gè)元素也就是用戶名,而密碼輸入框就需要使用其他方式來定位,這樣其實(shí)很雞肋.一般情況下如果有id就不必使用classname定位。
by_classname.py
from find_element.capability import driver driver.find_element_by_class_name('android.widget.EditText').send_keys('123565') driver.find_element_by_class_name('android.widget.EditText').send_keys('456879') driver.find_element_by_class_name('android.widget.Button').click()
(3).id定位
日常生活中身邊可能存在相同名字的人,但是每個(gè)人的身份證號(hào)碼是唯一的,在app界面元素中也可以使用id值來區(qū)分不同的元素,然后進(jìn)行定位操作。
Appium中可以使用 find_element_by_id() 方法來進(jìn)行id定位。
driver.find_element_by_id('android:id/button2').click() driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
3.示例:模擬軟件的自動(dòng)注冊
首先配置連接屬性
desired_caps={} # 所使用的平臺(tái) desired_caps['platformName']='Android' # 所使用的手機(jī)的名字 可以通過 adb devices 獲得 desired_caps['deviceName']='127.0.0.1:62001' # ANDROID 的版本 desired_caps['platforVersion']='5.1.1' # app 的路徑 desired_caps['app']=r'D:\extend\kaoyanbang.apk' # app的包名 desired_caps['appPackage']='com.tal.kaoyan' # app 加載頁面 desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity' # 設(shè)置每次是否清除數(shù)據(jù) desired_caps['noReset']='False' # 是否使用unicode鍵盤輸入,在輸入中文字符和unicode字符時(shí)設(shè)置為true desired_caps['unicodeKeyboard']="True" # 是否將鍵盤重置為初始狀態(tài),設(shè)置了unicodeKeyboard時(shí),在測試完成后,設(shè)置為true,將鍵盤重置 desired_caps['resetKeyboard']="True" # appium服務(wù)器的連接地址 driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) driver.implicitly_wait(2)
編寫操作腳本
import random import time driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click() username='zx2019'+'F2LY'+str(random.randint(1000,9000)) print('username: %s' %username) driver.find_element_by_id('com.tal.kaoyan:id/activity_register_username_edittext').send_keys(username) password='zxw2018'+str(random.randint(1000,9000)) print('password: %s' %password) driver.find_element_by_id('com.tal.kaoyan:id/activity_register_password_edittext').send_keys(password) email='51zxw'+str(random.randint(1000,9000))+'@163.com' print('email: %s' %email) driver.find_element_by_id('com.tal.kaoyan:id/activity_register_email_edittext').send_keys(email) #點(diǎn)擊進(jìn)入考研幫 driver.find_element_by_id('com.tal.kaoyan:id/activity_register_register_btn').click() #專業(yè)選擇 driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_major').click() driver.find_elements_by_id('com.tal.kaoyan:id/major_subject_title')[1].click() driver.find_elements_by_id('com.tal.kaoyan:id/major_group_title')[2].click() driver.find_elements_by_id('com.tal.kaoyan:id/major_search_item_name')[1].click() #院校選擇 driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_school').click() driver.tap([(182,1557),]) driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/' 'android.widget.LinearLayout/android.widget.FrameLayout/' 'android.widget.LinearLayout/android.widget.FrameLayout/android.widget.' 'RelativeLayout/android.widget.ExpandableListView/android.widget.' 'LinearLayout[1]/android.widget.TextView[1]').click() driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/' 'android.widget.LinearLayout/android.widget.FrameLayout/' 'android.widget.LinearLayout/android.widget.FrameLayout/' 'android.widget.RelativeLayout/android.widget.ExpandableListView/' 'android.widget.LinearLayout[4]/android.widget.TextView').click() time.sleep(2) driver.tap([(983,1354),]) # driver.find_elements_by_id('com.tal.kaoyan:id/more_forum_title')[1].click() # driver.find_elements_by_id('com.tal.kaoyan:id/university_search_item_name')[1].click() driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_goBtn').click() print('注冊成功')
到此這篇關(guān)于詳解基于Android的Appium+Python自動(dòng)化腳本編寫的文章就介紹到這了,更多相關(guān)Android的Appium+Python自動(dòng)化腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android為按鈕控件綁定事件的五種實(shí)現(xiàn)方式
本篇文章主要是介紹了Android為按鈕控件綁定事件的五種實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11Android開發(fā)TextvView實(shí)現(xiàn)鏤空字體效果示例代碼
這篇文章主要介紹了Android開發(fā)TextvView實(shí)現(xiàn)鏤空字體效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題
今天小編就為大家分享一篇關(guān)于Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Android Gradle依賴管理、去除重復(fù)依賴、忽略的方式
這篇文章主要介紹了Android Gradle依賴管理、去除重復(fù)依賴、忽略的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android自定義驗(yàn)證碼輸入框的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Android自定義驗(yàn)證碼輸入框的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02Android實(shí)現(xiàn)微信自動(dòng)向附近的人打招呼(AccessibilityService)
這篇文章主要為大家詳細(xì)介紹了實(shí)現(xiàn)微信自動(dòng)向附近的人打招呼,實(shí)現(xiàn)收到指定賬戶推送文章時(shí)自動(dòng)進(jìn)入微信打開鏈接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Android仿zaker用手向上推動(dòng)的特效開發(fā)【推動(dòng)門效果】(附demo源碼下載)
這篇文章主要介紹了Android仿zaker用手向上推動(dòng)的特效,結(jié)合完整實(shí)例形式分析了Android滑動(dòng)切換效果的實(shí)現(xiàn)步驟與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07