C# Specflow在具有场景上下文的表中使用参数
我正在使用C#中的Specflow来使用Selenium构建自动客户端浏览器测试 这些测试的目标是模拟客户在特定页面中进入我们网站的业务场景, 然后他被引导到正确的页面 我想在场景上下文中使用参数, 例如:C# Specflow在具有场景上下文的表中使用参数,c#,.net,bdd,specflow,gherkin,C#,.net,Bdd,Specflow,Gherkin,我正在使用C#中的Specflow来使用Selenium构建自动客户端浏览器测试 这些测试的目标是模拟客户在特定页面中进入我们网站的业务场景, 然后他被引导到正确的页面 我想在场景上下文中使用参数, 例如: When I visit url | base | page | parameter1 | parameter2 | | http://www.stackoverflow.com | questions | &
When I visit url
| base | page | parameter1 | parameter2 |
| http://www.stackoverflow.com | questions | <questionNumber> | <questionName> |
Then browser contains test <questionNumber>
Examples:
| <questionNumber> | <questionName> |
| 123 | specflow-q1 |
| 456 | specflow-q2 |
| 789 | specflow-q3 |
当我访问url时
|基础|页面|参数1 |参数2|
| http://www.stackoverflow.com |问题| ||
然后浏览器包含测试
示例:
| | |
|123 | specflow-q1|
|456 | specflow-q2|
|789 | specflow-q3|
注意:步骤“当我访问url时”采用base+page+parameter1+parameter2,创建url“base/page/parameter1/parameter2”并转到此url
问题是,步骤“I访问url”中的输入表按原样传递文本,而没有修改示例部分中的等效项
这意味着上述语法生成的表中有一行包含参数名称的数据:
,问题,问题编号,问题名称
而不是使用它们的价值:
,问题,123,specflow-q1
您知道如何正确使用它吗?不可能将数据表和场景大纲混合使用。相反,我将改写您的场景,如下所示:
When I visit the URL <base>/<page>/<questionNumber>/<questionName>
Then the browser contains test <questionNumber>
Examples:
| base | page | questionNumber | questionName |
| http://www.stackoverflow.com | questions | 123 | specflow-q1 |
| http://www.stackoverflow.com | questions | 456 | specflow-q2 |
| http://www.stackoverflow.com | questions | 789 | specflow-q3 |
当我访问URL时///
然后浏览器包含测试
示例:
|基本|页面|问题编号|问题名称|
| http://www.stackoverflow.com |问题| 123 | specflow-q1|
| http://www.stackoverflow.com |问题| 456 | specflow-q2|
| http://www.stackoverflow.com |问题| 789 | specflow-q3|
在“当我访问URL”步骤定义中,您将根据传入的表参数(您当前正在执行的操作)构造URL
虽然“示例”部分中重复了“基础”和“问题”值,但可以清楚地看到测试的确切内容。非技术用户(例如业务用户)也将能够轻松理解此测试试图实现的目标。这现在是可能的(至少我正在使用SpecFlow v2.0进行此操作)
[当(@“当我访问url时”)]
访问时的公共无效(表)
{
var url=table.CreateInstance();
}
公共类UrlDTO{
公共字符串基{get;set;}
公共字符串页{get;set;}
公共字符串参数1{get;set;}
公共字符串参数2{get;set;}
}
Thank Adam的可能重复,问题确实类似,但尚未解决。我想,也许通过简化代码,问题会更清楚,希望有人会有好的建议。“不要修改示例部分中的对等词”-你这是什么意思?@Fresh-编辑问题以回答你的评论。谢谢。这听起来是一个很好的解决办法,问题是我已经用“我访问url”方法编写了很多测试,我不想再教育我的用户。你确定这是不可能的吗?@Wasafa1,我知道我是在长时间间隔后发表评论的,但是你的I-vist URL是一个通用步骤,你需要额外的步骤来创建URL,因为它有参数。此外,表格标题不能包含参数名称。我相信您可以重构或添加一个步骤来重用您已经编写的代码。
[When(@"When I visit url")]
public void WhenIVisitUrl(Table table)
{
var url = table.CreateInstance<UrlDTO>();
}
public class UrlDTO{
public string base { get;set; }
public string page { get;set; }
public string parameter1 { get;set; }
public string parameter2 { get;set; }
}