BDD - SpecFlow Driver Pattern 驱动模式
创始人
2024-01-28 20:21:18
0

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");}}// ...

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...