Specflow-功能之间的共享步骤问题
本文关键字:问题 共享 功能 之间 Specflow- | 更新日期: 2023-09-27 18:21:55
我正在对此进行测试,以便我有登录、重置密码、忘记密码等方面的功能文件。假设我有下面的例子。我有一个在CreateAccount.feature中创建全新用户的自动化步骤。该步骤在该feature/step类中多次使用,没有问题。但现在我想让用户更改密码,所以我创建了一个新的功能文件MyAccount.Feature。当我在中复制Given语句时,它会立即被找到。然后我添加代码以单击重置密码,然后继续执行其余步骤。
当我运行ResetPassword测试时,自动化会创建新用户,但当它进入第2步"当我单击重置密码时"时,它会失败,因为它找不到元素。由于绑定是全球性的,这让我感到奇怪。所以我所做的是采取步骤"假设我已经创建了我的帐户",并将其重命名,添加到另一个功能文件/步骤类中,然后再次运行它。它运行良好。
我不知道为什么我不能在台阶之间分享。有什么想法吗?
一些更新显示了更多代码。。。
CreateAccount.feature
scenario: Feature Create Account
Given I have created my account
-----------
CreateAccountsteps.cs
namespace Project
{
[Binding]
public class CreateAccount: BaseTestObject
{
[Given]
public void Given_I_have_created_my_account()
{
ConfigProperties.Environment = "Test";
TestDriver.goToUrl(ConfigProperties.StartUrl);
TestDriver.goToUrl(ConfigProperties.StartUrl + "Create/Account");
[followed by input for creating a user acct]
-------------------------------------------------
MyAccount.feature
scenario: Feature Change Password
Given I have created my account
When I Click Reset Password
...........
MyAccountSteps.cs
namespace Project
{
[Binding]
public class MyAccountSteps: BaseTestObject
{
[When]
public void When_I_click_Reset_Password()
{
On.MyHeaderPage.BtnResetPassword.Click();
}
[followed by rest of steps to change password]
BaseTestObject.cs
namespace Project
{
public class BaseTestObject
{
private IWebDriver seleniumDriver;
private IDriver testDriver;
[TestInitialize]
public virtual void Setup()
{
TestDriver.goToUrl(ConfigProperties.StartUrl);
}
[AfterScenario]
public void CleanUp()
{
if (seleniumDriver != null)
{
SeleniumDriver.Dispose();
seleniumDriver = null;
}
}
public IWebDriver SeleniumDriver
{
get
{
if (seleniumDriver == null)
{
seleniumDriver = GetDriver();
}
return seleniumDriver;
}
}
public IDriver TestDriver
{
get
{
if (testDriver == null)
{
testDriver = new UiDriver(SeleniumDriver);
}
return testDriver;
}
}
public CurrentPageObjectScope On
{
get
{
return new CurrentPageObjectScope(TestDriver);
}
}
public static String GetTimestamp()
{
return DateTime.Now.ToString("yyyyMMddhhmmssfff");
}
public static String GetTimestamp2()
{
return DateTime.Now.ToString("M/d/yyyy");
}
private IWebDriver GetDriver()
{
switch (ConfigProperties.Browser.ToLower())
{
case "firefox":
return new FirefoxDriver();
case "chrome":
ChromeOptions options = new ChromeOptions();
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"../Chrome/");
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
options.AddArguments("test-type");
options.AddArgument("--start-maximized");
return new ChromeDriver(service, options);
case "ie":
case "internetexplorer":
return new InternetExplorerDriver(@"../IE/");
default:
throw new NotImplementedException("Unknown browser string in Config properties " + ConfigProperties.Browser);
}
}
根据您的更新,您似乎错误地命名了when步骤。您的功能显示:
scenario: Feature Change Password
Given I have created my account
When I Click Reset Password
但你的步骤名为When_I_click_My_Account
这在我看来是错误的。
实际上,我们需要更多的细节(比如实际的异常消息),也许还需要一些BaseTestObject
的指示。
Resolved-在BaseTestObject中,我将方法更改为static。