def open_browser(browser_type): try: if browser_type == 'Chrome': Logger().get_logger().info('Chrome浏览器启动中......') driver = webdriver.Chrome(options=Options().conf_option()) else: Logger().get_logger().info('{0}浏览器启动中......'.format(browser_type)) driver = getattr(webdriver, browser_type)() except Exception as e: Logger().get_logger().info('出现异常,启动Chrome浏览器,Exception信息:{0}'.format(e)) driver = webdriver.Chrome() return driver
def assert_text(self, **kwargs): reality = self.locator(**kwargs).text try: assert reality == kwargs['expect'] return True except: Logger().get_logger().info('断言失败,断言信息:{0} != {1}'.format(reality, kwargs['expect'])) return False
class ExcelConf: # 创建日志对象 log = Logger().get_logger() # 定义Excel格式 def cell_write(self, value, sheet, row): bold = Font(bold=True) if value == 'pass': fill = PatternFill('solid', fgColor='AACF91') elif value == 'false': fill = PatternFill('solid', fgColor='FF0000') else: pass sheet.cell(row=row, column=8).value = value.upper() sheet.cell(row=row, column=8).fill = fill sheet.cell(row=row, column=8).font = bold # 读取配置文件中的信息,获取excel路径,基于yaml获取文件 def load_yaml(self, yaml_path): file = open(yaml_path, 'r', encoding='utf-8') file_data = yaml.load(file, Loader=yaml.FullLoader) return file_data # openpyxl打开excel用例 def load_excel(self, excel_path): # 读取excel内容 excel = openpyxl.load_workbook(excel_path) return excel # 获取excel的所有sheet def get_sheets(self, excel): sheets = excel.sheetnames return sheets # 关闭excel文件,释放资源 def close(self, excel): excel.close() # excel保存 def save_excel(self, excel, path): excel.save(path)
class BasePage: url = 'http://39.98.138.157/shopxo/index.php' log = Logger().get_logger() # driver=webdriver.Chrome() def __init__(self, driver): self.driver = driver self.driver.implicitly_wait(2) # 访问url def open(self): self.driver.get(self.url) self.log.info('访问url:{}'.format(self.url)) # 元素定位 def locator(self, loc): self.log.info('正在使用:{}定位,其定位元素为:{}'.format(loc[0], loc[1])) return self.driver.find_element(*loc) # 输入 def input_(self, loc, txt): self.locator(loc).send_keys(txt) self.log.info('正在输入:{}'.format(txt)) # 点击 def click(self, loc): self.locator(loc).click() # 切换至Iframe窗体 def switch_to_iframe(self, loc): self.driver.switch_to.frame(self.locator(*loc)) # 获取属性 def get_attr(self, loc, name): self.locator(loc).get_attribute(name) # 获取文本 def assert_text(self, loc): return self.locator(loc).text
#coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import poplib import re from email.parser import Parser from logs.log import Logger Log = Logger(__file__) class MailServer(object): def __init__(self, user, pw, host, port=110): self.user = user self.pw = pw self.host = host self.port = port self.server = None self.conn = self.mail_recv() def mail_recv(self): """port: 110 standard port, 995 SSL port""" if self.port not in (110, 995): Log.error('POP port param should be in (110, 995)') return False self.server = poplib.POP3(self.host, self.port) if self.port == 110 \ else poplib.POP3_SSL(self.host, self.port) try: self.server.user(self.user) self.server.pass_(self.pw) Log.info('<mail recv> Mail server connected!')
class WebUI_Framework(object): # 创建日志对象 log = Logger().get_logger() # 初始化WebUI_Init类 def __init__(self, browser_type): self.driver = open_browser(browser_type) def visit(self, **kwargs): self.driver.get(kwargs['txt']) # 关闭浏览器 def quit(self, **kwargs): self.driver.quit() # 依据不同的定位方法,进行定位操作 def locator(self, **kwargs): try: return self.driver.find_element(getattr(By, kwargs['loc'].upper()), kwargs['value']) except Exception as e: print('元素定位失败,信息:{0}'.format(e)) # 依据不同的定位方法,进行点击操作 def click(self, **kwargs): self.locator(**kwargs).click() # 依据不同的定位方法,进行输入操作 def input(self, **kwargs): self.locator(**kwargs).send_keys(kwargs['txt']) # 定义强制等待 def sleep(self, **kwargs): time.sleep(kwargs['txt']) # 定义隐式等待 def wait(self, **kwargs): self.driver.implicitly_wait(kwargs['txt']) # 切换至新窗体 def switch_to_new_current(self, **kwargs): handles = self.driver.window_handles self.driver.switch_to.window(handles[1]) # 关闭旧窗体 def close_old_current(self, **kwargs): self.driver.close() # 切换至旧窗体 def switch_to_old_current(self, **kwargs): handles = self.driver.window_handles self.driver.switch_to.window(handles[0]) # 切换至新窗体,并关闭旧窗体 def switch_and_close(self, **kwargs): handles = self.driver.window_handles self.driver.close() self.driver.switch_to.window(handles[1]) # 切换至Iframe窗体 def switch_to_iframe(self, **kwargs): self.driver.switch_to.frame(self.locator(**kwargs)) # 切换回默认窗体 def switch_to_default(self, **kwargs): self.driver.switch_to.default_content() # 文本断言 def assert_text(self, **kwargs): reality = self.locator(**kwargs).text try: assert reality == kwargs['expect'] return True except: Logger().get_logger().info('断言失败,断言信息:{0} != {1}'.format(reality, kwargs['expect'])) return False
import sys, os reload(sys) sys.setdefaultencoding('utf-8') import zipfile from selenium import webdriver # from selenium.webdriver.common.proxy import * from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select from selenium.webdriver.common.keys import Keys from logs.log import Logger import browser as bo from util import * Log = Logger(__name__) class Initial_browser(object): def __init__(self, bs_conf_obj): self.conf = bs_conf_obj def set_chrome(self): options = webdriver.ChromeOptions() # options.add_extension(os.path.join(os.getcwd(), 'chromeExtentions', 'WebRTC Network Limiter_0_2_1_3.crx')) options.add_extension(os.path.join(os.getcwd(), 'chromeExtentions', 'WebRTC Control.crx')) options.add_extension(os.path.join(os.getcwd(), 'chromeExtentions', 'CanvasFingerprintBlock_1_5.crx')) options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"]) if not os.path.exists(self.conf.execute_path): raise Exception('Please set chromedriver path, or add it into environ path') if self.conf.proxy:
# -*- coding:utf-8 -*- import unittest from pageObjects.Department_manage import DepartmentPage from frameWork.browser_engine import BrowserEngine import time from logs.log import Logger DEPARTMENT_NAME = '自动化测试部门66' logger = Logger(logger_name='TestDepartmentManage').get_logger() class TestDepartmentManage(unittest.TestCase): @classmethod def setUpClass(cls): """ 测试固件的setUp()的代码,主要是测试的前提准备工作 :return: """ browse = BrowserEngine(cls) cls.driver = browse.open_browser(cls) # @classmethod # def tearDownClass(cls): # """ # 测试结束后的操作,这里基本上都是关闭浏览器 # :return: # """ # cls.driver.quit()
# -*- coding:utf-8 -*- from selenium import webdriver import time from data.config import Config, DATA_PATH from logs.log import Logger logger = Logger('BrowserEngine').get_logger() class BrowserEngine(object): Firefox_path = Config().get('Firefox_path') IE_path = Config().get('IE_path') chrome_path = Config().get('chrome_path') URL = Config().get('url', index=0) user_name = Config().get('login_name') password = Config().get('login_password') yaml = DATA_PATH + '/config.yaml' def __init__(self, driver): self.driver = driver def open_browser(self, driver): # 根据browser的值调用对应浏览器的驱动器,并在日志中输出步骤 browser = Config().get('browser') if browser == "Firefox": driver = webdriver.Firefox(self.Firefox_path) time.sleep(2) logger.info("starting FireFox browser....")
class ExcelExcutor(object): ''' 实例化对象 结合参数调用关键字 封装整合 ''' # 创建日志对象 log = Logger().get_logger() ec = ExcelConf() excel_path = '' excel = '' def excute_get_sheets(self, excel_path_value): global excel_path global excel excel_path = excel_path_value excel = self.ec.load_excel(excel_path) sheets = self.ec.get_sheets(excel) return sheets # Excel执行读写操作 def excute_web(self, excel_path_value): sheets = self.excute_get_sheets(excel_path_value) try: # 读取所有Sheet页面 for sheet in sheets: self.log.info('获取{0}内容成功,现在开始执行自动化测试......'.format(sheet)) sheet1 = excel[sheet] # 基于Sheet内容,运行测试用例 for value in sheet1.values: param = {} param['loc'] = value[2] param['value'] = value[3] param['txt'] = value[4] param['expect'] = value[6] # 判断文件,从用例内容开始执行 if type(value[0]) is int: # 判断关键字列,如果是open_browser,则实例化对象,如果不是,则进行其他元素操作 if value[1] == 'open_browser': self.log.info('现在执行关键字:{0},操作描述:{1}'.format(value[1], value[5])) wf = WebUI_Framework(param['txt']) # 判断是否为断言,若是断言则添加写入操作 elif 'assert' in value[1]: self.log.info('现在执行关键字:{0},操作描述:{1}'.format(value[1], value[5])) status = getattr(wf, value[1])(**param) row = value[0] + 1 if status is True: self.log.info('流程测试通过!') self.ec.cell_write('pass', sheet1, row) else: self.log.info('流程测试失败!') self.ec.cell_write('false', sheet1, row) self.ec.save_excel(excel, excel_path) # 定义常规关键字调用 else: self.log.info('现在执行关键字:{0},操作描述:{1}'.format(value[1], value[5])) getattr(wf, value[1])(**param) else: pass except Exception as e: self.log.exception('运行出现异常,信息描述:{0}'.format(e)) finally: # 关闭读取的文件 self.log.info("文件读取完毕,自动化执行结束!\n") self.ec.close(excel)
#coding=utf-8 import os import unittest from testCase import getpathInfo from testCase import readConfig import common.HTMLTestRunner as HTMLTestRunner #生成报告 import pythoncom from conf.configEmail import send_email #发送邮件 from logs.log import Logger #打印log path = getpathInfo.get_Path() report_path = os.path.join(path,'result') on_off = readConfig.ReadConfig().get_email('on_off') log = Logger().get_logger() class ALLTest(): #初始化一些参数和数据 def __init__(self): #全局参数 global resultPath resultPath = os.path.join("D:/InterfaceTest/result/","report.html") self.caseListFile = os.path.join("D:/InterfaceTest/testFile/","caselist.txt") self.caseFile = path self.caseList = [] log.debug('debug mesage') log.info('info message') log.warning("this is a waring log") log.error('error message') log.info(str.format("%s %s","resultPath",resultPath))
# __author__ = 'Yang' # -*- coding:utf-8 -*- from selenium.webdriver.support.wait import WebDriverWait from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select import time from logs.log import Logger logger = Logger(logger_name='BasePage').get_logger() class BasePage(object): """ 封装一个页面基类,让所有页面继承这个基类 """ # 初始化driver def __init__(self, driver): self.driver = driver self.wait = WebDriverWait(self.driver, 10, 0.5) def clear_cookies(self): """ 清除驱动初始化后的所有cookies """ self.driver.delete_all_cookies() logger.info('clear cookies!!')