C#+ WebDriver PageFactory + Nunit 3可并行化

时间:2016-11-18 11:43:12

标签: selenium-webdriver nunit-3.0

我在自动化框架中实现了以下设置:

  • C#Selenium webDriver

  • IObjectContainer

  • Specflow

  • Nunit 3 Parallelizable

  • Xpath(和所有选择器)简单地定义为'私有const字符串'

代码示例HomePageSteps(工作代码):

[Binding]
    public class HomePageSteps
    {
        private IWebDriver _driver;

        public HomePageSteps(IWebDriver driver)
        {
            _driver = driver;
        }


        private const string LogoTwo = "//img[@alt='xpath']";

        [Given(@"I navigation to site")]
        public void GivenINavigationToSite()
        {
            _driver.Navigate().GoToUrl("http://website.com/");

            _driver.FindElement(By.XPath(LogoTwo)).Click();
        }
}

但我想使用webDriver PageFactory属性来处理我的页面对象。我在其他没有使用Nunit 3 Parallelizable'。

的项目中完成/使用过的。

代码示例(不工作代码):

    [Binding]
    public class HomePageSteps
    {
        private IWebDriver _driver;

        public HomePageSteps(IWebDriver driver)
        {
            _driver = driver;
        }


        [FindsBy(How = How.XPath, Using = "//img[@alt='xpath']")]
        public IWebElement logo { get; set; }


        [Given(@"I navigation to site")]
        public void GivenINavigationToSite()
        {
            _driver.Navigate().GoToUrl("http://website.com/");

            logo.Click();
        }
}

这里的问题是' logo'一片空白。而且我不确定这个问题是否与使用限制有关' Nunit 3 Parallelizable'使用PageFactory,或使用specflow,或我设计中的其他内容。

有人可以给一些指导吗?

1 个答案:

答案 0 :(得分:0)

Page Factory不会初始化非静态驱动程序的原因是它接收静态驱动程序。如果页面的构造函数定义如下:

ChromeDriverService service = ChromeDriverService.CreateDefaultService(startDirectory + @"\Drivers\", "chromedriver.exe");
    IWebDriver Static driver = new ChromeDriver(Service);
            public HomePageSteps()
            {
                PageFactory.InitElements(driver, this);
            }

它允许您使用已定义的元素。

如果您在此处找到任何其他工作,请与我们联系。