Appium+python自動化(三十九)-Appium自動化測試框架綜合實踐 – 程式碼實現(超詳解)

  • 2019 年 11 月 14 日
  • 筆記

簡介

  前邊一直在分享testng的相關文章,看了點贊量和閱讀數不是很高,宏哥猜測估計是大家確實是用不到或者不喜歡吧!不過宏哥經過一段時間的準備,appium的自動化測試框架完善的差不多了,那麼接下來宏哥繼續給小夥伴和童鞋們分享有關Appium自動化測試框架綜合實踐。想必小夥伴們有點等不及了吧!

driver配置封裝

kyb_caps.yaml 配置表

主要是一些配置資訊的封裝。

 參考程式碼

platformName: Android  #模擬器  platformVersion: 5.1.1  deviceName: 127.0.0.1:62025    #mx4真機  #platformVersion: 5.1  #udid: 750BBKL22GDN  #deviceName: MX4    appname: kaoyan3.1.0.apk  noReset: False  unicodeKeyboard: True  resetKeyboard: True    appPackage: com.tal.kaoyan  appActivity: com.tal.kaoyan.ui.activity.SplashActivity  ip: 127.0.0.1  port: 4723

desired_caps.py

主要是用來讀取配置文件的資訊的封裝。

 參考程式碼

# coding=utf-8  # 1.先設置編碼,utf-8可支援中英文,如上,一般放在第一行    # 2.注釋:包括記錄創建時間,創建人,項目名稱。  '''  Created on 2019-11-14  @author: 北京-宏哥   QQ交流群:707699217  Project:Appium自動化測試框架綜合實踐 - 程式碼實現  '''  # 3.導入模組  from appium import webdriver  import yaml  import logging  import logging.config  import os    CON_LOG='../config/log.conf'  logging.config.fileConfig(CON_LOG)  logging=logging.getLogger()    def appium_desired():      with open('../config/kyb_caps.yaml','r',encoding='utf-8') as file:          data=yaml.load(file)        desired_caps={}      desired_caps['platformName']=data['platformName']      desired_caps['platformVersion']=data['platformVersion']      desired_caps['deviceName']=data['deviceName']        base_dir = os.path.dirname(os.path.dirname(__file__))      app_path = os.path.join(base_dir, 'app', data['appname'])      desired_caps['app']=app_path        desired_caps['appPackage']=data['appPackage']      desired_caps['appActivity']=data['appActivity']      desired_caps['noReset']=data['noReset']          desired_caps['unicodeKeyboard']=data['unicodeKeyboard']      desired_caps['resetKeyboard']=data['resetKeyboard']        logging.info('start app...')      driver=webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps)      driver.implicitly_wait(8)      return driver    if __name__ == '__main__':      appium_desired()        # with open('../config/kyb_caps.yaml', 'r', encoding='utf-8') as file:      #     data = yaml.load(file)      #      # base_dir=os.path.dirname(os.path.dirname(__file__))      # print(os.path.dirname(__file__))      # print(base_dir)      #      # app_path=os.path.join(base_dir,'app',data['appname'])      # print(app_path)

相對路徑符號含義

  1. “.”表示當前目錄
  2. “..” 表示當前目錄的上一級目錄。
  3. “./”表示當前目錄下的某個文件或文件夾,視後面跟著的名字而定
  4. “../”表示當前目錄上一級目錄的文件或文件夾,視後面跟著的名字而定。

基類封裝

baseView.py

主要是一些元素定位方法的封裝。

 參考程式碼

# coding=utf-8  # 1.先設置編碼,utf-8可支援中英文,如上,一般放在第一行    # 2.注釋:包括記錄創建時間,創建人,項目名稱。  '''  Created on 2019-11-14  @author: 北京-宏哥   QQ交流群:707699217  Project:Appium自動化測試框架綜合實踐 - 程式碼實現  '''  # 3.導入模組  class BaseView(object):      def __init__(self,driver):          self.driver=driver        def find_element(self,*loc):          return self.driver.find_element(*loc)        def find_elements(self,*loc):          return self.driver.find_elements(*loc)        def get_window_size(self):          return self.driver.get_window_size()        def swipe(self,start_x, start_y, end_x, end_y, duration):          return self.driver.swipe(start_x, start_y, end_x, end_y, duration)

common公共模組封裝

公共方法封裝 : common_fun.py

主要是一些公共方法的封裝。

參考程式碼

# coding=utf-8  # 1.先設置編碼,utf-8可支援中英文,如上,一般放在第一行    # 2.注釋:包括記錄創建時間,創建人,項目名稱。  '''  Created on 2019-11-13  @author: 北京-宏哥   QQ交流群:707699217  Project:Appium自動化測試框架綜合實踐 - 程式碼實現  '''  # 3.導入模組  from kyb_testProject.baseView.baseView import BaseView  from kyb_testProject.common.desired_caps import appium_desired  from selenium.common.exceptions import NoSuchElementException  import logging  from selenium.webdriver.common.by import By  import time,os  import csv    class Common(BaseView):      cancelBtn=(By.ID,'android:id/button2')      skipBtn=(By.ID,'com.tal.kaoyan:id/tv_skip')      wemedia_cacel=(By.ID,'com.tal.kaoyan:id/view_wemedia_cacel')          def check_cancelBtn(self):          logging.info('==========check_cancelBtn=========')          try:              cancelBtn = self.driver.find_element(*self.cancelBtn)          except NoSuchElementException:              logging.info('no cancelBtn')          else:              cancelBtn.click()        def check_skipBtn(self):          logging.info('=========check skipBtn=============')            try:              skipBtn = self.driver.find_element(*self.skipBtn)          except NoSuchElementException:              logging.info('no skipBtn')          else:              skipBtn.click()        def get_size(self):          x = self.driver.get_window_size()['width']          y = self.driver.get_window_size()['height']          return x, y        def swipeLeft(self):          logging.info('swipeLeft')          l = self.get_size()          x1 = int(l[0] * 0.9)          y1 = int(l[1] * 0.5)          x2 = int(l[0] * 0.1)          self.swipe(x1, y1, x2, y1, 1000)        def getTime(self):          self.now=time.strftime("%Y-%m-%d %H_%M_%S")          return self.now        def getScreenShot(self,module):          time=self.getTime()          image_file=os.path.dirname(os.path.dirname(__file__))+'/screenshots/%s_%s.png' %(module,time)            logging.info('get %s screenshot' %module)          self.driver.get_screenshot_as_file(image_file)        def check_market_ad(self):          logging.info('====check_market_ad====')          try:              element=self.driver.find_element(*self.wemedia_cacel)          except NoSuchElementException:              pass          else:              logging.info('close market ad')              element.click()        def get_csv_data(self,csv_file,line):          logging.info('=====get_csv_data======')          with open(csv_file,'r',encoding='utf-8-sig') as file:              reader=csv.reader(file)              for index,row in enumerate(reader,1):                  if index==line:                      return row    if __name__ == '__main__':      # driver=appium_desired()      # com=Common(driver)      # com.check_cancelBtn()      # # com.check_skipBtn()      # com.swipeLeft()      # com.getScreenShot('startApp')        list = ["", "", "一個", "測試", "數據"]      # for i in range(len(list)):          # print(i, list[i])        list1 = ["", "", "一個", "測試", "數據"]      # for index, item in enumerate(list1):      #     print(index, item)

小結

     好了,今天的分享就到這裡。感謝您耐心的閱讀!