基于python+selenium的框架思路

本文介绍了一种基于Selenium的Python关键字驱动框架实现方案。利用Excel文件存储测试用例及参数,通过反射机制调用关键字方法执行自动化测试,实现了用例与测试代码分离,提高了测试的灵活性与可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设想:

1、使用excel编写用例第一个sheet页为用例概要格式如下:

后面的sheet页为具体的用例步骤:

实现所有定位信息都与测试代码分离

2、读取该excel文件取出关键字等信息,作为关键字的参数,通过反射机制传递给关键字方法去执行。

  关键字模块如下:ObjectMap.py

# coding:utf-8
from selenium.webdriver.support.ui import WebDriverWait


#获取单个页面元素对象
def get_element(driver, locationType, locatorExpression):
    try:
        element = WebDriverWait(driver, 30).until(lambda x:x.find_element(by=locationType,value = locatorExpression))
        return element
    except Exception, e:
        raise e


def get_elements(driver , locationType, locatorExpression):
    try:
        elements = WebDriverWait(driver, 30).until(lambda x:x.find_elements(by=locationType,value=locatorExpression))
        return elements
    except Exception, e:
        raise e

# 由于关键字函数的参数个数不一样,所以通过传递动态参数*args实现传参,关键字方法
# 最多需要(driver , locationType, locatorExpression, operationValue)四个参数
def open_browser(driver, *args):
    driver.get(args[2])


def input_string(driver, *args):
    WebDriverWait(driver, 30).until(lambda x: x.find_element(by=args[0], value=args[1])).send_keys(args[2])


def click(driver, *args):
    WebDriverWait(driver, 30).until(lambda x: x.find_element(by=args[0], value=args[1])).click()

测试执行代码如下:

# coding:utf-8
from util import ObjectMap, ExcelUtil
import xlrd, xlwt
import time
from xlutils.copy import copy

def baidu_search():
    #初始化操作,创建driver
    from selenium import webdriver
    start_time = time.time()
    # print start_time
    driver = webdriver.Chrome()
    #读取excel中的关键字的值,定位方式的值,定位表达式,和操作值等参数值。然后将参数值传到对应关键字方法中
    excelFile = xlrd.open_workbook(r"D:\KeyWordsFrameWork\testScripts\search.xlsx", formatting_info=True)
    sheet = excelFile.sheet_by_index(1)
    maxRows = sheet.nrows
    # print maxRows

    for row in range(1, maxRows-1):
        keyword = sheet.row_values(row)[2]
        locationType = sheet.row_values(row)[3]
        locatorExpression = sheet.row_values(row)[4]
        operationValue = sheet.row_values(row)[5]
        # dir(ObjectMap)获取该模块的所有方法和变量
        # print dir(ObjectMap)
        for i in dir(ObjectMap):
            if keyword == i:
                # print i
                # 要用到反射机制,通过函数名字符串调用对应方法:http://www.liujiangblog.com/course/python/48
                if hasattr(ObjectMap, keyword):
                    # print '有这个方法'
                    func = getattr(ObjectMap, keyword)
                    func(driver, locationType, locatorExpression, operationValue)
    end_time = time.time()
    take_time = end_time-start_time
    print take_time
    excleFileCopy = copy(excelFile)
    case_sheet = excleFileCopy.get_sheet(0)
    case_sheet.write(1,5,take_time)
    excleFileCopy.save(r"D:\KeyWordsFrameWork\testScripts\search.xlsx")


if __name__ == '__main__':
    baidu_search()

  

 

转载于:https://www.cnblogs.com/gcgc/p/9497339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值