在Specflow中创建页面对象实例

时间:2018-07-09 17:30:25

标签: c# selenium bdd specflow

一段时间以来,我一直在努力解决自己的问题,因此决定寻求帮助。因此,我正在编写我的GitHub存储库,以便可以将其放入我的CV中。问题是我决定将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;

        }
}
}

2 个答案:

答案 0 :(得分:0)

我通常将PageObjects用作Steps类的属性,然后在Steps类的构造方法中对其进行初始化。之后,我可以使用这些对象做任何事情。

答案 1 :(得分:0)

我将按以下方式实例化页面:

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();
    }
}
}