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