これらの違いは何でしょうか
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
どれをいつ使うべきでしょうか?
ベストアンサー1
これは良い質問です。私は、人々が Close() を、使用すべきでないときに使用しているのを見たことがあります。Selenium Client & WebDriver C# Bindings のソース コードを調べて、次のものを見つけました。
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 Server 上のセッションも閉じられます。セッションが閉じられていない場合、そのセッションのログ ファイルはメモリ内に残ります。