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

    }

Specflow-功能之间的共享步骤问题

根据您的更新,您似乎错误地命名了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。