1.通过excel写好测试项
.
2.通过excel_read.py完成读取excel和测试结果写入excel
3.assert_method.py写入不同的断言方法
4.ica_web_selenium.py写入元素定位和操作方法
5.screen_current.py写入截屏方法
6.main.py调用方法和执行
7.Log.py写日志
8.read_test_case.py读取case文件
excel_read.py
from openpyxl import load_workbook, workbook
class Readexcel(object):
'''读取excle表格的每一行单元格数据'''
def __init__(self,excelPath,sheetName):
self.excelPath = excelPath
self.wb = load_workbook(excelPath)
self.sheet = self.wb[sheetName]
def order_number(self,row):
'''读取序号'''
return self.sheet.cell(row=row, column=1).value
def model_data(self,row):
'''读取模块'''
return self.sheet.cell(row=row, column=2).value
def page_element(self,row):
'''读取页面元素'''
return self.sheet.cell(row=row, column=3).value
def page_locator_element(self,row):
'''读取页面定位元素'''
return self.sheet.cell(row=row, column=4).value
def page_locator_element_e(self,row):
'''读取页面定位元素表达试'''
#print(self.sheet.cell(row=row, column=5).value)
return self.sheet.cell(row=row, column=5).value
def page_locator_two(self,row):
'''读取二级表达试'''
return self.sheet.cell(row=row, column=6).value
def key_word(self,row):
'''读取关键字'''
return self.sheet.cell(row=row, column=7).value
def input_data(self,row):
'''读取填入数据'''
return self.sheet.cell(row=row, column=8).value
def check_data(self,row):
'''读取校验数据'''
return self.sheet.cell(row=row, column=9).value
def check_data_method(self, row):
'''读取校验方法'''
return self.sheet.cell(row=row, column=10).value
def execute_method(self, row):
'''是否执行'''
return self.sheet.cell(row=row, column=11).value
def writer_excel(self, row, m_d, result):
'''写入excel表格,测试结果'''
sheet1 = self.wb.worksheets[1]
sheet1["A%d"%row].value = row
sheet1["B%d"%row].value = m_d
sheet1["C%d"%row].value = result
self.wb.save(self.excelPath)
if __name__ == '__main__':
excelPath = u'C:\\Users\\Administrator\\Desktop\\数据.xlsx'
sheetName = u'测试数据'
pe = Readexcel(excelPath,sheetName)
x=pe.model_data(2)
print(x)
assert_method.py
def method_assert(web,p_l_el,c_d_m,c_d):#web驱动,k_w操作类型,p_l_el定位数据,c_d_m校验数据方法,c_d校验数据
'''断言'''
#print(c_d_m)
if type(c_d)==int:
c_d = str(c_d)
if c_d_m == 'in':
'''判断元素在页面中'''
#print(web.page_source)
assert c_d in web.page_source
elif c_d_m == 'value':
'''判断input输入框输入数据是否正确'''
loct_position = web.find_element_by_xpath(p_l_el)
# print(loct_position.get_attribute("value"))
assert c_d in loct_position.get_attribute("value")
elif c_d_m == 'notin':
'''判断元素不再页面中'''
assert c_d not in web.page_source
Log.py
import logging
import logging.config
import os
parentDirPath = os.path.dirname(os.path.abspath(__file__))
#print(parentDirPath)
logging.config.fileConfig(parentDirPath+u"\config\Logger.conf")
logger = logging.getLogger('example02')#或者example01
def debug(message):
logger.debug(message)
def info(message):
logger.info(message)
def warning(message):
logger.warning(message)
read_test_case.py
import os
def read_case():
path = "D:\\iac_web_auto\\test_demo\\测试用列"
# 获取该目录下所有文件,存入列表中
fileList = os.listdir(path)
#print(fileList)
n = 0
case_list = []
num = []
dic = {}
for i in fileList:
path_nu=i.split('_')
#print(path_nu[0])
num.append(int(path_nu[0]))
x=0
for i in num:
dic[i]=fileList[x]
x+=1
num.sort()
for i in num:
# 设置旧文件名(就是路径+文件名)
oldname = path + os.sep + dic[i] # os.sep添加系统分隔符
case_list.append(oldname)
# n += 1
#print(oldname)
return case_list
ica_web_selenium.py
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
class Auto_operate(object):
'''定位和操作'''
def __init__(self,webdr,loct,loct_data,operate_type,input_data=None):
#webdr实例化驱动,loct是定位方法,loct_data定位数据,operate_type操作类型
self.webdr = webdr
self.loct = loct
self.loct_data = loct_data
self.operate_type = operate_type
self.input_data = input_data
def web_operate(self):
'''定位页面元素和操作'''
if self.loct:
if self.loct == 'xpath':
self.loct_position = self.webdr.find_element_by_xpath(self.loct_data)
elif self.loct == 'name':
self.loct_position = self.webdr.find_element_by_name(self.loct_data)
elif self.loct == 'id':
self.loct_position = self.webdr.find_element_by_id(self.loct_data)
elif self.loct == 'class':
print(self.webdr.page_source)
self.loct_position = self.webdr.find_element_by_class_name(self.loct_data)
elif self.loct == 'text':
self.loct_position = self.webdr.find_element_by_link_text(self.loct_data)
elif self.loct == 'css':
print('位置信息',self.loct_position)
self.loct_position = self.webdr.find_element_by_css_selector(self.loct_data)
if self.operate_type =='click':
self.loct_position.click()
elif self.operate_type =='send_keys':
self.loct_position.send_keys(self.input_data)
elif self.operate_type =='clear':
self.loct_position.clear()
elif self.operate_type == 'backspace':#清空输入框
self.loct_position.send_keys(Keys.CONTROL + 'a')
self.loct_position.send_keys(Keys.BACKSPACE)
elif self.operate_type == 'backspace':#清空输入框
self.loct_position.send_keys(Keys.CONTROL + 'a')
self.loct_position.send_keys(Keys.BACKSPACE)
elif self.operate_type == 'actionchains':#鼠标悬停
ActionChains(self.webdr).move_to_element(self.loct_position).perform()
elif self.operate_type == 'refresh':
self.webdr.refresh()
time.sleep(2)
return self.webdr
screen_current.py
import re
def capture_screenincurrenwindow(dir,row,path_test):
# p_t = re.search('_(.*?).xlsx',path_test).span()
# print(p_t)
'''截图'''
try:
result = dir.get_screenshot_as_file('D:\\iac_web_auto\\运行失败图片\\%s_%s.png'%(row,path_test))
if result:
print('执行失败%s错误截图'%path_test)
except IOError as e:
print("截图失败", e)
main.py
from excel_read import Readexcel
from iac_web_selenium import Auto_operate
from selenium import webdriver
from openpyxl import load_workbook
from screen_current import capture_screenincurrenwindow
from assert_method import method_assert
from read_test_case import read_case
import time
from Log import *
class operate_web(object):
def __init__(self):
self.web = webdriver.Firefox()
logging.info(u'打开浏览器')
self.web.implicitly_wait(30)
url = 'http://192.168.8.241/#/Login'
self.web.get(url)
self.now_handle = self.web.current_window_handle
def oper_data(self,excelPath):
self.excelPath = excelPath
self.sheetName = u'操作元素'
self.read_excel = Readexcel(self.excelPath, self.sheetName)
wb1 = load_workbook(self.excelPath)
sheet1 = wb1[self.sheetName]
max_data = sheet1.max_row
for row in range(2,max_data+1):
o_d = self.read_excel.order_number(row)#读取序号
m_d = self.read_excel.model_data(row)#读取模块
p_e = self.read_excel.page_element(row)#读取页面元素
p_l_e = self.read_excel.page_locator_element(row)#
p_l_el = self.read_excel.page_locator_element_e(row)#
p_l_t = self.read_excel.page_locator_two(row)#
k_w = self.read_excel.key_word(row)#
i_d = self.read_excel.input_data(row)#
c_d = self.read_excel.check_data(row)#
c_d_m = self.read_excel.check_data_method(row)
e_m = self.read_excel.execute_method(row)
if e_m == 'no':
logging.info('不执行:%s'%m_d)
#print('不执行:',m_d)
continue
try:
auto_operate = Auto_operate(self.web,p_l_e,p_l_el,k_w,i_d)#webdr实例化驱动,loct是定位方法,loct_data定位数据,operate_type操作类型
self.web = auto_operate.web_operate()
except Exception as e:
logging.info('定位和操作失败:%s' % m_d)
#print("定位失败", e)
# continue #定位后继续执行
time.sleep(1)
all_handles = self.web.window_handles
for handle in all_handles:
if handle != self.now_handle:
self.web.switch_to.window(handle)
try:
method_assert(self.web,p_l_el,c_d_m,c_d)
try:
self.read_excel.writer_excel(o_d, m_d, 'pass')
except Exception as e:
logging.info('执行成功,写excel失败:%s' % m_d)
#print("执行成功,写excel失败%s"%e)
#print('执行成功:%s'%m_d)
logging.info('执行成功:%s' % m_d)
except AssertionError as e:
#except Exception as e:
logging.info('执行失败:%s' % m_d)
#print('执行失败:%s'%m_d)
#print('返回值e:',e.message)
capture_screenincurrenwindow(self.web, o_d,m_d)
#self.web.quit()
try:
self.read_excel.writer_excel(o_d, m_d, '失败')
except Exception as e:
logging.info('执行失败,写Excel失败:%s' % m_d)
#print("执行失败,写excel失败%s"%e)
if __name__ == '__main__':
Operate = operate_web()
path = read_case()
print(path)
for i in path:
print(i)
Operate.oper_data(i)