これらの違いは何ですか
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
どれをいつ使うべきですか。
これは私が人々が使うべきでないときにClose()を使うのを見た良い質問です。 Selenium ClientとWebDriverのC#バインディングのソースコードを調べたところ、次のことがわかりました。
webDriver.Close()
- ドライバがフォーカスしているブラウザウィンドウを閉じるwebDriver.Quit()
- Dispose()を呼び出しますwebDriver.Dispose()
すべてのブラウザウィンドウを閉じて、セッションを安全に終了します以下のコードはドライバオブジェクトを破棄し、セッションを終了し、テストが失敗したか合格したかにかかわらずテスト中に開かれたすべてのブラウザを閉じます。
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
まとめると、Quit()またはDispose()がプログラムを終了する前に呼び出されることを確認し、自分が何をしているのか確実でない限り、Close()メソッドを使用しないでください。
注意
私のVMがハードドライブの空き容量を使い果たしていた理由の関連問題を見つけようとすると、この質問に気付きました。例外として、実行ごとにQuit()またはDispose()が呼び出されず、appDataフォルダがハードドライブをいっぱいになる原因となっていました。そのため、Quit()メソッドを正しく使用していましたが、コードに到達できませんでした。要約すると、例外セーフパターンを使用するかIDisposableを実装することで、すべてのコードパスがアンマネージオブジェクトをクリーンアップするようになります。
また
RemoteDriverの場合、Quit()またはDispose()を呼び出してもSeleniumサーバー上のセッションが閉じられます。セッションが閉じられていない場合、そのセッションのログファイルはメモリに残ります。
Close()
- 現在フォーカスを持っているブラウザまたはページを閉じるために使用されます。
Quit()
- WebドライバのインスタンスをシャットダウンしたりWebドライバのインスタンスを破壊したりするために使用されます(すべてのウィンドウを閉じます)。
Dispose()
- 私はこの方法を知りません。
quit()
:このドライバを終了し、開かれていたすべての関連ウィンドウを閉じます。
close()
:現在開いている最後のウィンドウであればブラウザを終了して現在のウィンドウを閉じます。
driver.close
とdriver.quit
は、Selenium WebDriverのブラウザセッションを閉じるための2つの異なる方法です。両方を理解し、それぞれの方法をいつ使用するべきかを知ることは、テストの実行において重要です。したがって、私はこれらの方法の両方にいくらかの光を当てることを試みました。
driver.close
- このメソッドは、フォーカスが設定されているブラウザウィンドウを閉じます。
driver.quit
- このメソッドは基本的にdriver.dispose
を内部的なメソッドとして呼び出します。これにより、すべてのブラウザウィンドウが閉じられ、WebDriverセッションが適切に終了します。
driver.dispose
- 前述のように、WebDriverの内部メソッドであり、他の答えに従って静かに削除されました - 検証が必要です。この方法は、通常のテストワークフローでは実際にはユースケースがありません。これまでの方法のどちらでもほとんどのユースケースでうまくいくはずです。
説明ユースケース:プログラムを終了したいときはいつでもdriver.quit
を使うべきです。開いているすべてのブラウザウィンドウを閉じてWebDriverセッションを終了します。プログラムの最後でdriver.quit
を使用しないと、WebDriverセッションは正しく閉じられず、ファイルはメモリから消去されません。これにより、メモリリークエラーが発生する可能性があります。
上記の説明は、WebDriverのdriver.close
メソッドとdriver.quit
メソッドの違いを説明するものです。私はあなたがそれが役に立つと思うことを願っています。
次のWebサイトにSeleniumのテストに関するヒントがいくつかあります。 Link
close(): - 同じドライバインスタンスで複数のブラウザウィンドウを開いているとします。ドライバインスタンスでclose()を呼び出すと、そのドライバインスタンスが指している現在のウィンドウが閉じます。しかし、ドライバインスタンスはまだメモリ内に残っており、他の開いているブラウザウィンドウを処理するために使用することができます。
quit(): - ドライバインスタンスでquit()を呼び出して、開いているブラウザウィンドウが1つ以上ある場合、開いているブラウザウィンドウをすべて閉じ、ドライバインスタンスはガベージコレクションされます。つまり、メモリから削除されます。そのため、このドライバインスタンスでquit()を呼び出した後に他の操作を実行することはできません。あなたがそうするならば、それは例外を投げます。
dispose(): - WebDriverインスタンス用のdisposeメソッドはないと思います。
参考のためにこのSeleniumの公式Javaドキュメント link にアクセスしてください。
Github of PhantomJSの問題に基づき、quit()はPhantomJSプロセスを終了しません。あなたが使用する必要があります:
import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here
driver.service.process.send_signal(signal.SIGTERM)
driver.quit()
close() は現在フォーカスのあるブラウザウィンドウを閉じるwebdriverコマンドです。
自動化プロセス中に、複数のブラウザウィンドウが開かれている場合、close()コマンドはその時点でフォーカスされている現在のブラウザウィンドウのみを閉じます。残りのブラウザウィンドウは閉じられません。次のコードを使用して現在のブラウザウィンドウを閉じることができます。
quit() は、driver.disposeメソッドを呼び出すwebdriverコマンドです。これにより、すべてのブラウザウィンドウが閉じられ、WebDriverセッションが終了します。プログラムの終了時にquit()を使用しないと、WebDriverセッションは正しく閉じられず、ファイルはメモリから消去されません。これにより、メモリリークエラーが発生する可能性があります。
オートメーションプロセスが単一のブラウザウィンドウのみを開く場合、close()コマンドとquit()コマンドは同じように機能します。オートメーション中に複数のブラウザウィンドウが開かれている場合、両者の機能は異なります。
上記Ref: ここをクリック
Disposeコマンド Dispose()はQuit()を呼び出す必要があります。しかし、PhantomJSを手動で閉じるまで、それ以降のアクションがブロックされるという点でも同じ問題があります。
参照 リンク
driver.close()とdriver.quit()の違い
driver.close - フォーカスが設定されているブラウザウィンドウを閉じます。
driver.quit - 基本的にはdriver.disposeメソッドを呼び出します。これにより、すべてのブラウザウィンドウが閉じられ、WebDriverセッションが正常に終了します。
私の理解するところでは、driver.close();
は現在のブラウザを閉じ、driver.quit();
はそのブラウザをすべて終了します。
Selenium Webドライバ
WebDriver.Close()
このメソッドは現在開いているウィンドウを閉じるために使用されます。ドライバがフォーカスしている現在開いているウィンドウを閉じます。
WebDriver.Quit()
このメソッドはWebDriverのインスタンスを破壊するために使用されます。そのドライバに関連するすべてのブラウザウィンドウを閉じて、セッションを安全に終了します。 WebDriver.Quit()はDisposeを呼び出します。
WebDriver.Dispose()
このメソッドはすべてのブラウザウィンドウを閉じて安全にセッションを終了します