5

我有以下测试,使用 Specflow、Selenium WebDriver 和 C#:

Scenario Outline: Verify query result
    Given I'm logged in
    When I enter "<query>"
    Then I should see the correct result

    Examples: 
    | query  |
    | Query1 |
    | Query2 |
    | Query3 |

在每个场景之后,我将屏幕截图保存到基于 ScenarioContext.Current.ScenarioInfo.Title 命名的文件中。但是,我找不到区分迭代的好方法,因此屏幕截图会被覆盖。我可以在示例表中添加一列,但我想要一个更通用的解决方案......

有没有办法知道正在执行哪个迭代?

4

3 回答 3

2

在您的 When 步骤定义中,您可以在 ScenarioContext.Current 中记录当前查询,例如

[When(@"I enter (.*)")]
public void WhenIEnter(string query)
{
 ScenarioContext.Current["query"] = query;
}

然后在您的 AfterScenario 步骤中,您可以检索此值以识别刚刚运行的示例迭代,例如

[AfterScenario]
void SaveScreenShot()
{
 var queryJustRun = ScenarioContext.Current["query"];

 // You could subsequently append queryJustRun to the screenshot filename to 
 // differentiate between the iterations
 // 
 // e.g. var screenShotFileName = String.Format("{0}_{1}.jpg",
 //                                ScenarioContext.Current.ScenarioInfo.Title,
 //                                queryJustRun ); 
}
于 2014-05-16T23:18:38.267 回答
0

据我所知,这是不可能的;举个更清楚的例子;

Scenario Outline: Add two numbers
    Given I have entered <first> into the calculator
    And I have entered <last> into the calculator
    When I press add
    Then the result should be <result> on the screen
Examples: 
| name   | first | last | result |
| simple | 1     | 1    | 2      |
| zero   | 0     | 0    | 0      |

如果您查看生成的代码,那么<name>它不会保存在任何地方,它不会出现在 ScenarioContext 或 FeatureContext

报告生成器中的 TestExecutionResults 似乎确实具有此信息, Model.TestExecutionResults[].TestItemResult.TestNode.Description 是一个复合字符串,其中包含该<name>元素;但它是如何到达那里的对我来说是个谜。

这在规范运行器生成的代码和报告生成器中进行了检查

于 2018-01-17T23:27:53.047 回答
0

除非您在场景中定义,否则该名称不会出现,我可以看到您没有。你的功能可以这样写

  Scenario Outline: Performing mathematical operation
    Given I am on <name> scenario
    And I have entered <first> into the calculator
    And I have entered <last> into the calculator
    When I do the <operation> 
    Then the result should be <result> on the screen
Examples: 
| name   | first | last | result | operation |
| simple | 1     | 1    | 2      | add       |
| subs   | 6     | 2    | 4      | substract |

构造a above 的优点是您可以利用相同的场景来执行多个操作,如“add”、“subtract”、“multiply”等

于 2018-01-23T22:57:33.643 回答