案例分享,Appium+Python實現APP啟動頁跳轉到首頁

博為峰網校發表於2019-07-23

下面以 MSN news 為例,實現啟動APP後跳轉到首頁的功能,包含使用list進行元素定位、try except else 進行是否首次啟動APP判斷,logging 進行日誌記錄等功能。

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

一、場景:

1.啟動APP後連續跳過welcom、interest 、what’s new頁面到首頁

2.判斷是否是首次啟動,如果首次啟動透過出現welcom頁面,如果不是首次啟動則直接進入interest頁面

3.使用logging模組記錄日誌

Gif圖片檔案:

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

二、實踐

2.1、啟動APP後連續跳過welcom、interest 、what’s new頁面到首頁

welcom頁面

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

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 語法:

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

工作原理:

如果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‘)

  1. 程式碼實現

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中檢視日誌輸出資訊

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

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檔案

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

將上文中如下程式碼刪除

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

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

Eclipse

解決方法:

  Project -> Properties -> Run/Debug Settings:

  1. select "Launching New_configuration5"

  2. Delete

2.ImportError: cannot import name 'webdriver'

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

解決方法:

from selenium import webdriver

3.TypeError: 'WebElement' object does not support indexing

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

解決:把find_element 改為find_elements?

4.IndexError: list index out of range

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

解決:

有可能是陣列越界,裡面數值從0開始標記

再有可能list是一個空的,沒有一個元素

進行list[0]就會出現該錯誤

5.module 'logging' has no attribute 'basicConfig'

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

解決:

自己就命名了一個logging.py的檔案,在程式碼中import的是自己新建的這個,找不到basicConfig,檔名改成logging_test.py後,正常執行。

6.int' object is not callable

案例分享,Appium+Python實現APP啟動頁跳轉到首頁

解決:發現程式碼中寫的是logging.DEBUG,應該為logging.debug()

歡迎加入 51軟體測試大家庭,在這裡你將獲得【最新行業資訊】,【免費測試工具安裝包】,【軟體測試技術乾貨】,【面試求職技巧】... 51與你共同學習,一起成長! 加我VX:ww-51testing   回覆關鍵詞“測試”進入軟體測試學習交流群哦~~

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2651512/,如需轉載,請註明出處,否則將追究法律責任。

相關文章