c# - Selenium 和 SpecFlow 之间的共享方法

标签 c# design-patterns selenium bdd specflow

我有一个测试项目,其中包含我要测试的所有 Selenium 场景,我想向该解决方案添加一个 SpecFlow 项目,该项目显然将使用一些 WebDriver 方法。 我不想复制我的代码,但 SpecFlow 不能很好地与 Selenium 配合使用(例如,Selenium 使用的是 SpecFlow 中不允许的 [TestInitialize] 属性)。 将两者结合起来的最佳方式是什么?

我想执行与“SomeTestMethod”中相同的步骤,但使用 SpecFlow。

这是项目的一个例子:

public class SeleniumBaseTest : BaseTest
{
    [AssemblyInitialize]
    public static void Initialize(TestContext testContext)
    {
    }

    Public SomeMethod()
    {
    }
}
[TestClass]
public class SeleniumFeature : SeleniumBaseTest 
{
   [TestInitialize]
   public void SeleInitialize()
   {
   }

   [TestMethod]
   public void SomeTestMethod()
    {            
    }
}

最佳答案

由于 SpecFlow 步骤实际上只是继承自 System.Object 的类的公共(public)方法,因此只需实例化步骤定义类并从您的 Selenium 测试中调用公共(public)方法。

DataSteps.cs

[Binding]
public class DataSteps
{
    [Given("Something exists in the database")]
    public void GivenSomethingExistsInTheDatabase()
    {
        // ...
    }
}

在您的 Selenium 测试类中:

[TestClass]
public class SeleniumFeature : SeleniumBaseTest 
{
    private DataSteps dataSteps;

    [TestInitialize]
    public void SeleInitialize()
    {
        dataSteps = new DataSteps();
    }

    [TestMethod]
    public void SomeTestMethod()
    {
        dataSteps.GivenSomethingExistsInTheDatabase();
    }
}

唯一真正的痛苦是当您需要使用 TechTalk.SpecFlow.Table 对象作为步骤定义的参数时。要弄清楚该语法,请查看 Designer 为其中一个使用 Gherkin 表语法的 .feature 文件生成的源代码,例如

Scenario: Testing something important
    Given a Foo exists with the following attributes:
        | Field | Name  |
        | Name  | Foo   |
        | Fruit | Apple |

如果有帮助,您可以将步骤定义保留在它们自己的程序集中。

关于c# - Selenium 和 SpecFlow 之间的共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603877/

相关文章:

c# - Swagger 2.0 不支持 : Multiple operations with path 'api/Client' and method 'GET'

c# - WPF 创建自定义事件

c# - .NET 中的遗传算法框架 (GAF) - 种群与适应度函数条目数之间的联系

c# - 如何在 Mac 上将源代码插入 Pages 文档中?

C++:这个模式有名字吗,可以改进吗?

java - 如何使用接口(interface)或抽象类隐藏实现类

design-patterns - 高级设计模式或不重新发明轮子

python - Selenium click() - 选择按钮但不单击

selenium - 以下场景如何使用子元素点击父元素

python - 让 Selenium 选择特定的下拉菜单 PYTHON3