我有一个测试项目,其中包含我要测试的所有 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/