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

问题描述 投票:0回答:1

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

  • C#Selenium webDriver
  • IObjectContainer
  • Specflow
  • Nunit 3可并行化
  • 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();
        }
}

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

谁能请一些指导?

selenium-webdriver nunit-3.0
1个回答
0
投票

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

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

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

如果您找到任何其他工作,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.