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

时间:2017-10-31 12:05:52

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

我使用的是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是否有不同的方法,或者它尚未实现?

5 个答案:

答案 0 :(得分: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 :(得分:1)

是的,不支持此视频[{3}}

中提及的内容

谢谢, Karthik KK

答案 2 :(得分:1)

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

Microsoft.Web.Publishing.targets

答案 3 :(得分:0)

不是特定于.Net Core,而是针对.Net Standard 2.0和.Net Framework 3.5,4.0和& 4.5一旦OpenQA.Selenium正式删除它,您应该能够将DotNetSeleniumExtras.PageObjects添加到您的项目中以获取PageFactory功能。您可以通过以下方式引用它:使用SeleniumExtras.PageObjects;

答案 4 :(得分:0)

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;