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
    

                                           
从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类

配置文件的作用: 我们在浏览器引擎类 英文(browser engine) 通过读取配置文件来确定他要启动什么浏览器以及打开什么页面。所以我们需要创建第二个文件夹Framework,在Framework下创建名称为browser_engine.py的文件来实现浏览器的选择和URL的选择。
在这之前我们需要把三个浏览器的driver放置tools文件夹 (driver.exe),因为我们需要webdriver.Chrome('传入driver所在的路径')
从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类
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  用于观察脚本运行信息
从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类
日志信息类创建后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()



运行后我们可以看到日志情况
从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类
这个是控制台输出的日志
从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类
这个是控制文件输出的日志






相关文章:

  • 2022-12-23
  • 2022-02-26
  • 2022-12-23
  • 2021-04-02
  • 2021-09-04
  • 2022-02-04
  • 2022-12-23
  • 2021-08-18
猜你喜欢
  • 2021-11-06
  • 2021-08-10
  • 2021-05-20
  • 2022-12-23
  • 2021-12-16
  • 2022-12-23
  • 2021-04-25
相关资源
相似解决方案