C# Can';t调用给定的,当或然后从SpecFlow步骤定义内部调用

C# Can';t调用给定的,当或然后从SpecFlow步骤定义内部调用,c#,specflow,C#,Specflow,我有一个步骤定义,我希望在其中调用另一个步骤,但它不会编译: [Given(@"I am on the (.*) page")] public void GivenIAmOnThePage(string url) { Given(@"I click the login button"); // cannot find this Given() SpecFlow library method } 当我得到: The name 'Given' doe

我有一个步骤定义,我希望在其中调用另一个步骤,但它不会编译:

    [Given(@"I am on the (.*) page")]
    public void GivenIAmOnThePage(string url)
    {
        Given(@"I click the login button"); // cannot find this Given() SpecFlow library method
    }
当我得到:

The name 'Given' does not exist in the current context
我有这个using语句,VS不建议任何其他人完成代码:

using TechTalk.SpecFlow;

我丢失了
TechTalk.SpecFlow.Steps
类的继承

public class PageNavigation : Steps
{
    ...
}

我丢失了
TechTalk.SpecFlow.Steps
类的继承

public class PageNavigation : Steps
{
    ...
}

如果存在这样一个
gived
,它可能会被称为
GivenIClickTheLoginButton
。如果没有,那么,好吧,你还没有创建它。如果你想知道什么是
给定的
,那将是动态的,这是另一回事,但这种依赖性将非常脆弱。顺便说一句,从“我在页面上”中调用“我单击登录按钮”似乎特别奇怪和不合适。这是您在规范中编写的内容,而不是作为方法调用的一部分。调用该方法时,您所说的是“如果我在页面上,那么一定是我单击了登录按钮”,这是您希望在规范中明确说明的内容。否则,可能更适合将常见的实现代码分解为单独的方法,并从给定的
调用它,问题不在于我试图调用的step方法,而在于“gived()”SpecFlow方法。。。允许从其他步骤中调用步骤的方法。没有这样的方法。您将其与
GivenAttribute
混淆,后者只是告诉SpecFlow如何将场景文本映射到方法。这些方法本身都有特定的名称。好吧,找到它了……如果存在这样一个
gived
,它可能会被称为
GivenIClickTheLoginButton
。如果没有,那么,好吧,你还没有创建它。如果你想知道什么是
给定的
,那将是动态的,这是另一回事,但这种依赖性将非常脆弱。顺便说一句,从“我在页面上”中调用“我单击登录按钮”似乎特别奇怪和不合适。这是您在规范中编写的内容,而不是作为方法调用的一部分。调用该方法时,您所说的是“如果我在页面上,那么一定是我单击了登录按钮”,这是您希望在规范中明确说明的内容。否则,可能更适合将常见的实现代码分解为单独的方法,并从给定的
调用它,问题不在于我试图调用的step方法,而在于“gived()”SpecFlow方法。。。允许从其他步骤中调用步骤的方法。没有这样的方法。您将其与
GivenAttribute
混淆,后者只是告诉SpecFlow如何将场景文本映射到方法。这些方法本身都有特定的名称。。。