【问题标题】:Is there any alternative for PageFactory using net core使用网络核心的 PageFactory 是否有任何替代方案
【发布时间】:2017-10-31 12:05:51
【问题描述】:

我正在使用 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
        }
    }
}

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

是否有使用 .NET Core 的不同方法来解决此问题,还是只是(尚未)实现?

【问题讨论】:

    标签: c# selenium selenium-webdriver .net-core pageobjects


    【解决方案1】:

    我正在使用 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
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      不特定于 .Net Core,但对于 .Net Standard 2.0 和 .Net Framework(s) 3.5、4.0 和 4.5,您应该能够将 DotNetSeleniumExtras.PageObjects 添加到您的项目中,以便在 OpenQA.Selenium 正式发布后获得 PageFactory 功能它。您可以通过以下方式引用它:使用 SeleniumExtras.PageObjects;

      【讨论】:

        【解决方案3】:

        3.6.0 版本的 WebDriver.Support.dll 中没有 PageFactory 类(在 Visual Studio 中,您可以在对象资源管理器中打开此 dll 并查看没有此类)。所以你遇到了通常的编译错误。

        我查看了 github 上的源代码 https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/support/PageObjects/PageFactory.cs 并查看 PageFactory 类中的预处理器指令 #if !NETSTANDARD2_0 ... #endif。我不知道为什么 NETSTANDARD2_0 会影响 NETCORE2_0,也不确定这是不是真正的原因,但对于我们作为库用户而言,PageFactory 目前无法访问。

        【讨论】:

          【解决方案4】:

          是的,如视频中提到的那样不支持 https://www.youtube.com/watch?v=xd5TCWmaxGI

          谢谢, 卡提克 KK

          【讨论】:

            【解决方案5】:

            DotNetSeleniumExtras.PageObjects.Core 支持 .NETStandard 2.0。

            该库包含PageFactory 和支持类。这是DotNetSeleniumExtras 的一个分支。

            在 netcore3.1 和 Net5 中测试,包支持PageFactory.InitElements(driver, this);

            使用方法:

            Install-Package DotNetSeleniumExtras.PageObjects.Core -Version 3.12.0
            
            using OpenQA.Selenium;
            using SeleniumExtras.PageObjects;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-03-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-12
              • 2011-06-07
              • 2012-05-03
              相关资源
              最近更新 更多