從0搭建pythonseleniumweb框架之第一步編寫配置文件,瀏覽器引擎類,日誌類

1.首先 我們需要創建一個配置文件 Config --  config.ini
   爲什麼適用ini文件作爲配置文件
   PS:因爲ini文件結構如下  
【Type】
  key = value
  #key_2 = value_2
  我們讀取ini文件的時候,拿到value很方便 
  例:import configParser   #導入處理ini文件的類庫
      config = ConfigParser.ConfigParser() #實例化
      config.read('配置文件.ini的路徑')#讀取文件
      value  = config.get('Type','key')
  只需要上面的三步,導入處理ini的類庫,實例化後讀取就好了。我們不需要的註釋掉就好。

配置文件中基本的先放兩種瀏覽器引擎和我們所請求的url。我使用pycharm完成
文件名 Config
    

                                           

配置文件的作用: 我們在瀏覽器引擎類 英文(browser engine) 通過讀取配置文件來確定他要啓動什麼瀏覽器以及打開什麼頁面。所以我們需要創建第二個文件夾Framework,在Framework下創建名稱爲browser_engine.py的文件來實現瀏覽器的選擇和URL的選擇。
在這之前我們需要把三個瀏覽器的driver放置tools文件夾 (driver.exe),因爲我們需要webdriver.Chrome('傳入driver所在的路徑')

browser_engine(瀏覽器引擎類) 此類通過讀取配置文件來打開設置的瀏覽器以及規定的url
後續添加日誌打印類優化
代碼如下:
import configparser
from selenium import webdriver
import os
from Framework.logger import Logger

'''
browser_engine(瀏覽器引擎類) 此類通過讀取配置文件來打開設置的瀏覽器以及規定的url
後續添加日誌打印類優化 優化後增加調用日誌類,接受日誌初始化格式後的logger
'''
logger = Logger('BrowserEngine').getlog()


class BrowserEngine(object):
'''
獲取配置文件的路徑
'''
Config_path = os.path.abspath('..') + '\Config\config.ini' # 使用os.path.abspath可以獲得上層目錄
Chrome_driver_path = os.path.abspath('..') + '\\tools\chromedriver.exe' # 獲得chromedriver所在路徑
IE_driver_path = os.path.abspath('..') + '\\tools\Ie.exe' # 獲得IEdriver.exe所在路徑

def __init__(self, driver):
'''
初始化driver
:param driver:
:return:
'''
self.driver = driver

def open_browser(self, driver):
'''
讀取配置文件獲得其設置的urlbrowser
'''
config = configparser.ConfigParser() # 實例化讀取ini配置文件的類
config.read(self.Config_path) # 讀取ini文件
browser = config.get('browserType', 'browserKey')
logger.info('you select browser is %s' % browser)
url = config.get('ServerType', 'URL')
logger.info('you select URL is %s' % url)

'''
判斷配置文件設置瀏覽器的類型決定打開某瀏覽器
'''
if browser == 'Firefox':
logger.info('Starting firefox browser')
driver = webdriver.Firefox()
elif browser == 'Chrome':
logger.info('Starting chrome browser')
driver = webdriver.Chrome(self.Chrome_driver_path)
elif browser == 'IE':
logger.info('Starting IE browser')
driver = webdriver.Ie(self.IE_driver_path)

'''
打開句柄後根據配置文件設置sever的內容決定打開某URL
'''
driver.get(url)
logger.info('open url is %s' % url)
driver.maximize_window()
logger.info('maximize the current windows.')
driver.implicitly_wait(10)
logger.info('Set implicitly 10 seconds.')
return driver

def quit_browser(self, driver):
logger.info('Now , Close the browser')
driver.quit()

爲了優化瀏覽器引擎類以及後續操作打印日誌的需求,我們在Framework創建另一個py文件,名爲logger.py  用於觀察腳本運行信息

日誌信息類創建後class logger(obj),在初始化方法中完成保存日誌的路徑,日誌的級別,調用的文件
將日誌儲存到指定文件中等工作內容


代碼如下:
import logging
import os.path
import time

'''
此類是日誌打印類,封裝日誌打印工具提供其他類的調用 obj爲其他類名
'''


class Logger(object):
'''
日誌信息類創建後class loggerobject),在初始化方法中完成保存日誌的路徑,日誌的級別,調用的文件
將日誌儲存到指定文件中等工作內容
:param obj:
:return:
'''

def __init__(self, obj):
self.logger = logging.getLogger(obj) # 使用logging.getLogger傳入其他類名稱來創建一個logger
self.logger.setLevel(logging.DEBUG) # 通過setLeverl方法來設置日誌的等級

'''
創建好logger後編輯log的儲存路徑,文件名以時間的形式避免重複
'''
log_file = time.strftime('%Y%m%d%H%M%S') + '.log'
log_name = os.path.abspath('..') + '\logs\\' + log_file

# 創建一個handler,用於輸出到指定文件,並設置其日誌等級
fi = logging.FileHandler(log_name,encoding='utf-8')
fi.setLevel(logging.INFO)
# 創建一個handler,用於輸出到控制檯,並設置其日誌等級
st = logging.StreamHandler()
st.setLevel(logging .INFO)
#定義handler的輸出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fi.setFormatter(formatter)
st.setFormatter(formatter)
#給日誌添加handler
self.logger.addHandler(fi)
self.logger.addHandler(st)

def getlog(self):
'''
:return: logger
'''
return self.logger



最後我們新建一個測試類
import unittest
from Framework.browser_engine import BrowserEngine
import time


class BaiduSearch(unittest.TestCase):
def setUp(self):
self.browser = BrowserEngine(self)
self.driver = self.browser.open_browser(self)

def tearDown(self):
self.browser.quit_browser(self.driver)

def test_search(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
time.sleep(1)
try:
assert 'selenium' in self.driver.title
print('pass')
except:
print('Fail')

if __name__ == '__main__':
unittest.main()



運行後我們可以看到日誌情況
這個是控制檯輸出的日誌

這個是控制文件輸出的日誌






發佈了40 篇原創文章 · 獲贊 48 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章