当前上下文中不存在名称 'PageFactory'

The name 'PageFactory' does not exist in the current context

我正在用 C# 创建一个测试自动化框架。在项目的顶部,我有 "using OpenQA.Selenium.Support.PageObjects;",但是当我尝试引用 PageFactory.initElements(driver, PageName) 时,我看到消息 "The name 'PageFactory' does not exist in the current context".

我认为 PageFactory class 包含在 Selenium.Support nu get 包中。在线教程似乎以与我没有额外导入的方式相同的方式引用 PageFactory,有什么我遗漏的吗?

NuGet 包:

  • 使用 Selenium.WebDriver 版本 3.9.1
  • 使用 Selenium.Support 版本 3.9.1
  • 使用 NUnit 3.9.0
  • 使用 NUnit3TestAdapter 3.9.0
  • Microsoft.NET.Test.Sdk15.5.0
  • 代码如下:

    using NUnit.Framework;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using OpenQA.Selenium.Support.PageObjects;
    using System;
    using System.IO;
    
    namespace Framework.TestCases
    {
        class TestCase
        {
            [Test]
            public void Test()
            {
                String pathToDrivers = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\Drivers";
                IWebDriver driver = new ChromeDriver(pathToDrivers);
                String searchTerm = "Search Term";
    
                driver.Url = "https://website.com/";
                driver.Manage().Window.Maximize();
    
                HomePage homePage = new HomePage(driver);
                PageFactory.initElements(driver, homePage);
            }
        }
    }
    

    正如您提到的,当您_try 引用 PageFactory.initElements(driver, PageName) 时,您会看到如下错误消息:

    The name 'PageFactory' does not exist in the current context". 
    

    如果您查看 PageFactory Class 的 API 文档,它清楚地提到了以下内容:

    • System.Object : OpenQA.Selenium.Support.PageObjects.PageFactory
    • 命名空间:OpenQA.Selenium.Support.PageObjects

    所以这个错误本质上意味着 Selenium.Support.PageObjects 软件包的安装存在一些问题。

    解决方案

    正确的解决方案是完全卸载 Selenium.WebDriverSelenium.Support.PageObjects 相关包,然后通过 NuGet 管理器 重新安装它们。

    Note : You can find a similar .


    更新

    由于您仍然看到相同的错误,您能否对代码进行如下小的更改:

    替换:

    HomePage homePage = new HomePage(driver);
    PageFactory.initElements(driver, homePage);
    

    有:

    HomePage homePage = PageFactory.initElements(driver, HomePage);
    

    我最终只是创建了一个新项目,并将所有内容移植过来,但有一点不同,我创建的项目类型是 Visual C# > 测试 > 单元测试项目,之前我创建的项目是 Visual C# > .Net核心 > Class 库项目(我正在学习教程)。

    我不太确定这是否改变了任何东西,或者只是意味着当我重新下载并安装 NuGet 包时我有一个清晰的项目,但是我现在可以访问 PageFactory class 和相关方法.感谢所有回复的人。

    遇到同样的问题,尝试卸载并重新安装,但没有用。然后我去寻找名称中带有 Selenium 的 NuGet 包,发现 Selenium.Support 包与主 Selenium.Webdriver 包分开。因此,如果您遇到此问题,请返回并确保您已通过 Nuget 安装了 Selenium.Webdriver 和 Selenium.Support 包。

    万一其他人遇到这个问题,你现在找不到 PageFactory 的原因很简单:它不存在

    也就是说,在 Selenium.Support 的 3.11.0 版本中,PageFactoryExpectedConditions 被标记为已过时。 在 Selenium.Support 3.12.0 中,它们已被完全删除。有关该主题的更多信息 here

    解决这个问题的方法是简单地将 DotNetSeleniumExtras 添加到您的包中,因为这些包被移动到单独的 repository. One can also find useful Dreamescaper's fork (NuGet) 中,添加了 .NET Core 支持,直到原始 repo 找到一个所有者。

    如果有人遇到同样的问题,请从 NuGet 包管理器安装以下内容: DotNetSeleniumExtras.PageObjects.Core (3.12.0)

    针对所有遇到相同问题的人的小更新。

    : https://github.com/SeleniumHQ/selenium/issues/4387

    " Further discussion on this issue will not change the decision on the removal of the .NET PageFactory implementation "

    PageFactory 仍然可用

    参考包

    <PackageReference Include="DotNetSeleniumExtras.PageObjects" Version="3.11.0" />
    <PackageReference Include="DotNetSeleniumExtras.PageObjects.Core" Version="3.12.0" />
    

    然后

    using SeleniumExtras.PageObjects;
    
     HomePage loginPage = new HomePage(driver);
     PageFactory.InitElements(driver, HomePage)
    

    PageFactory.InitElements无效。