BDD specflow方法具有无效参数错误

时间:2015-12-16 20:13:00

标签: c# bdd specflow

我重新安排了我的类文件和Webdriver变量,因此我可以使用Context Injection在步骤之间共享Webdriver变量。在我使用SetupFixture,Setup和TearDown之前,这对于BDD是不正确的。现在使用BeforeAllTests,BeforeTestRun等尝试上下文注入。 我收到了错误:

The best overloaded method match for SearchTest.PageObjects.HomePage.HomePage(SearchTest.Webdriver.SeleniumContext) has some invalid arguments

该行突出显示错误的位置:

home_page = new PageObjects.HomePage(seleniumContext.driver);

我没有在这里正确传递参数,我的结构是不正确的HomePage类构造函数?

我的代码段如下:

Class class BeforeAllTests is in the Setup dir

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TechTalk.SpecFlow;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Firefox;
using SearchTest.Setup;
using BoDi;
using SearchTest.WebDriver;


namespace SearchTest.Setup
{
    [Binding]
    public class BeforeAllTests
    {
        private readonly IObjectContainer objectContainer;
        private static SeleniumContext seleniumContext;

        public BeforeAllTests(IObjectContainer container)
        {
            this.objectContainer = objectContainer;
        }

        [BeforeTestRun]
        public static void RunBeforeAllTests()
        {
            seleniumContext = new SeleniumContext();
        }

        [BeforeScenario]
        public void RunBeforeScenario()
        {
            objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext);
        }
    }
}

Class SearchSteps(功能的步骤文件)

using System;
using TechTalk.SpecFlow;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using NUnit.Framework;
using SearchTest.PageObjects;
using SearchTest.WebDriver;

namespace SearchTest
{
    [Binding]
    public SearchSteps
    {
        private SeleniumContext seleniumContext;
        PageObjects.HomePage home_page { get; set; }
        private SearchResultsPage search_results_page;

    [Given(@"I navigate to the page ""(.*)""")]
    public void GivenINavigateToThePage(string p0)
    {        
        home_page = new PageObjects.HomePage(seleniumContext.driver);
        //home_page.goToURL();
    }
    etc...
}

类HomePage.cs位于PageObjects dir

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Firefox;
using NUnit.Framework;
using SearchTest.Setup;
using SearchTest.WebDriver;
using TechTalk.SpecFlow;
using BoDi;


namespace SearchTest.PageObjects
{
    [Binding]
    public class HomePage : PageObjectBase 
    {
        private SeleniumContext seleniumContext;
        //private IWebDriver driver{ get; set; }
        [FindsBy(How = How.XPath, Using = ".//TITLE")]
        public IWebElement Title{ get; set; }

        // search text field on the homepage
        //[FindsBy(How= How.Id, Using="twotabsearchtextbox")]
        //private IWebElement Searchfield_ID { get; set; }

        [FindsBy(How = How.XPath, Using = ".//*[@id='twotabsearchtextbox']")]
        private IWebElement Searchfield_XPATH { get; set; }

        [FindsBy(How = How.Id, Using = "nav-search-submit-text")]
        private IWebElement SearchButton { get; set; }

        [FindsBy(How = How.XPath, Using = ".//*[@id='nav-search']/form/div[2]/div/input")]
        private IWebElement searchButton_Xpath {get; set;}


        public HomePage(SeleniumContext seleniumContext)
            /*This is to reference the PageObjectBase Class.  Passing in the Title of the 
             * page that is expected for the HomePage to ensure the correct Page is loaded
             * before starting any tests.
             */
            : base()
        {
            //driver = new FirefoxDriver();
            //Console.Out.WriteLine(driver.Title);
            //driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs
            //PageFactory.InitElements(driver, this);
            this.seleniumContext = seleniumContext;
            PageFactory.InitElements(seleniumContext.driver, this);

        }

    public void goToURL() {
        //driver.Navigate().GoToUrl("http://localhost:8080");
    }

    public void EnterSearchText(String text)
        {
            Searchfield_XPATH.SendKeys(text);
        }

    public SearchResultsPage click_search_button() {
        searchButton_Xpath.Click();
        return new SearchResultsPage(seleniumContext.driver);
    }
    }   
}

谢谢Riaz

0 个答案:

没有答案