您好,登錄后才能下訂單哦!
下面以 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()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。