UI自动化之关键字驱动

这篇具有很好参考价值的文章主要介绍了UI自动化之关键字驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关键字驱动框架:将每一条测试用例分成四个不同的部分

  • 测试步骤(Test Step):一个测试步骤的描述或者是测试对象的一个操作说明
  • 测试步骤中的对象(Test Object):指页面的对象或者元素
  • 对象执行的动作(Action):页面操作的动作
  • 执行对象所需要的数据(Test Data):任何对象操作时所需要的值

例如:登录163邮箱,步骤分为:

  1. 打开浏览器
  2. 输入url
  3. 切换iframe
  4. 输入用户名
  5. 输入密码
  6. 点击登录

1:创建excel文件,使用excel文件来存放测试用例及测试步骤,excel内容如下:

login的sheet页中,描述了测试步骤,测试步骤中的对象可以分为:测试对象的定位方式以及定位方式表达值:

UI自动化之关键字驱动,UI自动化,自动化,selenium,python

从excel文件中,可以看到,每一个步骤我们要执行的动作是什么,例如打开浏览器,我们需要定义一个open_browse方法,再读取excel文件的内容时,程序才知道要怎么做。因此我们需要为每个执行动作定义一个方法。

再在excel中增加一个sheet页,从来存放测试用例,如index:

UI自动化之关键字驱动,UI自动化,自动化,selenium,python

2:搭建项目框架,只是简单的实现关键字驱动,需要的其他内容可以再往框架中加。

项目结构目录:

UI自动化之关键字驱动,UI自动化,自动化,selenium,python

3:接下来我们来看一下各个文件夹下py文件的内容

首先是Util文件夹下,封装的查找元素控件的工具类find_ele.py文件

# find_ele.py
from selenium.webdriver.support.wait import WebDriverWait


def find_element(driver, location_type, location_express):
    '''查找控件元素'''
    try:
        driver = WebDriverWait(driver, 20).until(lambda driver:driver.find_element(location_type, location_express))
        return driver
    except Exception as e:
        raise e

接下来我们就要在Util文件下,封装读取excel文件内容方法的excel_parse.py文件,再封装该方法前,需要在Setting文件下,创建Config.py文件,用来获取文件路径。

Config.py文件内容如下:

# Config.py
import os

Base_Dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 测试数据文件
Test_Data_Path = os.path.join(Base_Dir, 'TestData')

excel_parse.py文件内容如下:

# excel_parse.py
from Setting.Config import Test_Data_Path
from openpyxl import load_workbook

class ExcelParse:

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

    def load_workbook(self, filename):
        '''加载文件'''
        try:
            self.workbook = load_workbook(filename)
        except Exception as e:
            raise e

    def get_sheet(self, sheetname):
        '''获取sheet页'''
        try:
            self.sheet = self.workbook[sheetname]
        except Exception as e:
            raise e

    def get_row_num(self):
        '''返回行数'''
        return self.sheet.max_row

    def get_col_num(self):
        '''返回列数'''
        return self.sheet.max_column

    def get_cell_value(self, row, col):
        '''返回某一单元格的值'''
        return self.sheet.cell(row=row, column=col).value

    def get_row_value(self, row):
        '''返回某一行的值'''
        try:
            col = self.get_col_num()
            data = []
            for i in range(1, col+1):
                data.append(self.get_cell_value(row, i))
            return data
        except Exception as e:
            raise e

    def write_cell(self, row, col, filename, content):
        '''单元格赋值'''
        try:
            self.sheet.cell(row=row, column=col, value=content)
            self.workbook.save(filename)

        except Exception as e:
            raise e


if __name__ == '__main__':
    execl = ExcelParse()
    execl.load_workbook(Test_Data_Path + '/login.xlsx')
    execl.get_sheet('login')
    res = execl.get_row_value(2)
    print(res)

然后就需要定义测试步骤中的执行动作的方法,在Util文件夹下,创建elementAction.py文件,内容如下:

# elementAction.py
from selenium import webdriver
from Util.find_ele import find_element

driver = None

def open_browse(browser_name, *args):
    '''打开浏览器'''
    global driver
    try:
        if browser_name.lower() == 'chrome':
            driver = webdriver.Chrome()
        elif browser_name.lower() == 'firefox':
            driver = webdriver.Firefox()
        else:
            driver = webdriver.Ie()
    except Exception as e:
        raise e

def get_url(url, *args):
    '''打开网址'''
    try:
        driver.get(url)
    except Exception as e:
        raise e


