從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):
'''
讀取配置文件獲得其設置的url和browser
'''
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 logger(object),在初始化方法中完成保存日誌的路徑,日誌的級別,調用的文件
將日誌儲存到指定文件中等工作內容
: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()
運行後我們可以看到日誌情況
這個是控制檯輸出的日誌
這個是控制文件輸出的日誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.