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

10

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

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

NuGet软件包:

  • 使用Selenium.WebDriver版本3.9.1
  • 使用Selenium.Support版本3.9.1
  • 使用NUnit 3.9.0
  • 使用NUnit3TestAdapter 3.9.0
  • Microsoft.NET.Test.Sdk 15.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);
            }
        }
    }
    
    8个回答

    7
    如果其他人也遇到了这个问题,你找不到PageFactory的原因非常简单:它已经不存在了
    换言之,在Selenium.Support 3.11.0版本中,PageFactoryExpectedConditions被标记为过时。在Selenium.Support 3.12.0版本中,它们被完全删除了。更多相关信息可以参考这里
    解决方法很简单,只需将DotNetSeleniumExtras添加到您的包中,因为它们已被移至独立的存储库。您还可以在Dreamescaper的分支NuGet)中找到有用的.NET Core支持,直到原始存储库找到所有者为止。

    6

    如果有人遇到相同的问题,请从NuGet软件包管理器中安装以下内容:

    DotNetSeleniumExtras.PageObjects.Core (3.12.0)

    在添加了 DotNetSeleniumExtras.PageObjects.Core 之后,您可以通过导入 using SeleniumExtras.PageObjects; 来使用 PageFactory.InitElement(driver, this) - Suban Dhyako

    2
    我最终创建了一个新的项目,将所有内容移植过去,唯一的不同之处就是我创建的项目类型是Visual C# > Test > Unit Test Project。在此之前,我创建的项目类型是Visual C# > .Net Core > Class Library项目(我当时正在跟随教程)。
    我不太确定这是否有所改变,或者只是意味着当我重新下载并安装NuGet包时,我有一个清晰的项目。无论如何,现在我可以访问PageFactory类和相关方法了。感谢所有回复我的人。

    2

    1

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


    1

    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` 是一个空方法。

    0
    1. 从NuGet包安装: DotNetSeleniumExtras.PageObjects.Core

    2. 您可以使用PageFactory.InitElements(driver, this);


    0

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

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

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

    • System.Object : OpenQA.Selenium.Support.PageObjects.PageFactory
    • Namespace : OpenQA.Selenium.Support.PageObjects

    因此,错误基本上意味着安装Selenium.Support.PageObjects包时存在一些问题。

    解决方案

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

    注意:您可以在这里找到类似的讨论


    更新

    由于您仍然看到相同的错误,您可以按照以下方式对代码进行小修改:

    替换为:

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

    使用:

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

    我已经按建议卸载了Selenium.Webdriver和Selenium.Support,然后重新添加它们,但是没有成功。 - Brad White
    你能否更新问题,包括_Selenium_,_WebDriver_和其他_binary_版本信息? - undetected Selenium
    更新了问题,附带安装的NuGet包和版本。 - Brad White
    我已经尝试了更新的HomePage homePage = PageFactory.initElements(driver, HomePage);解决方案,但仍然出现相同的错误。 - Brad White

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