def max_window(*args):
    '''窗口最大化'''
    try:
        driver.maximize_window()
    except Exception as e:
        raise e

def switch_frame(location_type, location_express, *args):
    '''切换iframe'''
    try:
        frame = find_element(driver, location_type, location_express)
        driver.switch_to.frame(frame)
    except Exception as e:
        raise e

def input_content(location_type, location_express, content, *args):
    '''定位输入框,输入内容'''
    try:
        find_element(driver, location_type, location_express).send_keys(content)
    except Exception as e:
        raise e


def click(location_type, location_express, *args):
    '''点击操作'''
    try:
        find_element(driver, location_type, location_express).click()
    except Exception as e:
        raise e

def assert_title(title, *args):
    '''断言title是否正确'''
    try:
        assert title in driver.title
    except Exception as e:
        raise e


def close_browse():
    '''关闭浏览器'''
    driver.quit()


if __name__ == '__main__':
    open_browse('chrome')
    get_url('http://mail.163.com')
    max_window()
    switch_frame('tag name', 'iframe')
    input_content('name', 'email', 'test123')
    input_content('name', 'password', 'a123456')
    click('id', 'dologin')
    assert_title('网易')

然后将从excel文件中读取出来的内容,拼接成要执行的方法。在Util文件夹下,创建common.py文件。

# common.py
def generate_method_express(location_type, location_express, key_word, operate_data):
    # location_type, location_express为空,operate_data不为空
    if key_word and operate_data and location_type is None and location_express is None:
        # 判断操作值的类型
        if isinstance(operate_data, int):
            method_express = key_word + '(' + str(operate_data) + ')'
        else:
            method_express = key_word + "('" + operate_data + "')"
        # print(method_express)
    # 只有关键字有值,其他的都为空,比如:max_window, close_browse
    elif key_word and operate_data is None and location_type is None and location_express is None:
        method_express = key_word + '()'
        # print(method_express)
    # location_type,location_express不为空,operate_data为空
    elif key_word and location_type and location_express and operate_data is None:
        method_express = key_word + "('" + location_type + "','" + location_express + "')"
        # print(method_express)
    # 都不为空
    else:
        if isinstance(operate_data, int):
            method_express = key_word + "('" + location_type + "','" + location_express + "'," + str(operate_data) + ")"
        else:
            method_express = key_word + "('" + location_type + "','" + location_express + "','" + operate_data + "')"
        print(method_express)
    return method_express

之后,就是编写执行测试用例了。

在TestScript文件夹下,创建test_login.py文件

# test_login.py
from Util.excel_parse import ExcelParse
from Setting.Config import Test_Data_Path
from Util.elementAction import *
from Util.common import generate_method_express

excel = ExcelParse()
# 加载login.xlsx文件
excel.load_workbook(Test_Data_Path + '/login.xlsx')

def test_run():
    try:
        # 获取indexsheet页
        excel.get_sheet('index')
        # 获取index的行数
        rows = excel.get_row_num()
        for i in range(2, rows+1):
            # 判断是否要执行
            is_run = excel.get_cell_value(i, 4).lower()
            if is_run == 'y':
                # 获取要执行的sheet页名称
                case_step_sheet = excel.get_cell_value(i, 3)
                # 切换到要执行的sheet页
                excel.get_sheet(case_step_sheet)
                # 获取要执行的步骤数
                step_num = excel.get_row_num()
                # print(step_num)
                success_num = 0       # 记录成功的步骤数
                for j in range(2, step_num+1):
                    # 获取步骤描述
                    step_desc = excel.get_cell_value(j, 1)
                    # 定位方式
                    location_type = excel.get_cell_value(j, 2)
                    # 定位方式表达值
                    location_express = excel.get_cell_value(j, 3)
                    # 执行动作
                    key_word = excel.get_cell_value(j, 4)
                    # 执行数据
                    operate_data = excel.get_cell_value(j, 5)
                    # print(step_desc, location_type, location_express,key_word, operate_data)
                    method_express = generate_method_express(location_type, location_express, key_word, operate_data)
                    try:
                        # 运行函数,eval(),将字符串str当成有效的表达式来求值并返回计算结果
                        eval(method_express)
                    except Exception as e:
                        raise e
                    else:
                        success_num += 1
                # 切换sheet页到index
                excel.get_sheet('index')
                if success_num == step_num - 1:
                    # 成功的步骤数等于步骤sheet页的行数减1,表示测试执行成功,写入成功
                    excel.write_cell(i, 5, Test_Data_Path + '/login.xlsx', 'pass')
                else:
                    # 写入失败
                    excel.write_cell(i, 5, Test_Data_Path + '/login.xlsx', 'Fall')
    except Exception as e:
        raise

