Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误CS7036未给出与所需形式参数';驱动程序&x27;属于';SpecflowBaseTest.SpecflowBaseTest(IWebDriver)和#x27;_C#_Selenium_Selenium Webdriver_Specflow - Fatal编程技术网

C# 错误CS7036未给出与所需形式参数';驱动程序&x27;属于';SpecflowBaseTest.SpecflowBaseTest(IWebDriver)和#x27;

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

我正在创建一个新的框架,因为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\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()
{
}

这里有三件事你真的应该做

  • 从SpecflowBaseTest中删除
    LoginPage
    属性
  • 从LoginSteps调用基类构造函数
  • LoginPage
    属性和初始化代码移动到LoginSteps:
  • [绑定]
    公共类LoginSteps:SpecflowBaseTest
    {
    私有登录页面登录页面{get;}
    公共登录步骤(IWebDriver):基本(驱动程序)
    {
    登录页面=新登录页面(驱动程序);
    }
    }