有没有使用net core的PageFactory替代方案?

3
我正在使用Selenium v3.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中是否有不同的方法,或者它只是尚未实现?

4个回答

8

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

4

这段内容与 .Net Core 无关,但适用于 .Net Standard 2.0 和 .Net Framework(s) 3.5、4.0 和 4.5。您可以将 DotNetSeleniumExtras.PageObjects 添加到项目中,以便在 OpenQA.Selenium 正式发布之后获得 PageFactory 功能。您可以通过以下方式引用它:using SeleniumExtras.PageObjects;


2
在版本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目前是不可访问的。

1

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接