执行test_login.py文件,关键字驱动就实现了。这只是简单的实现了关键字驱动,了解了关键字驱动应该是什么样的,日志、测试报告、执行入口可以自己再添加,上面的代码也可以再进行优化。文章来源地址https://www.toymoban.com/news/detail-689024.html

到了这里,关于UI自动化之关键字驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Robot Framweork之UI自动化测试---Selenium2Library常用关键字

    在项目实际自动化测试过程中,主要用到了Selenium2Library库里的一些和内置包BuiltIn的,今天我们就来分享下Selenium2Library常用。 我们把操作主要分为六大类: 一)浏览器操作 二)文本输入 三)点击操作 四)选择/取消选择 五)检查点 六)其他 插播一个小

    2024年02月14日
    浏览(38)
  • 自动化测试之数据驱动与关键字驱动

    目录 1.录制/回放的神话 2.数据驱动的自动化测试框架 3.驱动的自动化测试  初次接触自动化测试时,对数据驱动和驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展

    2024年02月17日
    浏览(47)
  • 自动化测试框架之关键字驱动和数据驱动

    文章架构 1.什么是驱动 2.什么是数据驱动 3.数据驱动和驱动的关系 4.数据驱动和驱动结合进行测试的实施流程 5.案例 1.什么是驱动? 驱动是自动化测试框架设计的核心内容,可以解决代码冗余、可读性、维护性、代码复用性等问题。 比如,

    2024年02月14日
    浏览(41)
  • 如何搭建关键字驱动自动化测试框架?

    前言 那么这篇文章我们将了解驱动测试又是如何驱动自动化测试完成整个测试过程的。驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试。驱动的框架的基本工作是将测试用例分成四个不同的部分。首先是测试步骤(

    2024年02月11日
    浏览(50)
  • 如何搭建关键字驱动自动化测试框架?这绝对是全网天花板的教程

    目录 1. 驱动自动化测试介绍 2. 搭建驱动自动化测试框架 步骤1:选择测试工具 步骤2:定义测试用例 步骤3:编写测试驱动引擎 步骤4:实现测试库 步骤5:执行测试 3. 实现驱动自动化测试的关键技术 技术1:测试工具 技术2:测试驱动引擎的编写 技

    2023年04月20日
    浏览(69)
  • Python Selenium 关键字驱动

    目录 项目目录结构  action目录 config目录 exceptionpictures目录 log目录 testCases目录

    2024年02月05日
    浏览(50)
  • 用Python编写UI自动化用例第一步from selenium import webdriver,即导入第三方驱动包时报错,高效解决办法,报错问题已解决

    问题:在PyCharm中新建一个文件,py01_test_01.py文件。编写UI自动化用例的第一步就是导入驱动(from selenium import webdriver),在已经安装selenium的情况下(pip install selenium==3.141.0),执行的时候还是报错。如下图:     原因排查过程:从报错信息,错误信息为没有找到selenium。首先查

    2024年02月12日
    浏览(64)
  • Selenium 自动化 —— 使用WebDriverManager自动下载驱动

    上一篇文章 入门和 Hello World 实例 中,我们提供了一个最简单的 Selenium 上手的例子。 但是某一天,突然发现相同的代码居然运行报错了。这是怎么回事呢? 日志中其实提示的很明显了:Chrome浏览器和Chrome WebDriver的版本不匹配。当前WebDriver只支持Chrome浏览器版本114. 先检查一

    2024年03月26日
    浏览(50)
  • Python Selenium UI自动化测试_python 自动化ui测试

    2.2 安装selenium pip install selenium pip install selenium==2.53.0 2.3 下载webdriver驱动 以chrome浏览器为例 查看chrome浏览器版本:在地址栏输入 chrome://version chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html 下载与浏览器版本对应的chrome driver 将下载好的chrome driver 解压,并放至到

    2024年04月14日
    浏览(71)
  • 为什么UI自动化难做?—— 关于Selenium UI自动化的思考

    在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 通常只是听说过,就想去搞UI自动化的团队,心里都认为「UI自动化」等于「减少人工 提高效率」,这固然没什么大错,但是他们也会

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包