一段时间以来,我一直在努力解决自己的问题,因此决定寻求帮助。因此,我正在编写我的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;
}
}
}
答案 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();
}
}
}