10

我正在用 C# 创建一个测试自动化框架。在项目的顶部,我有“使用 OpenQA.Selenium.Support.PageObjects;”,但是当我尝试引用 PageFactory.initElements(driver, PageName) 我看到消息“名称‘PageFactory’不存在于当前上下文”。

我认为 PageFactory 类包含在 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.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);
            }
        }
    }
    
    4

    7 回答 7

    6

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

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

    对此的解决方案是简单地将DotNetSeleniumExtras添加到您的包中,因为这些包已移动到单独的存储库中。还可以找到有用的 Dreamescaper 的分支( NuGet ),它添加了 .NET Core 支持,直到原始存储库找到所有者。

    于 2018-07-04T14:28:14.263 回答
    6

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

    于 2019-06-25T08:57:59.713 回答
    2

    我最终只是创建了一个新项目,并移植了所有内容,但有一个区别,我创建的项目类型是 Visual C# > Test > Unit Test Project,之前我创建的项目是 Visual C# > .Net Core > Class Library 项目(我正在关注一个教程)。

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

    于 2018-02-11T19:55:44.433 回答
    2

    对所有有同样问题的人的小更新。

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

    关于这个问题的进一步讨论不会改变关于移除 .NET PageFactory 实现的决定

    于 2019-12-16T21:05:15.517 回答
    1

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

    于 2018-05-05T23:34:33.177 回答
    0

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

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

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

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

    所以这个错误本质上意味着安装包有一些问题Selenium.Support.PageObjects

    解决方案

    一个合适的解决方案是完全卸载Selenium.WebDriver和相关的Selenium.Support.PageObjects包,然后通过NuGet Manager重新安装它们。

    注意:您可以在此处找到类似的讨论


    更新

    由于您仍然看到相同的错误,您可以对代码进行一些小的更改,如下所示:

    代替 :

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

    和 :

    HomePage homePage = PageFactory.initElements(driver, HomePage);
    
    于 2018-02-11T18:06:24.080 回答
    0

    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是无效的。

    于 2020-11-23T17:31:50.187 回答