不同步骤定义或 类 之间的 SpecFlow 和 Selenium-Share 数据

SpecFlow and Selenium-Share data between different step definitions or classes

我刚开始使用 SpecFlow 以及 Selenium & N Unit。

我有一个基本问题,也许我知道答案,但想确认一下。

考虑一下,有两个功能 - 注册添加新交易。两个独立的特征及其各自的步骤定义。如何在这两个功能之间共享 IWebDriver 元素?

我不想再次启动新浏览器并添加交易。我想将两者作为流程执行。

我的想法是使用 SpecFlow 不允许使用此功能,因为在同一会话中尝试 运行 两个功能违反了基于功能的测试的基本使用。上下文注入辅助在这种情况下会有帮助吗?

你想做的是个坏主意。您应该为每个功能启动一个新的浏览器会话,恕我直言。

无法保证测试的执行顺序,这将由测试运行器决定,因此您可能会在 Feature1 之前获得 Feature2 运行。

其实你的场景也应该是独立的。

您可以像 this answer 中那样在步骤之间共享 webdriver 实例,但您应该使用 specflows 等其他功能,例如场景 Background 来进行设置,或者定义执行命令设置的步骤。

编辑

我们的一些测试也有类似的问题,这就是我们所做的:

第一步我们创建一个场景

Feature: thing 1 is done

Scenario: Do step 1
    Given we set things for step 1 up
    When we execute step 1
    Then some result of step one should be verified

然后我们为第 2 步做一个(假设依赖于第 1 步)

Feature: thing 2 is processed

Scenario: Do step 2
    Given we have done step 1
    And we set things for step 2 up
    When we execute step 2
    Then some result of step 2 should be verified

这第一步Given we have done step 1

是调用特征1所有步骤的步骤:

[Given("we have done step 1")]
public void GivenWeHaveDoneStep1()
{
     Given("we set things for step 1 up");
     When("we execute step 1");
     Then("some result of step one should be verified");
}

然后如果我们有第 3 步,我们会这样做:

Feature: thing 3 happens

Scenario: Do step 3
    Given we have done step 2
    And we set things for step 3 up
    When we execute step 3
    Then some result of step 3 should be verified

同样,Given we have done step 2 是一个复合步骤,它调用场景中的所有步骤进行步骤 2(因此调用步骤 1 的所有步骤)

[Given("we have done step 2")]
public void GivenWeHaveDoneStep2()
{
     Given("we have done step 1");
     Given("we set things for step 2 up");
     When("we execute step 2");
     Then("some result of step 2 should be verified");
}

我们重复这个过程,这样当我们到达第 5 步时,运行 所有步骤的顺序都是正确的。有时我们到达第 5 步 @ignore 前 4 个步骤,因为无论如何它们都会被第 5 步调用。