是否有使用 net core 的 PageFactory 替代方案

Mar*_*cel 2 c# selenium pageobjects selenium-webdriver .net-core

我正在使用 Selenium v​​3.6.0 和 .NET Core 2.0,以下代码在 PageFactory.InitElements 上给我一个错误,说它在当前上下文中不存在。

using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;

namespace Example
{
    public class Form
    {
        [FindsBy(How = How.Name, Using = "Filter")] // This does exist in current context using .NET Core
        public IWebElement Filter { get; set; }

        [FindsBy(How = How.TagName, Using = "Button")]
        public IWebElement Button;

        public Form(IWebDriver driver)
        {
            PageFactory.InitElements(driver, this); // This doesn't exist in current context using .NET Core
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我对此有点困惑,因为属性 FindsBy、FindsByAll 和 FindsBySequence 在OpenQa.Selenium.Support.PageObjects命名空间中都可用,但 PageFactory 不是。据我所知,这些属性仅适用于 PageFactory。

使用 .NET Core 是否有不同的方法,或者它只是(尚未)实现?

小智 7

我正在使用 WebDriver V3.141.0.0 和 .NET v4.5,您可以按如下方式替换您的代码:

using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;

namespace Example
{
    public class Form
    {
        public IWebElement Filter => Driver.FindElement(By.Name("Filter"));   
        /*
        [FindsBy(How = How.Name, Using = "Filter")] // This does exist in current context using .NET Core
        public IWebElement Filter { get; set; }
        */

        public IWebElement Button => Driver.FindElement(By.TagName("Button"));   
        /*
        [FindsBy(How = How.TagName, Using = "Button")]
        public IWebElement Button;
        */
        public Form(IWebDriver driver)
        {
            //PageFactory.InitElements(driver, this); // This doesn't exist in current context using .NET Core
        }
    }
}
Run Code Online (Sandbox Code Playgroud)