溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

發(fā)布時(shí)間:2020-08-21 04:20:36 來(lái)源:腳本之家 閱讀:339 作者:zx 欄目:開(kāi)發(fā)技術(shù)

1.Appium

Appium是一個(gè)開(kāi)源測(cè)試自動(dòng)化框架,可用于原生,混合和移動(dòng)Web應(yīng)用程序測(cè)試, 它使用WebDriver協(xié)議驅(qū)動(dòng)iOS,Android和Windows應(yīng)用程序。

通過(guò)Appium,我們可以模擬點(diǎn)擊和屏幕的滑動(dòng),可以獲取元素的id和classname,還可以根據(jù)操作生成相關(guān)的腳本代碼。
下面開(kāi)始Appium的配置。

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

appPackage和APPActivity的獲取

任意下載一個(gè)app
解壓

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

但是解壓出來(lái)的xml文件可能是亂碼,所以我們需要反編譯文件。
逆向AndroidManifest.xml
下載AXMLPrinter2.jar文件,逆向xml文件:命令行輸入以下命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml ->AndroidManifest.txt
獲得以下可以查看的TXT文件

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

尋找?guī)в衛(wèi)auncher 的Activity

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

尋找manifest里面的package

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

Devicename的獲取

通過(guò)命令行輸入 adb devices:

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

appium的功能介紹

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

下面將根據(jù)上圖序號(hào)一一介紹功能:

選中界面元素,顯示元素相關(guān)信息

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

模擬滑動(dòng)屏幕,先點(diǎn)擊一下代表觸摸起始位置,在點(diǎn)擊一下代表觸摸結(jié)束為止

模擬點(diǎn)擊屏幕

模擬手機(jī)的返回按鈕

刷新左邊的頁(yè)面,使之與手機(jī)同步

記錄模擬操作,生成相關(guān)腳本

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

根據(jù)元素的id或者其他相關(guān)信息查找元素

詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)

復(fù)制當(dāng)前界面的xml布局

文件退出

2.Python的腳本

元素定位的使用

(1).xpath定位

xpath定位是一種路徑定位方式,主要是依賴(lài)于元素絕對(duì)路徑或者相關(guān)屬性來(lái)定位,但是絕對(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ù)元素類(lèi)型來(lái)進(jìn)行定位,但是實(shí)際情況中很多元素的classname都是相同的,
如用戶名和密碼都是clasName屬性值都是:“android.widget.EditText” 因此只能定位第一個(gè)元素也就是用戶名,而密碼輸入框就需要使用其他方式來(lái)定位,這樣其實(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值來(lái)區(qū)分不同的元素,然后進(jìn)行定位操作。
Appium中可以使用 find_element_by_id() 方法來(lái)進(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)注冊(cè)

首先配置連接屬性

desired_caps={}
# 所使用的平臺(tái)
desired_caps['platformName']='Android'
# 所使用的手機(jī)的名字  可以通過(guò) 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 加載頁(yè)面
desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
# 設(shè)置每次是否清除數(shù)據(jù)
desired_caps['noReset']='False'
# 是否使用unicode鍵盤(pán)輸入,在輸入中文字符和unicode字符時(shí)設(shè)置為true
desired_caps['unicodeKeyboard']="True"
# 是否將鍵盤(pán)重置為初始狀態(tài),設(shè)置了unicodeKeyboard時(shí),在測(cè)試完成后,設(shè)置為true,將鍵盤(pán)重置
desired_caps['resetKeyboard']="True"
# appium服務(wù)器的連接地址
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(2)

編寫(xiě)操作腳本

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()
#專(zhuān)業(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('注冊(cè)成功')

到此這篇關(guān)于詳解基于Android的Appium+Python自動(dòng)化腳本編寫(xiě)的文章就介紹到這了,更多相關(guān)Android的Appium+Python自動(dòng)化腳本內(nèi)容請(qǐng)搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI