1 環(huán)境搭建
安裝JDK, 配置環(huán)境變量
安裝Android SDK, 配置環(huán)境變量
安裝Appium-Windows-Desktop
安裝Appium-Python-Client
安裝python解釋器和Pycharm
測試機Honor8
測試軟件 會員寶秒到版(公司自研軟件)
Ps:網(wǎng)上有大把軟件安裝和環(huán)境搭建教程录粱,本文只探討APP-UI的自動化流程實現(xiàn)困乒,另外下面涉及到的python語法和元素定位蝎困、操作也是一樣的,在開始做自動化之前,建議先去打一打基礎(chǔ)
2 連接測試機
1.測試機用USB連接電腦,選擇傳輸文件模式
2.設(shè)置-開啟手機開發(fā)者模式(大部分安卓機多次點擊版本號),勾選USB調(diào)試選項
3.Win+R輸入cmd進(jìn)入命令提示符界面凿傅,使用adb命令查看連接情況,adb devices数苫,如下圖顯示聪舒,連接成功
3 配置測試機和測試軟件信息
1.打開appium,進(jìn)入測試機配置信息界面
2.使用adb命令查詢測試機數(shù)據(jù)文判,輸入配置信息
platformName 選擇填寫Android或iOS
platformVersion 測試機的系統(tǒng)版本,adb shell getprop ro.build.version.release
deviceName 測試機的系統(tǒng)型號室梅,adb shell getprop ro.product.model
appPackage戏仓、appActivity 需要打開軟件到要測試的界面,adb shell dumpsys window | findstr mCurrentFocu
noReset 值為False時亡鼠,每次重新啟動APP時都會清除數(shù)據(jù)赏殃,登陸需要重新輸入賬號密碼
3.Pycham新建文件,直接復(fù)制上圖中的配置信息间涵,建立driver對象
# 配置信息-Honor8-啟動界面
info = {
"platformName": "Android",
"platformVersion": "7.1.2",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.hybunion.miaodao",
"appActivity": "com.hybunion.ui.activity.SplashActivity",
"noReset": "False"
}
# 連接appium仁热,傳入配置信息
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', info)
driver.implicitly_wait(10)
4.appium中保存配置信息為一個項目(下次使用時可直接打開),進(jìn)入測試界面
- 左側(cè)區(qū)域顯示手機此時的界面
4 測試流程
1.點擊同意并繼續(xù)按鈕
- 點擊頁面的一個元素后勾哩,右邊會展示這個元素的屬性抗蠢,我們可以根據(jù)這些屬性進(jìn)行元素定位,來進(jìn)行點擊思劳,滑動等操作
- 點擊tab迅矛,進(jìn)行點擊操作,點擊刷新按鈕潜叛,進(jìn)入下一個界面(也可以在手機上操作后秽褒,點擊刷新壶硅,同步畫面)
# 點擊同意并繼續(xù)按鈕
driver.find_element('id', 'com.hybunion.miaodao:id/tv_confirm').click()
2.滑動引導(dǎo)頁,點擊立即體驗按鈕
- 在點擊體驗按鈕時销斟,發(fā)現(xiàn)無法選中按鈕來定位元素庐椒,只能選中整個頁面
- 這時候要就結(jié)合另一個工具 uiautomatorviewer,在sdk文件夾下找到并啟動
- 使用時蚂踊,要關(guān)閉appium獲取元素界面约谈,成功獲得元素信息
# 左劃三次
sleep(4)
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
for i in range(3):
driver.swipe(x * 0.9, y * 0.5, x * 0.1, y * 0.5, 1000)
# 點擊立即體驗按鈕
driver.find_element('id', 'com.hybunion.miaodao:id/btn_guide_enter').click()
3.輸入手機號,輸入密碼悴势,點擊登錄按鈕
- 在左邊界面點擊輸入框后窗宇,點擊Send Keys,在彈出的輸入框中輸入文本
# 輸入手機號特纤,輸入密碼军俊,點擊登錄按鈕
driver.find_element('id', 'com.hybunion.miaodao:id/edt_userName_login').send_keys('12345678902')
driver.find_element('id', 'com.hybunion.miaodao:id/edt_pwd_login').send_keys('qqqq1111')
driver.find_element('id', 'com.hybunion.miaodao:id/tv_bt_login').click()
4.權(quán)限彈窗點擊不允許、禁止
# 點擊不允許
driver.find_element('id', 'com.hybunion.miaodao:id/tv_ok_left').click()
driver.find_element('id', 'com.hybunion.miaodao:id/tv_ok_left').click()
driver.find_element('id', 'com.android.packageinstaller:id/permission_deny_button').click()
5.輸入驗證碼捧存,點擊下一步
# 輸入驗證碼粪躬,點擊下一步
driver.find_element('id', 'com.hybunion.miaodao:id/edt_verify_code').send_keys('666666')
driver.find_element('id', 'com.hybunion.miaodao:id/tv_next').click()
6.指紋驗證點擊取消,跳過
# 點擊取消昔穴,跳過
driver.find_element('id', 'com.hybunion.miaodao:id/cancel_btn').click()
driver.find_element('id', 'com.hybunion.miaodao:id/tv_skip').click()
7.設(shè)置手勢密碼
# 畫出一個W圖案
el1 = driver.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.ImageView[1]')
el7 = driver.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.ImageView[7]')
el5 = driver.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.ImageView[5]')
el9 = driver.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.ImageView[9]')
el3 = driver.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.ImageView[3]')
TouchAction(driver).press(el1).move_to(el7).move_to(el5).move_to(el9).move_to(el3).release().perform()
TouchAction(driver).press(el1).move_to(el7).move_to(el5).move_to(el9).move_to(el3).release().perform()
8.驗證進(jìn)入的界面是否有刷卡收款字段
# 斷言
expect = '刷卡收款'
reality = driver.find_element('id', 'com.hybunion.miaodao:id/tv_swipcard_text').text
assert expect == reality, '{}不等于{}'.format(expect , reality)
9.退出
sleep(5)
driver.quit()
- 以上镰官,python結(jié)合appium簡單實現(xiàn)登錄流程的ui自動化就完成了,這個是公司的實際項目吗货,如果順利的話后面會繼續(xù)分享這個UI自動化框架的搭建過程泳唠,包括封裝方法,數(shù)據(jù)分離宙搬,用例管理笨腥,框架優(yōu)化等系列內(nèi)容。