python +webdriver

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值