web-dev-qa-db-ja.com

「PageFactory」という名前は現在のコンテキストに存在しません

C#でテスト自動化フレームワークを作成しています。プロジェクトの最上部に「OpenQA.Selenium.Support.PageObjects;を使用しています」と書いてありますが、PageFactory.initElements(driver、PageName)を参照しようとすると、「The Name 'PageFactory' does not exist in現在のコンテキスト」。

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);
            }
        }
    }
    
    9
    Brad White

    私は最終的に新しいプロジェクトを作成し、すべてを移植しましたが、1つ異なる点があります。作成したプロジェクトのタイプはVisual C#>テスト>ユニットテストプロジェクトでしたが、作成したプロジェクトはVisual C#> .Net Core>クラスライブラリプロジェクトでした。 (私はチュートリアルに従っていました)。

    これが何かを変更したのか、NuGetパッケージを再度ダウンロードしてインストールしたときに明確なプロジェクトがあったのかはわかりませんが、PageFactoryクラスと関連メソッドにアクセスできるようになりました。返事をくれたみんなに感謝します。

    2
    Brad White

    他の誰かがこの質問に出くわした場合、今日PageFactoryが見つからない理由は非常に単純です:存在しない

    つまり、Selenium.Supportの3.11.0リリースでは、PageFactoryおよびExpectedConditionsは廃止されました。 Selenium.Support 3.12.0では、それらは完全に削除されました。そのトピックの詳細 ここ

    これの解決策は、パッケージが repository に移動したため、パッケージにDotNetSeleniumExtrasを追加することです。また、元のリポジトリが所有者を見つけるまで、.NET Coreサポートを追加した便利なDreamescaperの forkNuGet )を見つけることもできます。

    4
    sun_of_faith

    同じ問題があり、アンインストールして再インストールしようとしましたが、機能しませんでした。次に、名前にSeleniumが含まれるNuGetパッケージを探したところ、Selenium.SupportパッケージがメインのSelenium.Webdriverパッケージとは別であることがわかりました。したがって、この問題が発生している場合は、戻ってNugetを通じてSelenium.WebdriverとSelenium.Supportの両方のパッケージがインストールされていることを確認してください。

    1
    Mark Pilkington

    誰かが同じ問題に直面している場合は、NuGetパッケージマネージャーから以下をインストールしてください:DotNetSeleniumExtras.PageObjects.Core (3.12.0)

    1
    Seema

    同じ問題を抱えているすべての人のための小さなアップデート。

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

    "この問題についてさらに議論しても、.NET PageFactory実装の削除に関する決定は変わりません"

    0
    Roman Denisenko

    _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.WebDriverSelenium.Support.PageObjects関連パッケージをNuGet Managerを使用して再インストールします。

    注:同様の ここでの説明 を見つけることができます。


    更新

    引き続き同じエラーが表示されるため、次のようにコードに小さな変更を加えることができます。

    交換:

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

    と:

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