案例分享,Appium+Python實現APP啟動頁跳轉到首頁
下面以 MSN news 為例,實現啟動APP後跳轉到首頁的功能,包含使用list進行元素定位、try except else 進行是否首次啟動APP判斷,logging 進行日誌記錄等功能。
一、場景:
1.啟動APP後連續跳過welcom、interest 、what’s new頁面到首頁
2.判斷是否是首次啟動,如果首次啟動透過出現welcom頁面,如果不是首次啟動則直接進入interest頁面
3.使用logging模組記錄日誌
Gif圖片檔案:
二、實踐
2.1、啟動APP後連續跳過welcom、interest 、what’s new頁面到首頁
welcom頁面
1.首先啟動Appium進行session回話
2.APP啟動到welcom頁面,點選not now按鈕,跳轉到下一個頁面
分析:這裡我使用list元素進行定位,透過觀察可以知道class name 和sign in name名稱相同,如果直接使用classname那麼就會定會到當前頁面首個class name元素,導致定位失敗。
list定位獲取一組class名稱,透過陣列下標進行區分
a=driver.find_element_by_id()
a[1].click()
3.程式碼:
skipwel=driver.find_elements_by_class_name('android.widget.Button')
skipwel[1].click()
2.2、判斷是否是首次啟動,如果首次啟動透過出現welcom頁面,如果不是首次啟動則直接進入interest頁面
首次啟動app時,會彈出welcome頁面,但是第二次啟動時該頁面就會消失,出現interest頁面那麼對於這種判斷我們該如何處理呢
這裡我們使用try except 語句進行判斷
try except 語法:
工作原理:
如果try語句發生異常,則執行except 匹配名稱後語句
如果try語句未發生異常,執行else後面語句
如果try語句發生異常,except語句後內容沒有匹配成功,異常將被遞交到上層的try
處理思路:
定位interest頁面,如果定位失敗,證明出現的是welcome,執行welcome語句;否則執行interest頁面語句
程式碼:
def welcome():
logging.info('skip welcome')
skipwel=driver.find_elements_by_class_name('android.widget.Button')
skipwel[1].click()
try:
driver.find_elements_by_class_name('android.widget.Button')
except NoSuchElementException:
welcome()
else:
skipinterest=driver.find_elements_by_class_name('android.widget.Button')
skipinterest[0].click()
interets 頁面
原理同welcom 頁面
skipinterest=driver.find_elements_by_class_name('android.widget.Button')
skipinterest[0].click()
what‘s new page
原理同welcom 頁面
skipwhatnew=driver.find_elements_by_class_name('android.widget.Button')
skipwhatnew[1].click()
2.3、使用logging 模組記錄日誌
日誌是用來幫我們定位問題,透過日誌可以更準準確的確定問題所在,我們可以設定日誌級別、日誌的輸出格式等
場景:
在啟動APP時,輸出start app 日誌
導航頁跳轉到首頁過程,輸出執行的頁面為interest 頁面還是welcome 頁面
2.3.1、單個py檔案日誌
在單個py檔案裡日誌輸出形式如下:
1.日誌流程
首先,匯入日誌模組
然後,basicconfig 方法建立記錄器,為記錄做基本配置。
日誌級別:level
日誌輸出路徑:Filename
日誌輸出格式:Format
最後,在需要新增日誌的地方輸出日誌即可,logging.info(’start app‘)
- 程式碼實現
import logging
logging.basicConfig(level=logging.INFO,filename='456.log', format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
#判斷是否首次啟動App,跳過導航頁到首頁
def welcome():
logging.info('skip welcome')
skipwel=driver.find_elements_by_class_name('android.widget.Button')
skipwel[1].click()
try:
driver.find_elements_by_class_name('android.widget.Button')
except NoSuchElementException:
logging.info('run welcome')
welcome()
else:
logging.info('run interest')
skipinterest=driver.find_elements_by_class_name('android.widget.Button')
skipinterest[0].click()
3.執行
在程式碼中456.log中檢視日誌輸出資訊
2.3.2 日誌模組
上面講述的是單個功能日誌的流程,整個APP測試下來有很多功能都需要用到日誌,如果每個功能都重複編寫,會造成程式碼冗餘
所以,下面我們把日誌的配置引數抽離出來,需要時直接呼叫即可
1.首先建立log.conf檔案,儲存配置引數等資訊
log.conf檔案程式碼:
[loggers]
keys=root,infoLogger
[logger_root]
level=DEBUG
handlers=consoleHander,fileHandler
[logger_infoLogger]
handlers=consoleHander,fileHandler
qualname=infoLogger
propagat=0
[handlers]
keys=consoleHander,fileHandler
[handler_consoleHander]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=INFO
formatter=form01
args=('456.log','a')
[formatters]
keys=form01,form02
2.在需要引用log的py檔案中引用log.conf檔案
將上文中如下程式碼刪除
logging.basicConfig(level=logging.INFO,filename='456.log',
format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
更換為:
CON_LOG='log.conf'
logging.config.fileConfig(CON_LOG)
logging=logging.getLogger()
三、報錯提示
總結執行過程中報錯提示及解決方法
1.Eclipse執行 啟動app 程式碼,提示launching new configuration
Eclipse
解決方法:
Project -> Properties -> Run/Debug Settings:
1. select "Launching New_configuration5"
2. Delete
2.ImportError: cannot import name 'webdriver'
解決方法:
from selenium import webdriver
3.TypeError: 'WebElement' object does not support indexing
解決:把find_element 改為find_elements?
4.IndexError: list index out of range
解決:
有可能是陣列越界,裡面數值從0開始標記
再有可能list是一個空的,沒有一個元素
進行list[0]就會出現該錯誤
5.module 'logging' has no attribute 'basicConfig'
解決:
自己就命名了一個logging.py的檔案,在程式碼中import的是自己新建的這個,找不到basicConfig,檔名改成logging_test.py後,正常執行。
6.int' object is not callable
解決:發現程式碼中寫的是logging.DEBUG,應該為logging.debug()
歡迎加入 51軟體測試大家庭,在這裡你將獲得【最新行業資訊】,【免費測試工具安裝包】,【軟體測試技術乾貨】,【面試求職技巧】... 51與你共同學習,一起成長! 加我VX:ww-51testing 回覆關鍵詞“測試”進入軟體測試學習交流群哦~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2651512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 鴻蒙Navigation處理啟動頁跳轉到首頁問題鴻蒙Navigation
- 問題解決:下載的網頁開啟後自動跳轉到首頁網頁
- iOS應用跳轉到appstore評分,首頁iOSAPP
- uni-APP 新增頁面實現路由跳轉APP路由
- 直播系統原始碼,啟動APP時判斷登入狀態,引導頁、登入頁、首頁的跳轉方式原始碼APP
- Flutter頁面跳轉到IOS原生介面 如何實現?FlutteriOS
- 根據userAgent實現跳轉到移動或者pc頁面程式碼
- PHP中實現頁面跳轉PHP
- 在MVC中實現 網頁錯誤跳轉到500統一頁面MVC網頁
- 使用Webview實現app啟動引導頁WebViewAPP
- PHP頁面跳轉如何實現延時跳轉PHP
- 淺談小程式內嵌網頁及內嵌網頁跳轉分享實現網頁
- react跳轉url,跳轉外鏈,新頁面開啟頁面React
- ios跳轉到通用頁面iOS
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- 螞蟻動態卡片,讓App首頁實現敏捷更新APP敏捷
- App啟動廣告頁的實現和封裝APP封裝
- 實現不同頁面不同頁首
- vue路由切換滑動效果 vue頁面跳轉互動 vue實現動畫跳轉Vue路由動畫
- Gridview分頁,清空,跳轉到View
- 微信小程式swiper實現 句子控app首頁滑動卡片微信小程式APP
- APP直接跳轉設定頁面APP
- asyUI分頁中,如何實現頁面跳轉,再返回時,...UI
- 重寫ajax實現session超時跳轉到登陸頁面Session
- PHP頁面跳轉幾種實現方法PHP
- [分享]iOS開發-頁面間跳轉iOS
- js實現操作成功之後自動跳轉頁面JS
- JN專案-app首頁訂票功能實現APP
- nginx訪問預設index.html首頁跳轉指定頁面NginxIndexHTML
- Vue 小案例 導航路由跳轉頁面Vue路由
- nginx 設定 404 500 頁面跳轉到指定頁面Nginx
- 使用UICollectionView實現首頁的滾動效果UIView
- iOS Universal Links實現微信內網頁跳轉至App的方案iOS內網網頁APP
- 網頁跳轉(APP內/瀏覽器)網頁APP瀏覽器
- JS實現各種級別直接的頁面跳轉@重新整理頁面@框架集的綜合案例JS框架
- Vue-router實現單頁面應用在沒有登入情況下,自動跳轉到登入頁面Vue
- 直播app開發,首頁輪播圖效果實現APP
- JS實現把網頁設定為首頁JS網頁