我在c#中创建了一个测试自动化框架。在项目的顶部,我使用OpenQA.Selenium.Support.PageObjects;",但是当我尝试引用PageFactory.initElements(driver,PageName)时,我看到了消息" 34;名称' PageFactory'在当前上下文中不存在"。
我认为PageFactory类是作为Selenium.Support nu get包的一部分包含的。在线教程似乎以同样的方式引用PageFactory,没有额外的导入,我有什么遗漏吗?
NuGet套餐:
以下代码:
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);
}
}
}
答案 0 :(得分:3)
万一其他人遇到这个问题,那么为什么现在找不到PageFactory的原因很简单:不存在。
即,在3.11.0 Selenium.Support版本中, PageFactory 和 ExpectedConditions 被标记为过时。 使用Selenium.Support 3.12.0,它们已被完全删除。有关该主题的更多here。
解决方案是,只需将 DotNetSeleniumExtras 添加到您的软件包中,然后将它们移动到单独的repository中即可。还可以找到有用的Dreamescaper的fork(NuGet),它已添加.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文档,则会明确提及以下内容:
因此,错误实质上意味着安装 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
无效。