我使用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命名的文件中。 但是,我无法找到区分迭代的好方法,因此屏幕截图会被覆盖。我可以在Examples表中添加一个列,但我想要一个更通用的解决方案...
有没有办法知道正在执行哪个迭代?
答案 0 :(得分:2)
在您的步骤定义中,您可以在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 );
}
答案 1 :(得分: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>
元素;但它如何到达那里对我来说是一个谜。
在规范转换器生成的代码和报告生成器
中进行了检查答案 2 :(得分: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 |
构建上述内容的优势在于,您可以利用相同的方案执行多项操作,例如“添加”,“减去”,“乘法”,等等