关键字驱动测试框架(一)_根据关键字创建函数

关键字驱动测试框架源码:https://download.csdn.net/download/qq_38175040/18548169

之前的七篇都是数据驱动的WEB UI自动化测试框架,现在学习并记录一下关键字驱动的测试框架。
这两者在实现技术上可能没有太本质的区别,都是以selenium为核心,但在实现逻辑和思想上可能有较大的区别。

一.关键字驱动框架介绍

关键字驱动框架:
步骤:一个用例需要进行n步的操作步骤才能完成,而每个操作步骤都有可能用到以下三个关键字
对象:操作的页面或元素,如用户名输入框
动作:对对象进行的动作,如点击登录按钮,输入文字
数据:对象操作所用到的值,如用户名密码等

以登录163邮箱为例,操作步骤如下:
1.打开浏览器 对象:浏览器 动作:open 数据:Chrome()或者Firefox()
2.输入url 对象:浏览器 动作:输入 数据:url
3.窗口最大化 对象:窗口 动作:最大化 数据:
4.切换iframe 对象:iframe 动作:切换 数据:
5.输入用户名 对象:用户名输入框 动作:输入 数据:用户名
6.输入密码 对象:密码框 动作:输入 数据:密码
7.点击登录按钮 对象:登录按钮 动作:点击 数据:
8.等待n秒 对象: 动作:sleep 数据:n
9.进行断言 对象: 动作: 数据:

创建一个新项目
在这里插入图片描述

登录邮箱的完整步骤用excel来表现
在这里插入图片描述

关键字的命名应该用英文,因为后期会映射到代码里
先在项目下新建这几个包,命名与作用都与之前的数据驱动框架一样,还是把上面的这个excel文件复制到TestData下面
在这里插入图片描述

接着继续修改excel,用例这里的sheet名与后面写有具体步骤的sheet要对应
在这里插入图片描述

在这里插入图片描述
还是和上一个项目一样,先封装一个find_element方法,代码都是直接从那里拿的
在这里插入图片描述

from selenium.webdriver.support.wait import WebDriverWait

#将selenium读取页面元素的方法封装在此文件内
def find_element(driver,find_type,find_key):
    # element = driver.find_element(by=find_type,value=find_key)
    # return  element
    try:
        element = WebDriverWait(driver,3).until(lambda driver:driver.find_element(by = find_type,value = find_key))
        return element
    except Exception as e:
        raise e

然后这边也还是在excel里也如关键字,需要对excel进行操作,所以将上一个项目的操作excel代码的公用方法拷过来
在这里插入图片描述

import openpyxl
from openpyxl import load_workbook

from ConfigFiles.ConfigPath import xlsxPath


class ExcelOperate:
    def __init__(self):
        self.workbook = None
        self.sheet = None

    def load_workbook(self,filename):
        '''
        加载相应的excel文件
        :param filename:
        :return:
        '''
        try:
            self.workbook = load_workbook(filename)
        except Exception as e:
            print(e)

    def get_sheet_by_name(self,sheetname):
        '''
        拿到xlsx文件里对应的页
        :param sheetname:
        :return:
        '''
        try:
            self.sheet = self.workbook[sheetname]
        except Exception as e:
            print(e)

    def  get_rows_nums(self):
        '''
        返回当前页的最大行数
        :return:
        '''
        return self.sheet.max_row
    def get_col_nums(self):
        '''
        获取最大列数
        :return:
        '''
        return self.sheet.max_column

    def get_row_values(self,row):
        '''
        根据row获取某一行的值
        :param row:
        :return:
        '''
        columns = self.sheet.max_column
        row_data = []
        #遍历列的时候从1开始,不是从0开始,因为xlsx没有第0行,第0列
        for i in range(1,columns+1):
            cell_value = self.sheet.cell(row = row,column = i).value
            row_data.append(cell_value)
        return row_data

    def get_cell_value(self,row,column):
        '''
        获取某一个单元格的值
        :param row:
        :param column:
        :return:
        '''
        cell_value = self.sheet.cell(row=row,column=column).value
        return cell_value

    def modify_cell(self,row,column,data):
        '''
        在单元格内写入数据
        :param row:
        :param column:
        :param data:
        :return:
        '''
        self.sheet.cell(row=row,column=column).value = data
        self.workbook.save(xlsxPath)


if __name__ == '__main__':
    eo = ExcelOperate()
    #根据名字读取xlsx文件,xlsxPath已经在ConfigPath.py文件中定义过了
    eo.load_workbook(xlsxPath)
    eo.get_sheet_by_name('Sheet1')
    print(eo.get_col_nums())
    print(eo.get_rows_nums())
    print(eo.get_row_values(2))
    print(eo.get_cell_value(2,7))
    # eo.modify_cell(2,7,'dew')



这边报错了,所以还是要再把获取文件地址的代码拷到这边来
在这里插入图片描述

import  os
#获取项目内各个文件的地址并存放在变量里

#获取整个项目的根目录
ParentDirPath = os.path.dirname(os.path.dirname(__file__))

xlsxPath = os.path.join(ParentDirPath,u'TestData\key_word.xlsx')

二.建立映射,操作关键字

新建一个Action文件夹,并在下面新建一个elementAction.py文件
在这里插入图片描述

Action下面的文件用来操作excel里的关键字:
在这里插入图片描述

根据第一个关键字写一个相应的函数,传入的参数里必须都带一个*args,后面会用到,这里不做解释
在这里插入图片描述
再写一个获取url的函数,这边driver报错了,因为所有的函数都是共用的一个driver,所以定义一个全局变量
在这里插入图片描述在这里插入图片描述

继续补全这个文件里的函数,和excel里的关键字对的上
在这里插入图片描述
在这里插入图片描述

然后还是在文件里价格main,看看上面写的函数是否正确
在这里插入图片描述

运行成功,上面写的函数都没有问题
贴一下这部分的代码:

import time

from selenium import webdriver

from Utils.Find_element import find_element

driver = None

def open_browser(browser_name,*args):
    global driver
    driver = webdriver.Chrome()


def get_url(url_name,*args):
    global driver
    driver.get(url_name)

def max_window(*args):
    global driver
    driver.maximize_window()

def sleep(seconds,*args):
    time.sleep(seconds)

def switch_frame(location_type,location_name,*args):
    global driver
    try:
        i_frame = find_element(driver,location_type,location_name)
        driver.switch_to.frame(i_frame)
    except Exception as e:
        print(e)

def input_content(location_type,location_name,content,*args):
    global driver
    find_element(driver,location_type,location_name).send_keys(content)


def click(location_type,location_name,*args):
    global driver
    find_element(driver,location_type,location_name).click()

def assert_title(except_value,*args):
    global driver
    assert except_value in  driver.title


def close_browser(*args):
    global driver
    driver.quit()


if __name__ == '__main__':
    open_browser('chrome')
    get_url('https://mail.163.com')
    max_window()
    sleep(2)
    switch_frame('tag name','iframe')
    input_content('name','email','lsqtester001')
    input_content('name','password','qwer123')
    click('id','dologin')
    sleep(2)
    assert_title('网易邮箱6.0版')
    close_browser()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值