从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 ()



运行后我们可以看到日志情况
这个是控制台输出的日志

这个是控制文件输出的日志






猜你喜欢

转载自blog.csdn.net/weixin_38079422/article/details/79088645
今日推荐