操作浏览器的方法都固定下来,不能变。
操作方法需要的字段(定位方法,定位表达式,操作的值)用单独的列表示。
程序运行异常后需要有错误信息和错误截图
2.3.概念
我们把上面的这种设计方法叫做关键字驱动,总结以下两点。
1.关键字驱动框架是一种功能自动化测试框架
被称为表格驱动测试
被称为基于动作字的测试。
2.关键字驱动的框架的重要组成部分
测试步骤(Test Step),
测试步骤中的对象(Test Object) --鼠标、键盘、浏览器等对象
测试对象执行的动作(Action)
测试对象需要的数据(Test Data)
3.如何设计关键字驱动
3.1.如何设计程序?
从上面设计的用例出发,我们依次来分析需要实现的功能。

我们希望的是自动化框架脚本能读取每一行用例,然后在执行后把测试结果也填好,如果执行出错要有错误信息、错误截图。那我们需要完成以下代码的编写。
(1)Excel操作(读、写)
读取关键字名称、操作元素定位方式、操作元素定位表达式、操作值
执行完成后写入执行时间、测试结果、错误信息、截图文件位置
(2)根据关键字名称、操作元素定位方式、操作元素定位表达式、操作值开发web操作脚本
(3)执行用例的方法脚本
(4)错误信息记录方法脚本
(5)错误截图方法脚本
3.2.Excel的操作
主要实现excel表格的读取与写入

class OperateExcel(builtins.object)
 Methods defined here:
init(self, excelfile)
 :param excelfile: excle文件路径和名字
 get_cell_of_object(self, sheet, coordinate=None, row_no=None, cols_no=None)
 :param sheet: sheet对象
 :param coordinate: 坐标
 :param rowNo: 行号
 :param colsNo: 列号
 :return: 单元格的对象
 get_cell_of_value(self, sheet, coordinate=None, row_no=None, cols_no=None)
 :param sheet: sheet对象
 :param coordinate:坐标
 :param row_no:行号
 :param cols_no:列号
 :return:cell值
 get_cols_number(self, sheet)
 :param sheet: sheet对象
 :return: sheet中有数据区域的列结束行号
 get_column(self, sheet, col_no)
 :param sheet: sheet对象
 :param col_no: 下标从1开始
 :return:
 get_row(self, sheet, row_no)
 :param sheet: sheet对象
 :param rowNo: 从1开始
 :return: 返回的是这一行所有的数据内容组成的tuple
 get_rows_number(self, sheet)
 :param sheet: sheet对象
 :return: sheet中有数据区域的行结束行号
 get_sheet_by_index(self, sheet_index)
 :param sheet_index: sheet的索引号
 :return: sheet对象
 get_sheet_by_name(self, sheet_name)
 :param sheet_name: excel中的sheet名字
 :return: sheet对象
 get_start_col_number(self, sheet)
 :param sheet: sheet对象
 :return: sheet中有数据区域的开始的列号
 get_start_row_number(self, sheet)
 :param sheet: sheet对象
 :return: sheet中有数据区域的开始的行号
 write_cell(self, sheet, content, coordinate=None, row_no=None, cols_no=None, style=None)
 :param sheet: sheet对象
 :param content: 写入的内容
 :param coordinate: 坐标
 :param row_no: 行号
 :param cols_no: 列号
 :param style: 字体颜色的名字,比如red,green
 :return:成功返回True
 write_cell_current_time(self, sheet, coordinate=None, row_no=None, cols_no=None)
 :param sheet: sheet对象
 :param coordinate: 坐标
 :param row_no: 行号,下标从1开始
 :param cols_no: 列号,下标从1开始
 :return:成功返回True


3.3.Web操作脚本
主要实现页面元素查找功能的封装和页面校验断言assert的封装

class WebPageAction(builtins.object)
 Methods defined here:
