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()
运行后我们可以看到日志情况
这个是控制台输出的日志
这个是控制文件输出的日志