Specflow,Selenium - 在不同的步骤定义或类之间共享数据

时间:2015-06-11 08:37:56

标签: selenium-webdriver specflow

我刚开始使用Spec flow和Selenium& N单位。我有一个基本问题,也许我知道它的答案,但希望得到确认。考虑一下,有2个功能 - 注册,添加新事务。 2个独立的功能及其各自的步骤定义。如何跨两个功能共享IWebDriver元素。我不想再次推出新浏览器了。添加交易。想要作为流程执行。 我的想法是使用Spec流程不允许使用此功能,因为尝试在同一会话中运行2个功能时违反了基于功能的测试的基本用法。在这种情况下,Context Injection Assist会有帮助吗?

1 个答案:

答案 0 :(得分:3)

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

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

事实上,您的场景也应该是独立的。

您可以在this answer之间共享步骤之间的webdriver实例,但是您应该使用specflows其他功能(如方案Background)进行设置,或者定义执行comman设置的步骤。

修改

我们的一些测试存在类似的问题,这就是我们的工作:

我们为第一步创建了一个场景

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步的scenarion中的所有步骤(以及步骤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步时,它会以正确的顺序运行所有步骤。有时候我们会在前面的4个步骤@ignore进入第5步,因为无论如何它们都会被第5步调用。