C# 错误CS7036未给出与所需形式参数';驱动程序&x27;属于';SpecflowBaseTest.SpecflowBaseTest(IWebDriver)和#x27;
我正在创建一个新的框架,因为PageFactory已被弃用。我发现了错误C# 错误CS7036未给出与所需形式参数';驱动程序&x27;属于';SpecflowBaseTest.SpecflowBaseTest(IWebDriver)和#x27;,c#,selenium,selenium-webdriver,specflow,C#,Selenium,Selenium Webdriver,Specflow,我正在创建一个新的框架,因为PageFactory已被弃用。我发现了错误 Error CS7036 There is no argument given that corresponds to the required formal parameter 'driver' of 'SpecflowBaseTest.SpecflowBaseTest(IWebDriver)' UnitTestProject1 D:\Selenium Projects\Olympus\UnitTestProje
Error CS7036 There is no argument given that corresponds to the required
formal parameter 'driver' of
'SpecflowBaseTest.SpecflowBaseTest(IWebDriver)' UnitTestProject1
D:\Selenium
Projects\Olympus\UnitTestProject1\UnitTestProject1\Steps\LoginSteps.cs 14
Active
下面是我的框架的完整代码片段。我正在尝试依赖注入,因为PageFactory已被弃用,不再使用
我不知道如何解决这个错误。谢谢你的帮助。谢谢
基类
using System;
using System.Collections.Generic;
using System.Linq;
using TechTalk.SpecFlow;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using UnitTestProject1.Page;
using OpenQA.Selenium.Remote;
using BoDi;
namespace UnitTestProject1
{
[Binding]
public class SpecflowBaseTest : TechTalk.SpecFlow.Steps
{
protected IWebDriver Driver { get; }
protected LoginPage LoginPage { get; }
public SpecflowBaseTest(IWebDriver driver)
{
Driver = driver;
LoginPage = new LoginPage(driver);
}
public void NavigateToURL(string URL)
{
Driver.Navigate().GoToUrl(URL);
}
}
}
流钩子类
using System.Text;
using TechTalk.SpecFlow;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using UnitTestProject1.Page;
using OpenQA.Selenium.Remote;
using BoDi;
namespace UnitTestProject1
{
public class SpecFlowHooks
{
private readonly IObjectContainer container;
public SpecFlowHooks(IObjectContainer container)
{
this.container = container;
}
[BeforeStep]
public void CreateWebDriver()
{
// Create and configure a concrete instance of IWebDriver
IWebDriver driver = new ChromeDriver();
{
};
// Make this instance available to all other step definitions
container.RegisterInstanceAs(driver);
}
[AfterStep]
public void DestroyWebDriver()
{
IWebDriver driver = container.Resolve<IWebDriver>();
driver.Close();
driver.Dispose();
}
}
}
步骤文件
using NUnit.Framework;
using System;
using TechTalk.SpecFlow;
using UnitTestProject1.Page;
using OpenQA.Selenium;
namespace UnitTestProject1.Steps
{
[Binding, Parallelizable]
public class LoginSteps : SpecflowBaseTest
{
protected LoginPage LoginPage;
public LoginSteps(LoginPage loginpage, IWebDriver driver)
{
//Driver = driver;
this.LoginPage = loginpage;
}
[Given(@"I navigate to (.*)")]
public void GivenINavigateToHttpsCompany_Com(string URL)
{
NavigateToURL(URL);
}
[Given(@"I enter bw_(.*) and (.*)")]
public void GivenIEnterBw_Valid_UserAnd(string Username, string
Password)
{
LoginPage.Login(Username, Password);
}
[Then(@"I am logged in as bw_valid_user")]
public void ThenIAmLoggedInAsBw_Valid_User()
{
//LoginPage.
}
}
}
在
LoginSteps
类中,您编写了:
public LoginSteps(LoginPage loginpage, IWebDriver driver)
{
//Driver = driver;
this.LoginPage = loginpage;
}
构造函数没有使用单个参数调用基类(SpecflowBaseTest
)构造函数,并且基类也没有默认构造函数。因此出现了这个错误
为了解决这个问题,您需要使用base
关键字调用LoginSteps
构造函数中的基类构造函数。大概是这样的:
public LoginSteps(LoginPage loginpage, IWebDriver driver) : base(driver)
{
//Driver = driver;
this.LoginPage = loginpage;
}
public SpecflowBaseTest()
{
}
或
您需要在基类中创建默认构造函数。大概是这样的:
public LoginSteps(LoginPage loginpage, IWebDriver driver) : base(driver)
{
//Driver = driver;
this.LoginPage = loginpage;
}
public SpecflowBaseTest()
{
}
这里有三件事你真的应该做
LoginPage
属性LoginPage
属性和初始化代码移动到LoginSteps:[绑定]
公共类LoginSteps:SpecflowBaseTest
{
私有登录页面登录页面{get;}
公共登录步骤(IWebDriver):基本(驱动程序)
{
登录页面=新登录页面(驱动程序);
}
}