init(self)
 :param browser_name:浏览器的类型 chrome firefox ie
 accept_alert(self)
 弹出提示框操作
 assert_driver_title_is(self, title)
 assert_is_text_in_element(self, locator, text, timeout=10)
 判断文本是否存在于文本中
 :return:
 assert_is_value_in_element(self, locator, value, timeout=10)
 判断value属性值是否相同
 :return:
 assert_string_in_pagesource(self, string)
 :param string: 断言页面源码是否存在某关键字或关键字字符串
 :return: 成功返回True,否则False
 back_browser(self)
 返回上一页
 capture_screen(self)
 屏幕截图
 :return:
 clear(self, locator)
 click(self, locator, timeout=10)
 点击元素
 :return:
 close_browser(self)
 关闭浏览器
 :return:
 close_window(self)
 关闭当前页面
 :return:
 find_element(self, locator, timeout=10)
 定位一个元素
 find_elements(self, locator, timeout=10)
 定位一组元素
 input_text(self, locator, text, timeout=10)
 写入数据
 :return:
 maximize_browser(self)
 窗口最大化
 :return:
 open_browser(self, browser_name=None)
 open_url(self, url)
 打开网址
 :return:
 random_choice_select(self, loc_1, loc_2=‘option’)
 随机选择下拉框
 refresh_browser(self)
 刷新浏览器
 :return:
 select_by_index(self, locator, index, timeout=10)
 索引定位下拉框选项
 :param locator: 定位器,是一个元组
 :param index: 接收索引
 :param timeout: 最大等待时间
 :return:
 select_by_text(self, locator, text, timeout=10)
 文本信息定位下拉框选项
 :param locator: 定位器,是一个元组
 :param text: 接收文本信息
 :param timeout: 最大等待时间
 :return:
 select_by_value(self, locator, value, timeout=10)
 value值定位下拉框选项
 :param locator: 定位器,是一个元组
 :param value: value值的接收
 :param timeout: 最大等待时间
 :return:
 select_checkbox(self, locator, timeout=10)
 选择单个复选框
 :param locator: 定位器,是一个元组
 :param timeout: 定位器,是一个元组
 :return:
 select_checkboxes(self, locator, timeout=10)
 全选复选框
 :param locator: 定位器,是一个元组
 :param timeout: 最大等待时间
 :return:
 select_radio(self, locator, timeout=10)
 单选框选中定位
 :param locator: 定位器,是一个元组
 :param timeout: 最大等待时间
 :return:
 sleep_seconds(self, seconds)
 强制等待

3.4.日志记录
通过logging模块记录系统的运行日志
3.5.配置
方便excel在调整列或者以后添加列后的维护。

3.6.运行
(1)自定义一个在excle写结果的函数
(2)执行用例的步骤
a)先获取要执行的用例,遍历找到要具体执行用例的sheet表。
b)执行sheet表中的步骤。
i.根据sheet中的步骤判断当前用例执行是否成功(需要执行的用例数等于执行通过的用例数,则执行成功)
ii.如果有错误就截图,并保存错误日志
iii.测试过程中统计执行了多少用例,成功多少,失败多少。
c)把执行结果写到excle中
4.项目代码
4.1.代码

4.2.运行结果

5.框架分析
(1)使用外部测试数据文件,使用Excel管理测试用例的集合和每个测试用例的所有测试步骤,实现一个文件中完成测试用例的维护
(2)每个测试用例的测试结果在一个文件中查看和统计
(3)通过定义关键字,操作元素的定位方式及定位表达式和操作值就可以实现每个测试用例步骤的执行,可以更加灵活地实现自动化测试的需求
(4)实现定位表达式和测试代码的分离,实现定位表达式直接在测试数据文件中进行维护。
(5)框架提供日志功能,方便调试和监控自动化测试程序的执行
(6)基于关键字测试框架,即使不懂开发技术的测试人员也可以实施自动化测试,便于在整个测试团队中推广和使用自动化测试技术,降低自动化测试实施的技术门槛
(7)基于关键字的方式,可以进行任意关键字的扩展,以满足更加复杂项目的自动化测试需求