C#でテスト自動化フレームワークを作成しています。プロジェクトの最上部に「OpenQA.Selenium.Support.PageObjects;を使用しています」と書いてありますが、PageFactory.initElements(driver、PageName)を参照しようとすると、「The Name 'PageFactory' does not exist in現在のコンテキスト」。
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);
}
}
}
私は最終的に新しいプロジェクトを作成し、すべてを移植しましたが、1つ異なる点があります。作成したプロジェクトのタイプはVisual C#>テスト>ユニットテストプロジェクトでしたが、作成したプロジェクトはVisual C#> .Net Core>クラスライブラリプロジェクトでした。 (私はチュートリアルに従っていました)。
これが何かを変更したのか、NuGetパッケージを再度ダウンロードしてインストールしたときに明確なプロジェクトがあったのかはわかりませんが、PageFactoryクラスと関連メソッドにアクセスできるようになりました。返事をくれたみんなに感謝します。
他の誰かがこの質問に出くわした場合、今日PageFactoryが見つからない理由は非常に単純です:存在しない。
つまり、Selenium.Supportの3.11.0リリースでは、PageFactoryおよびExpectedConditionsは廃止されました。 Selenium.Support 3.12.0では、それらは完全に削除されました。そのトピックの詳細 ここ 。
これの解決策は、パッケージが repository に移動したため、パッケージにDotNetSeleniumExtrasを追加することです。また、元のリポジトリが所有者を見つけるまで、.NET Coreサポートを追加した便利なDreamescaperの fork ( NuGet )を見つけることもできます。
同じ問題があり、アンインストールして再インストールしようとしましたが、機能しませんでした。次に、名前にSeleniumが含まれるNuGetパッケージを探したところ、Selenium.SupportパッケージがメインのSelenium.Webdriverパッケージとは別であることがわかりました。したがって、この問題が発生している場合は、戻ってNugetを通じてSelenium.WebdriverとSelenium.Supportの両方のパッケージがインストールされていることを確認してください。
誰かが同じ問題に直面している場合は、NuGetパッケージマネージャーから以下をインストールしてください:DotNetSeleniumExtras.PageObjects.Core (3.12.0)
同じ問題を抱えているすべての人のための小さなアップデート。
: https://github.com/SeleniumHQ/Selenium/issues/4387
"この問題についてさらに議論しても、.NET PageFactory実装の削除に関する決定は変わりません"
_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を使用して再インストールします。
注:同様の ここでの説明 を見つけることができます。
引き続き同じエラーが表示されるため、次のようにコードに小さな変更を加えることができます。
交換:
HomePage homePage = new HomePage(driver);
PageFactory.initElements(driver, homePage);
と:
HomePage homePage = PageFactory.initElements(driver, HomePage);