C# 在Specflow中创建页面对象实例

C# 在Specflow中创建页面对象实例,c#,selenium,bdd,specflow,C#,Selenium,Bdd,Specflow,我已经为我的问题挣扎了一段时间,我决定寻求帮助。所以我正在写我的GitHub存储库,这样我就可以把它放在我的简历中。问题是我决定将BDD与Selenium一起使用,但我不知道如何在步骤定义期间停止重复自己。当我在面向对象的页面模型中创建代码时,我不断重复自己在每个步骤中创建对象的实例。我发现我可以使用ScenarioContext.Current之类的东西,但老实说,我一定是用错了,因为它看起来不像我想要的那么好。我希望得到一些关于如何使我的代码更好的建议。以下是一个示例: using Tech

我已经为我的问题挣扎了一段时间,我决定寻求帮助。所以我正在写我的GitHub存储库,这样我就可以把它放在我的简历中。问题是我决定将BDD与Selenium一起使用,但我不知道如何在步骤定义期间停止重复自己。当我在面向对象的页面模型中创建代码时,我不断重复自己在每个步骤中创建对象的实例。我发现我可以使用ScenarioContext.Current之类的东西,但老实说,我一定是用错了,因为它看起来不像我想要的那么好。我希望得到一些关于如何使我的代码更好的建议。以下是一个示例:

using TechTalk.SpecFlow;

namespace SampleAutomationTests.StepDefinitions
{
    [Binding]
    public sealed class AuthenticationFeatureSteps
    {
        [Given(@"I opened the home page")]
        public void GivenIOpenedTheHomePage()
        {
            HomePage page = new HomePage(Hooks.Driver);
            ScenarioContext.Current["Home Page"] = page;
            page.GoTo();
        }

        [Given(@"I navigated to Basic Auth link")]
        public void GivenINavigatedToBasicAuthLink()
        {
            HomePage page = (HomePage)ScenarioContext.Current["Home Page"];
            AuthenticationPage authenticationPage = page.GoToAuthenticationPage();
            ScenarioContext.Current["authenticationPage"] = authenticationPage;

        }
}
}

我通常将PageObject作为Steps类的属性,然后在Steps类构造函数中初始化它们。之后,我可以对这些对象执行任何操作。

我将按如下方式实例化这些页面:

using TechTalk.SpecFlow;

namespace SampleAutomationTests.StepDefinitions
{
[Binding]
public sealed class AuthenticationFeatureSteps
{

    HomePage page = new HomePage(Hooks.Driver);
    AuthenticationPage authpage = new AuthernticationPage(Hooks.Driver);

    [Given(@"I opened the home page")]
    public void GivenIOpenedTheHomePage()
    {
        page.GoTo();
    }

    [Given(@"I navigated to Basic Auth link")]
    public void GivenINavigatedToBasicAuthLink()
    {
        page.GoToAuthenticationPage();
    }
}
}

我们这里有一个更大的例子来说明如何使用SpecFlow和Selenium:它可能有点过时,但我认为这只是一个开始。