ページオブジェクトモデルでは、すべてのクラスが単一のドライバーインスタンスを共有する必要がありますか?

Dec 19 2020

BaseTest.javaファイルを作成し、パブリック静的WebDriverドライバーを宣言できます。初期化。その後、すべてのクラスが同じドライバー参照を拡張して使用できます。

そうすれば、すべてのテストクラスで同じインスタンスを使用できます。

使ってもいいですか:

driver = new ChromeDriver(); 

すべてのテスト方法またはキュウリのシナリオで。ドライバーの使い方がわかりません。ドライバーはクロームウィンドウセッションですか?

回答

2 JoãoFarias Dec 19 2020 at 16:31

ドライバーはクロームウィンドウセッションですか?

いいえ。ChromeDriverは、ローカルで実行されているChromeブラウザを制御するサーバーを表します。サーバーは、アクションの開始、強制終了、制御など、ブラウザーのライフサイクルを制御します。

詳細については、ドキュメントを参照してください

ドライバーを作成できますか= new ChromeDriver(); すべてのテスト方法またはキュウリのシナリオで

はい、しかしそれはあなたの文脈に依存します。一部のアクションで複数のブラウザーを独立して実行したい場合は、新しいドライバーを作成できます。

ボーナス:

BaseTest.javaファイルを作成し、パブリック静的WebDriverドライバーを宣言できます。初期化。その後、すべてのクラスが同じドライバー参照を拡張して使用できます。

これは危険かもしれません。継承は、作成できる結合の最も強力な形式であり、グローバル変数を持つと、動作の変化を理解するのが非常に困難になる可能性があります。Driverインスタンスがページオブジェクトに挿入されるように、コードをリファクタリングすることをお勧めします。このように、ページオブジェクトをグローバル変数に結合するのではなく、ドライバーにテストダブルを挿入することで、それらの単体テストを簡単に作成できます。

2 PDHide Dec 19 2020 at 19:39

chromedriverとは:

chromedriverには、ブラウザと対話できるコードがあります。このコマンドはAPIを介して公開されます(これは、ローカルホストで開始されたchromedriverとして表示されるものです:14563)。コードからこのAPIエンドポイントにアクセスして、Chromeドライバーに何かを実行するように指示します。

たとえば、elem.click()と言うと、seleniumはAPIと通信し、ブラウザで指定されたelemをクリックするようにchromedriverに指示します。そして、クロムドライバーはそれを行い、ブラウザーからの応答を返し、それをコードに返します

基本クラスが必要な理由

これは、ドライバーセッションが異なるクラス間で確実に渡されるようにするためです。そうでなければ、あなたは次のようなことをすることができなくなります

   page1.sendpassword()
   page1.sendusername()
   page1.submit()
   page2.adduser()

page1とpage2で異なるドライバセッションがある場合、

次に、page2.adduser()を開始すると、Chromeドライバーが新たに開始され、以前のログインセッションが利用できなくなるため、再度ログインする必要があります。

また、レポート用のリスナークラスにスクリーンショットやドライバー固有のアクションを追加することはできません

基本クラスの詳細については、次を参照してください。

POMフレームワークでグローバル静的WebDriverオブジェクトを宣言するBaseTestクラスを作成する目的は何ですか?

AlexeyR. Dec 19 2020 at 16:33

コード内のWebDriverインスタンスは、Webドライバー実装の単一セッションと対話するために使用する一種のチャネルです。基本的に、コードで使用するのは、いわゆるクライアントバインディングです。

WebDriverは、一方の側でクライアントバインディング(Javaライブラリなど)に向けてREST APIを公開し、もう一方の側でブラウザーを制御できるHTTPサーバーです。

したがって、同じchromeセッションで動作すると想定されるすべてのコード(Cookieの保持など)は、Webドライバーの同じインスタンスを共有する必要があります。

コード内でもう1人のダイバーをインスタンス化することを妨げるものは何もありません。その新しいインスタンスを介して、別の並列分離ブラウザセッションの制御を取得します。