BDD - SpecFlow Driver Pattern 驱动模式

news2025/2/3 8:05:34

BDD - SpecFlow Driver Pattern 驱动模式

  • 引言
  • Driver Pattern 的优势
  • 举例
    • 不用 Driver Pattern
    • 运用 Driver Pattern

引言

前面 《 BDD - SpecFlow Page Object Model POM 》介绍了 POM 模式,用于提取 Web UI 元素封装成 Page Object 类,今天介绍另外一种 Driver Pattern 驱动模式,这两种模式都是为了提高 Automation 的维护性,可读性,有利于Automation 框架设计。

Driver Pattern 的优势

Driver 模式只不过是 Step Definitions 和 Automation Code 之间附加层。

多年实践经验表明,组织好 Bindings 类和 Automation Code,保持 Bindings 类中的 Code 非常短(一个 Step definition 不超过 10 行 Code),这样可读性强。

Driver Pattern 具有下列优势:

  • 易维护 Autoamtion Code
    将 Code 分成多个部分,使得 Code 方便维护

  • 不同的 Step Definitions 方便重用方法,或则合并多个 Steps 成单个的 Step
    我们经常看到一组 Steps 适用于多个 Scenarios,将 Automation Code 开成不同的类,更方便调用这些方法。

  • Step Definitions 易读
    使得没有 Coding 技术的人也有理解一个 Step Definiton 的实现作用。特别是大的项目,没有人想了解每单个 Step 的实现。

当然 Driver Patter 利用 Context Injection 将多个类联系在一起,详情请参考 《 BDD - SpecFlow Context Injection 上下文依赖注入 》

举例

这个例子,对比运用 Driver Patern 前后的变化。

不用 Driver Pattern

这是一些 Automation Code 利用 Page Object Model 来检查一些 WebElements 是否存在。Step Definition 中大量的 code 行,不够简短,可读性不强。

在这里插入图片描述

[Then(@"it is possible to enter a '(.*)' with label '(.*)'")]
public void ThenItIsPossibleToEnterAWithLabel(string inputType, string expectedLabel)
{
    var submissionPageObject = new SubmissionPageObject(webDriverDriver);

    switch (inputType.ToUpper())
    {
        case "URL":
            submissionPageObject.UrlWebElement.Should().NotBeNull();
            submissionPageObject.UrlLabel.Should().Be(expectedLabel);
            break;
        case "TYPE":
            submissionPageObject.TypeWebElement.Should().NotBeNull();
            submissionPageObject.TypeLabel.Should().Be(expectedLabel);
            break;
        default:
            throw new NotImplementedException(inputType + " not implemented");
    }
}

运用 Driver Pattern

我们将上面 Step Definition 中大量的 Code 移到一个 Driver 类SubmissionPageDriver 中,这样就能减少 Step Definition 中的 Code 行数到一行。我们将命名一个 CheckExistenceOfInputElement 方法,团队中每个成员都能从名字上理解这个方法的作用。

为了在 Step Definition 中调用 Driver 类中的封装的方法 SubmissionSteps,我们利用 SpecFlow 自带支持的 Context Inject 依赖注入,在 public 构造函数中定义 Driver 类的实例做为参数。

在这里插入图片描述

[Binding]
public class SubmissionSteps
{
    private readonly SubmissionPageDriver submissionPageDriver;

    public SubmissionSteps(SubmissionPageDriver submissionPageDriver)
    {
        this.submissionPageDriver = submissionPageDriver;
    }

    [Then(@"it is possible to enter a '(.*)' with label '(.*)'")]
    public void ThenItIsPossibleToEnterAWithLabel(string inputType, string expectedLabel)
    {
        submissionPageDriver.CheckExistenceOfInputElement(inputType, expectedLabel);
    }

    // ...
public class SubmissionPageDriver
{
    // ...

    public void CheckExistenceOfInputElement(string inputType, string expectedLabel)
    {
        var submissionPageObject = new SubmissionPageObject(webDriverDriver);

        switch (inputType.ToUpper())
        {
            case "URL":
                submissionPageObject.UrlWebElement.Should().NotBeNull();
                submissionPageObject.UrlLabel.Should().Be(expectedLabel);
                break;
            case "TYPE":
                submissionPageObject.TypeWebElement.Should().NotBeNull();
                submissionPageObject.TypeLabel.Should().Be(expectedLabel);
                break;
            default:
                throw new NotImplementedException(inputType + " not implemented");
        }
    }

    // ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子统计台账:处理时间与名称所在行有交错的流水账格式

目录 1 新建项目 2 水平过滤模板 3 垂直过滤模板是重点 实际工作中,各种千奇百怪的事情都能遇上。本来普通格式的流水账可以处理了还挺高兴,一下子又来了这样的数据格式,居然名称前面根本没有日期这样的流水账: 这种情况还是需…

【LeetCode每日一题】——462.最小操作次数使数组元素相等 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 排序 二【题目难度】 中等 三【题目编号】 462.最小操作次数使数组元素相等 II 四【题目描述】…

2022NUSTCTF--web

ezProtocol web基础 POST / HTTP/1.1 Host: 43.143.7.97:28520 Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Acc…

Linux信号

目录注意信号概念用kill -l命令可以查看系统定义的信号列表信号处理常见方式概览产生信号1. 通过终端按键产生信号Core Dump2. 调用系统函数向进程发信号3. 由软件条件产生信号4. 硬件异常产生信号信号捕捉模拟一下野指针异常总结阻塞信号1. 信号其他相关常见概念2. 在内核中的…

Jest单测实践篇

快照测试 快照测试在你要确保你的UI没有发生改变的时候非常有用。jest的快照测试为文本测试,第一次执行时存储本次的快照,然后在之后的测试过程中进行文本比对。 toMatchSnapshot() 方法 import React from react; import Link from ../Link.react; i…

Python编程 列表的常用方法

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.字符串(str) 1.字符串常见操作(熟悉) 2.L.append(object) 3.L.exten…

前端开发环境搭建

1.安装git 去官网下载git安装包https://gitforwindows.org/ 2.配置ssh公钥这样再操作git 的时候就不用输入密码了 1、鼠标右键,点击 ‘git bash here’ 2、配置一下name 、eamil git config --global user.name 用户名 git config --global user.email 邮箱 3…

Spring 6面向切面编程aop详解

面向切面编程十五、面向切面编程AOP15.1 AOP介绍15.2 AOP的七大术语15.3 切点表达式15.4 使用Spring的AOP15.4.1 准备工作15.4.2 基于AspectJ的AOP注解式开发实现步骤通知类型切面的先后顺序优化使用切点表达式全注解式开发AOP15.4.3 基于XML配置方式的AOP(了解&…

Windows 10下部署Java环境——jdk1.8.0_301版本

文章目录JDK安装JDK的环境配置验证JDK配置成功JDK安装 JDK1.8.0_301版本资源:https://download.csdn.net/download/qq_43408367/87061076?spm1001.2014.3001.5503 安装步骤参考:Windows 10下部署Java环境——JDK 11.0.2版本 JDK的环境配置 “我的电…

配置静态ip,主机名,centos安装jdk,hadoop等

切换到root用户操作 su root配置ip地址和ip地址的配置,网关,域名解析 vim /etc/sysconfig/network-scripts/ifcfg-ens33linux⾥的bootproto的none,static,dhcp有什么区别这个是⽹络配置参数: BOOTPROTOstatic 静态IP BOOTPROTOdhcp 动态IP…

消息队列 RocketMQ 5.0:从消息服务到云原生事件流平台

前言 回顾 RocketMQ 的发展历程,至今已十年有余。2022 年 RocketMQ 5.0 正式发布,全面迈进云原生时代。 11 月 5 日,2022 杭州 云栖大会上,阿里云智能高级产品专家杨秋弟在云原生峰会上发表主题演讲,发布消息队列 R…

【蓝桥杯冲击国赛计划第6天】字典

文章目录1. 字典1.1 概念1.2 字典的定义1.3 字典的添加1.4 字典的修改1.5 字典的删除1.6 字典的访问1.7 字典的排序2. 实例「弗里的语言」题目描述输入描述输出描述输入输出样例示例1示例2运行限制2.1 简单分析2.2 初始化2.3 get 访问2.4 补充2.5 完整代码3. 实例「快递分拣」题…

关于编辑器QScintilla(Scintilla)词法分析器取消非活动代码灰色显示

入门,首先看我这两篇博客:关于QScintilla库的入门大全https://biao2488890051.blog.csdn.net/article/details/126798996?spm1001.2014.3001.5502 关于编辑器QScintilla(Scintilla)词法分析器工作原理的分析(实现注释…

MATLAB算法实战应用案例精讲-【智能优化算法】黏菌算法(SMA)(附MATLAB实现代码)

前言 黏菌觅食算法(Slime Mould Algorithm,SMA)由Li及Mirjalili教授等人于2020年提出,主要模拟了黏菌的扩散及觅食行为,利用自适应权重模拟了基于生物振荡器的“黏菌传播波”产生正反馈和负反馈的过程,形成具有良好的探索能力和开发倾向的食物最优连接路径,因此具有较好的…

JavaSE之反射

目录Class类反射的概念反射的好处反射的应用场景三种获取Class对象的方式Class类中的方法Class中获取构造器的方法获取成员方法对象获取成员变量反射案例最后Class类 Class类创建的对象我们称为Class对象/类对象/字节码对象 Class对象会保存类中的信息(构造方法, 成员方法, 成…

STM32CubeMX新建工程并点亮一个LED

可提前看:STM32CubeMX环境安装(保姆级) 目录 进入STM32CubeMX界面 双击软件,可能会出现的弹窗 更改固件路径 新建工程 进入配置环境 以一个点灯程序为例 GPIO配置 输出电平设置 输出模式 上下拉 输出速度 ​编辑 U…

【笑小枫的SpringBoot系列】【十六】SpringBoot生成PDF

关于笑小枫💕 Hello,我是笑小枫,欢迎来到我的世界,喜欢的朋友关注一下我呦,大伙的支持,就是我坚持写下去的动力。 笑小枫个人博客:https://www.xiaoxiaofeng.com 本文源码:https://g…

DVWA之SQL注入(盲注)

文章目录方法一:基于布尔盲注1.判断是否存在注入,注入类型2.猜数据库名3.猜解数据库中的表名4.猜列名5.猜表中的字段值方法二:基于时间盲注1.判断是否存在注入,注入是字符型还是数字型2.猜解当前数据库名3.猜解数据库中的表名4.猜…

ASPNetZero 11.4 Release Angular + MVC + Crack

Asp. NET 带有现代UI和稳定的结构,是新的网页应用的起点。它会提供预建和工作页以及很强的基本构造。 基础解决方案 你的下一个网络应用程序 ASP.NET Zero 是具有现代 UI 和 SOLID 架构以及完整源代码的新 Web 应用程序的起点。 ASP.NET Zero的好处 ASP.NET Zero 通…

化合物应用-动物给药方式

给药方式 针对实验动物的给药方式有很多种,总体可分为局部给药和系统给药。系统给药又可分为肠外给药和肠内给药。 1.1 肠内给药(Enteral administration) 口服(per os,p.o)给药由于具有经济、方便、安全…