#Appium+Python實(shí)現(xiàn)自動(dòng)化測試
創(chuàng)新互聯(lián)專注于尼勒克網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供尼勒克營銷型網(wǎng)站建設(shè),尼勒克網(wǎng)站制作、尼勒克網(wǎng)頁設(shè)計(jì)、尼勒克網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造尼勒克網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供尼勒克網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
官方的概述為:
Appium is an open source test automation framework for use with native,
hybrid and mobile web apps. It drives iOS, Android,
and Windows apps using the WebDriver protocol.
Appium是一個(gè)開源的測試自動(dòng)化框架,用于本地、混合和移動(dòng)Web應(yīng)用程序。
它使用WebDevices協(xié)議驅(qū)動(dòng)iOS、Android和Windows應(yīng)用程序。也就是可以用它來幫助我們實(shí)現(xiàn)自動(dòng)化測試,代替人為的點(diǎn)擊,每次發(fā)版都能夠按照案例清單完整的跑一套流程,保證當(dāng)前版本的穩(wěn)定性。
支持多種語言開發(fā)定制
python,javaSprict,java,ruby,Objective C,php,.net,RobotFramework
其中Android SDK ≥ 16
支持多平臺(tái)
mac和Windows
Appium官網(wǎng),點(diǎn)擊downLoad即可
1:安裝node
2:npm install -g appium
3:npm install -g appium-doctor
appium-doctor是檢查你的本地環(huán)境是否正常的工具
注:如果權(quán)限問題請(qǐng)加上sudo,appium-doctor在新版appium已經(jīng)移除,需要利用npm安裝
sudo npm install -g appium-doctor,安裝完成后輸入appium-doctor檢測環(huán)境是否正常
如果遇到缺少js文件錯(cuò)誤,說明你的node版本太低,需要升級(jí)nodejs,升級(jí)的方式為
1: sudo npm cache clean -f 清楚nodejs的cache
2:sudo npm install -g n 管理npm的工具
3:sudo n stable 升級(jí)node
4: sudo npm install npm@latest -g 更新npm
4:node -v查看node版本(最新為11.4.0)
再次運(yùn)行appium-doctor查看本地環(huán)境配置是否正常,不正常修復(fù)即可
安裝方式網(wǎng)上很多,不在闡述,目前我用的是python3.7
推薦的ide為:Pycharm
from appium import webdriver
import time
class UiTest(object):
def __init__(self):
# 設(shè)備信息
self.config = {
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "Pixel XL",
"automationName": "app",
"app": '/Users/davidxiong/Desktop/wx.apk',
}
# 有多重模擬點(diǎn)擊方式:
# 1:坐標(biāo),
# 2:id
# 3:xpath
# 4:name,這邊我采用坐標(biāo)和xpath,因?yàn)槲⑿诺脑豬d會(huì)動(dòng)態(tài)改變
# 手機(jī)號(hào)元素路徑
self.phone = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.EditText'
# 手機(jī)號(hào)點(diǎn)擊登錄元素路徑
self.phone_enter = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.Button[2]'
# 密碼路徑
self.pass_word = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.EditText'
# 密碼確認(rèn)路徑
self.pass_word_enter = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.Button[2]'
# 關(guān)閉匹配框
self.close_match = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.Button[1]'
# 個(gè)人中心
self.mine_info = '//android.widget.FrameLayout[@content-desc="當(dāng)前所在頁面,與的聊天"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ListView/android.widget.LinearLayout[1]/android.widget.RelativeLayout/android.widget.LinearLayout'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.config)
# editText輸入
def edit_input(self, et_id, content, xpath='', timer=-1):
if xpath == '':
pl = self.driver.find_element_by_id(et_id)
else:
pl = self.driver.find_element_by_xpath(xpath)
if timer != -1:
time.sleep(timer)
pl.send_keys(content)
# 點(diǎn)擊事件
def click(self, btn_id, xpath='', timer=-1):
if timer != -1:
time.sleep(timer)
if xpath == '':
self.driver.find_element_by_id(btn_id).click()
else:
self.driver.find_element_by_xpath(xpath).click()
def run(self):
time.sleep(2)
# 點(diǎn)擊登錄
self.driver.tap([(259, 1773)])
# 輸入手機(jī)號(hào)
self.edit_input('ht', '你的賬號(hào)', xpath=self.phone, timer=1)
# 點(diǎn)擊下一步,這邊采用xpath
self.click('akb', xpath=self.phone_enter)
# 輸入密碼
time.sleep(2)
self.edit_input('ht', '密碼', xpath=self.pass_word, timer=1)
# 登錄R
self.click('akb', xpath=self.pass_word_enter)
time.sleep(8)
# 關(guān)閉提示匹配通訊錄彈出框
self.click('akb', xpath=self.close_match)
# 等地同步數(shù)據(jù)
time.sleep(30)
# 點(diǎn)擊我的,這邊采用坐標(biāo)
self.driver.tap([(933, 1823)])
# 查看我的個(gè)人信息
self.click('akb', xpath=self.mine_info)
if __name__ == "__main__":
UiTest().run()