我正在使用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的其他方法还是只是(尚未)实现?

最佳答案

对于版本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目前无法访问。

关于c# - 使用网络核心的PageFactory是否有其他选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47035004/

10-16 21:33