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