设想:

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()

python selenium框架_基于python+selenium的框架思路相关推荐

  1. python管理系统设计_基于Python和Django框架的物联网智能设备管理系统的设计与实现

    杨武帅 万启元 桑贤伯 摘 要:针对目前日益增多的智能设备提出了兼容性好,稳定性高,易于管理的管理系统的设计方法.在服务器端使用Python和Django框架进行与设备的数据交互及设备管理网站的构架, ...

  2. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  3. python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

    Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...

  4. python 量化交易_基于Python的量化交易工具清单(上)

    -- Python量化工具清单 -- 以下内容来源于Wilson Freitas的Github项目"Awesome Quant".原文中包含了丰富的语言类别,但是后续介绍主要针对P ...

  5. python机器视觉教材_基于Python的机器视觉实验教学平台设计

    基于 Python 的机器视觉实验教学平台设计 韩志豪 ; 刘晓英 [期刊名称] <计算机测量与控制> [年 ( 卷 ), 期] 2020(028)003 [摘要] 针对机器视觉领域的学习 ...

  6. python通信自动化测试_基于Python的无线通信设备自动化测试软件的研制

    基于Python的无线通信设备自动化测试软件的研制 中国电子科技集团公司第十研究所 冯启俊 [期刊名称]<电子世界> [年(卷),期]2019(000)015 [总页数]2 无线通信设备的 ...

  7. python新闻聚合_基于Python的新闻聚合系统网络爬虫研究

    基于 Python 的新闻聚合系统网络爬虫研究 左卫刚 [摘 要] 摘 要 本研究旨在创建一个能够从不同页面布局中提取数据的开源爬 虫,其中包括网络爬虫. API .网络爬虫调度器以及 Socket ...

  8. python 英语分词_基于Python NLTK库进行英文文本预处理

    文本预处理是要文本处理成计算机能识别的格式,是文本分类.文本可视化.文本分析等研究的重要步骤.具体流程包括文本分词.去除停用词.词干抽取(词形还原).文本向量表征.特征选择等步骤,以消除脏数据对挖掘分 ...

  9. python回归算法_基于Python的函数回归算法验证

    看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归 回归方法就是寻找方差的最小值 y = kx + b xi, ...

  10. 浙江农林大学python期末考试_基于Python的地图匹配最短路径法实现

    117 科学论坛 在智能交通领域,众所周知,智能 交通系统在当今世界道路交通网络的管 理中发挥着重要的作用,而车辆导航系 统又是智能交通系统的重要组成部分. 在车辆导航系统中,定位的精确性和实 时性是 ...

最新文章

  1. Chrome检查更新总失败?安装细则讲解
  2. 揭秘华为麒麟990 5G:提前3年布局,百亿晶体管把7nm用到了极致
  3. ubuntu15.10避免图形界面无法登录的jdk配置
  4. 解决 Successfully created project '' on GitHub, but initial push failed: Could not read from remote re
  5. AI:IPPR的数学表示-CNN可视化语义分析
  6. python变量类型怎么决定的_Python数据类型提示痛点的解决方案探讨
  7. v7000更换电池步骤_ups电源运行中是否可以更换电池?应如何操作呢
  8. java ByteBuffer flip()和limit()的理解
  9. CheckedListBoxControl 实现复选框的单选与多选功能
  10. 快讯:永中集成Office的核心技术落入谁的手?
  11. Java-String类常用方法汇总
  12. OpenContrail 体系架构文档
  13. Agile实践之Kanban工具: Wekan
  14. DruidDataSource配置说明
  15. Lambda将搬砖变成艺术
  16. 服务器vga接显示器无信号,显示器用HDMI转VGA接口后,无信号怎么解决
  17. Qt中鼠标的双击事件和单击事件的实现方式
  18. loadrunner入门教程(24) --Load Generator
  19. Java调用MySQL并返回数据_Java调用MySQL存储过程并获得返回值的方法
  20. CCRC中国网络安全审查技术与认证中心 物联网安全技术工程师(ISTE)开课通知

热门文章

  1. 【转】最小编辑距离 算法原理
  2. GMGridView cell button
  3. 几种用函数指针方式来访问类成员函数的方法总结
  4. esp32 Flash分区
  5. STM32F103外部晶振由8M变为12M
  6. soapui oracle groovy,soapUI+groovy 接口测试之部分groovy使用记录
  7. NER数据增强、badcase处理、数据优化
  8. 跨链(2)跨链技术“分布式私钥控制”
  9. 智能合约重构社会契约 (2)雅阁项目智能合约
  10. 现代密码学3.3--伪随机生成器/PRG