【问题标题】:Need feedback on my Selenium Framework model需要有关我的 Selenium 框架模型的反馈
【发布时间】:2015-11-03 13:33:48
【问题描述】:

我目前正在开发一个基于 C# .net 的 selenium 框架模型。

我想从所有 selenium 专家那里知道的一件主要事情是,我是否真的应该在 c#.net 中构建框架?用 JAVA 构建框架比用 C#.net 构建框架有什么真正的好处吗?

这个框架的主要成分/USP-

  1. 轻松编写测试。例如,对于单击按钮,编码人员必须简单地编写 Dom.find("#elementid").click()、Dom.WaitFor("#elementid") 或 Dom.WaitTillDisappears("#elementd") 这样做的目的是抽象出整个 selenium 驱动程序、属性、处理 chromedriver,以及所有对于没有经验的编码人员来说太长的脏东西。为此,我使用 OOPS 构建了一个模型,定义了处理 chromedriver 和其他内容的整个初始化的类,因此测试人员在编写代码时不必关心它。

  2. 我正在使用单元测试框架,例如单元测试和定义代表测试运行和测试用例的抽象类,因此编写代码的人只需定义测试用例并编写它们的在其下编写脚本并将这些案例作为单元测试运行。

  3. 我添加了 Db 日志记录,它将为执行的每个操作创建日志,从“尝试查找元素”到“在元素中键入内容”,因此如果任何操作失败,一个人有能力研究日志并找出究竟出了什么问题。

  4. 错误处理是使用 SeleniumExceptions 完成的,我正在覆盖消息以使其对框架用户更具可读性。

  5. 我正在考虑创建一个简单的抽象类,比如说 PageComponents.cs,它可以是一个抽象类,并具有检索页面信息、获取 id、属性、类等基本功能。喜欢在 POM 中创建脚本的人可以简单地使用 By 类型定义所有组件,因此假设他们所要做的就是创建另一个名为 LoginPage.cs 的类文件,从 PageComponents.cs 继承,然后简单地开始声明他们的对象。在用户将编写脚本的其他文件中,他们可以通过初始化 LoginPage 来简单地访问这些 Page 对象。任何更改,在 loginpage 中,他们所要做的就是更改 LoginPage.cs 中对象的属性

现在,我写这整个讨论的原因是为了了解所有从事 selenium 工作或从事过框架工作的人的观点。我想了解我正在尝试遵循的这个框架模型的所有优点和缺点,如果你们有什么更好的建议(你们已经研究过),那就太好了。我开始这个讨论是为了了解其他比我更有经验的公司和个人正在遵循什么。提前感谢您提供宝贵的反馈意见!

【问题讨论】:

  • 这将是一个有趣的讨论,但我认为 SO 不适合进行有趣的讨论。
  • 嗯,您是否已经尝试过一些行为或测试驱动开发方法?您可以尝试使用 JBehave 的 Serenity BDD(前 thucydides),例如,您已经实现了许多想要实现的功能(页面对象、活动文档、处理测试步骤等)
  • 嘿@stuXnet,你认为我应该把这个贴到别的地方吗?堆栈交换会是这个讨论的更好地方。我基本上想要尽可能多的反馈。
  • @spcial,感谢您的回复。只是想知道 Serenity 是否基于 C#.net?
  • @Prateek 我在 Java 中使用 serenity,所以我不能告诉你,但也许有类似的 C# 工具(例如 stackoverflow.com/questions/8922079/…)

标签: java c# unit-testing selenium automation


【解决方案1】:

看起来你做得很好。如果您没有任何特殊理由从 C# 迁移(并重新实现)到 JAVA,我的建议是不要这样做。恕我直言,这样做不会有任何好处:

在 JAVA 中构建框架优于在 C#.net 中构建框架

概念几乎相同,您需要的所有功能都可以支持两种目标语言。

但是我没有看到任何BDD(对于.Net 是Specflow)。最大的优势是它是所有相关团队成员(PO、开发、QA、BA 等)的共同点,并且非常适合

不是那么有经验的编码器。 ....所以测试人员在编写代码时不必关心它。

围绕的抽象

整个 selenium 驱动程序、属性、处理 chromedriver,以及所有太长的脏东西

是一个很好的方法。也许您可以使用 Test harness 主要概念进一步设计它 - 将您的测试逻辑划分为 single responsibility 的 3 个主要区域:

  • 测试引擎 - 不会携带有关测试产品的任何信息
  • 测试数据 - Data driven 或动态生成
  • 测试规范 - 由测试步骤、环境变量等组成。

另一个不错的功能是image recognition,它将验证布局。

由于本质上所有 UI 测试都很慢 - 您是否打算并行执行测试?如果是 - this article 将是一个很好的起点。 in-memory DB RAM optimization 也是可能的。

POM 是个好习惯

我正在考虑创建一个简单的抽象类,比如说 PageComponents.cs,它可以是一个抽象类,并且具有检索页面信息、获取 id、属性、类等基本功能。

如果您的目标是继续简单,那么LoadableComponent 是一种方法。它会给你一个很好的Information hiding,但会损害 Single 责任,因为它将 Actions 逻辑(点击、等待等)引入你的 Page 对象(演示文稿没有与模型完全分离) )。但无论如何,设计是一个权衡问题。

【讨论】:

  • 感谢您提供如此详细的反馈,ekostadinov。真的很感激。我将研究 BDD,以及关于测试工具和单一职责概念 - 1. 我创建了以下类 - SeleniumTest - 一个启动测试运行的抽象类。这个类,简单地启动 webdriver 并将驱动程序对象传递给不同的 Helper 类的构造函数。这可以被认为是 nunit 语言中的 [TestFixture]
  • SeleniumTestCase- 这是一个抽象类,测试人员将在其中为特定测试用例或特定页面编写整个脚本。抽象类具有记录步骤、抛出错误等基本功能,这在编写脚本时很有用 DomWrapper - 这是一个用于定义使用 DOM 概念在页面中查找特定元素所需的所有方法的类。 Find、Waitfor、waittodisappear 之类的东西适合这里
  • DomElement- 这是我为页面元素创建的类类型,因此,任何页面元素都是 DomElement。在这种类型中,用户可以访问类、id 等元素属性,还可以使用 Findchild、click、sendkeys 等功能。 DBOperations - 这是具有记录测试用例状态和内容的功能的类。基本上,测试用例的 DB 日志记录由此类处理
  • 现在,关于数据驱动,好吧,我不确定在框架中围绕这个构建一个特性是否会有所帮助,因为如果用户想要,这个框架可以用来自动化任何产品到,我们不知道用户的意图,所以这取决于用户,如果他想要数据驱动的东西,他们将不得不相应地编码他们的东西......除此之外,到目前为止你对整体的看法如何测试工具和单一职责概念,你认为我会遵循吗?
  • 抱歉长评论:​​)
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多