包含不同网址的{Specflow Scenario Outline}

时间:2015-08-28 14:21:26

标签: selenium selenium-webdriver automation specflow

是否可以制作场景大纲,其中每个示例都在不同的URL中运行?例如,如果示例表中的第一列是某种两位数/字符代码,请根据该值打开不同的起始URL?

2 个答案:

答案 0 :(得分:2)

是的,确定。为什么不设置一个设置URL的步骤,将URL用于某个变量(在类中,在ScenarioContext.Current中,或在自定义上下文对象中),然后在所有调用中使用此URL 。在我的手机上,所以格式化很痛苦,但是这样的事情:

    Given I'm using the site '<site>'
    When I login
    Then something should happen
Examples:
    |site          |
    | aaa.com|
    | bbb.com|

然后在给定的步骤中,只记录URL并使用该基本URL在when步骤中构建完整的URL。

您的步骤类看起来像这样。

[Binding]
Public class Steps
{
     Private string baseUrl;
     [Given ("I'm using the site '(.*)'")]
     Public void GivenImUsingTheSite(string baseUrl)
     {
           This.baseUrl=baseUrl;
     }

     [When ("I log in")
     Public void WhenILogIn()
     {
           String URL=baseUrl + "\login";
           ....login
     }
}

答案 1 :(得分:0)

鉴于以下情景大纲:

Scenario Outline: Each page has an help option
    Given I am on the '<PageName>' page that has id '<Id>'
    Then I expect an help option

Examples: 
    | PageName | Id |
    | Home     | 0  |
    | Products | 5  |
    | FAQ      | 42 | 

然后你可以这样做:

[Given(@"I am on the '(.*)' page that has id '(.*)'")]
public void GivenIAmOnThePageThatHasId(string friendlyName, string id)
{
    // pageids are shaped like 'http://www.example.com/pageid?4'
    var myUrl = @"http://www.example.com/pageid?" + id;

    Console.WriteLine("Navigating to the {0} page following url {1}", friendlyName, myUrl);
    NavigateToUrl(myUrl);
}