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

时间:2018-02-11 17:07:56

标签: c# selenium page-factory

我在c#中创建了一个测试自动化框架。在项目的顶部,我使用OpenQA.Selenium.Support.PageObjects;",但是当我尝试引用PageFactory.initElements(driver,PageName)时,我看到了消息" 34;名称' 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);
            }
        }
    }
    

    7 个答案:

    答案 0 :(得分:3)

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

    即,在3.11.0 Selenium.Support版本中, PageFactory ExpectedConditions 被标记为过时。 使用Selenium.Support 3.12.0,它们已被完全删除。有关该主题的更多here

    解决方案是,只需将 DotNetSeleniumExtras 添加到您的软件包中,然后将它们移动到单独的repository中即可。还可以找到有用的Dreamescaper的forkNuGet),它已添加.NET Core支持,直到原始存储库找到所有者为止。

    答案 1 :(得分:2)

    我最终创建了一个新项目,并将所有内容移植到一个区别,我创建的项目类型是Visual C#>测试>单元测试项目,在我创建的项目之前是Visual C#> .Net Core>类库项目(我正在学习教程)。

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

    答案 2 :(得分:1)

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

    答案 3 :(得分: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
    • 命名空间: OpenQA.Selenium.Support.PageObjects

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

    解决方案

    正确的解决方案是完全卸载 Selenium.WebDriver Selenium.Support.PageObjects 相关的软件包,然后重新安装它们返回 NuGet Manager

      

    注意:您可以找到类似的discussion here

    更新

    由于您仍然看到相同的错误,您可以按如下方式对代码进行少量更改:

    替换:

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

    使用:

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

    答案 4 :(得分:0)

    如果有人遇到相同的问题,请从NuGet程序包管理器进行以下安装: DotNetSeleniumExtras.PageObjects.Core (3.12.0)

    答案 5 :(得分:0)

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

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

      

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

    答案 6 :(得分: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无效。