私のバッチ実行では、最初のシナリオで複数のタブを持つ複数のブラウザーが開かれています。 2番目のシナリオを開始する前に、これらのブラウザーをすべて閉じたいと思いました。
Driver.close()
はブラウザの1つのタブを閉じているだけです。 Driver.quit()
はすべてのブラウザを閉じ、WebDriver
セッションも終了しています。そのため、バッチ実行を実行できません。これに対する解決策を提供してください。
以下の説明では、WebDriverのdriver.closeとdriver.quitメソッドの違いを説明する必要があります。それがあなたのお役に立てば幸いです。
driver.closeとdriver.quitは、Selenium WebDriverでブラウザーセッションを閉じるための2つの異なる方法です。
これらの両方を理解し、各メソッドをいつ使用するかを知ることは、テストの実行において重要です。したがって、私はこれらの両方の方法に光を当てようとしました。
driver.close-このメソッドは、フォーカスが設定されているブラウザーウィンドウを閉じます。 driver.quit webdriverのセッションを閉じますdriver.close他のウィンドウが開かれていない場合、Seleniumコントロールが存在するがwebdriverセッションがまだ閉じていない現在のウィンドウのみを閉じ、 driver.closeを呼び出すと、webdriverのセッションも閉じます。
driver.quit –このメソッドは基本的にdriver.disposeを呼び出します。このメソッドはすべてのブラウザーウィンドウを閉じ、WebDriverセッションを正常に終了する内部メソッドを呼び出します。
driver.dispose-前述のように、WebDriverの内部メソッドは、別の回答に従って静かにドロップされました-検証が必要です。通常のテストワークフローでは、この方法には実際にはユースケースがありません。前の方法のいずれかがほとんどのユースケースで機能するはずです。
ユースケースの説明:プログラムを終了するときは、常にdriver.quitを使用する必要があります。開いているすべてのブラウザーウィンドウを閉じ、WebDriverセッションを終了します。プログラムの最後でdriver.quitを使用しない場合、WebDriverセッションは適切に閉じられず、ファイルはメモリから消去されません。これにより、メモリリークエラーが発生する場合があります。
............
今その場合、特定のブラウザが必要です。以下は、メインウィンドウを除くすべての子ウィンドウを閉じるコードです。
String homeWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();
//Use Iterator to iterate over windows
Iterator<String> windowIterator = allWindows.iterator();
//Verify next window is available
while(windowIterator.hasNext())
{
//Store the Recruiter window id
String childWindow = windowIterator.next();
}
//Here we will compare if parent window is not equal to child window
if (homeWindow.equals(childWindow))
{
driver.switchTo().window(childWindow);
driver.close();
}
ここで、必要に応じて条件を変更または追加する必要があります
if (homeWindow.equals(childWindow))
{
driver.switchTo().window(childWindow);
driver.close();
}
現在、ホームウィンドウがchildwindowと等しいかどうかのみをチェックしています。ここで、どのidを閉じるかなどの条件を指定する必要があります。試したことがないので、要件を達成する方法を提案しただけです。
driver.close()
とdriver.quit()
の違いを理解する必要があります
driver.close()
とdriver.quit()
は、Selenium WebDriver
でブラウザーセッションを閉じるための2つの異なる方法です。それらの両方を理解し、テストの実行に重要なメソッドをいつ使用するかを把握します。
driver.close()
–フォーカスが設定されているブラウザーウィンドウを閉じます。
driver.quit()
–基本的にdriver.disposeメソッドを呼び出し、すべてのブラウザーウィンドウを閉じてWebDriverセッションを正常に終了します。
プログラムを終了するときはいつでもdriver.quit()
を使用する必要があります。開いているすべてのブラウザーウィンドウを閉じ、WebDriverセッションを終了します。プログラムの最後でdriver.quitを使用しない場合、WebDriverセッションは適切に閉じられず、ファイルはメモリから消去されません。これにより、メモリリークエラーが発生する場合があります。
あなたの場合、現在のウィンドウを閉じてドライバをアクティブに保つdriver.close()
を使用する必要があります。
ただ追加する-ブラウザウィンドウのみが開いていてdriver.close()
を使用している場合、webdriverセッションを終了します。 Webdriverはアクティブのままになりません。
このコードは、開いているすべてのウィンドウを閉じ、メインウィンドウに制御を戻します。
public static void switchTab() {
try {
Set<String> windows = webDriver.getWindowHandles();
Iterator<String> iter = windows.iterator();
String[] winNames=new String[windows.size()];
int i=0;
while (iter.hasNext()) {
winNames[i]=iter.next();
i++;
}
if(winNames.length > 1) {
for(i = winNames.length; i > 1; i--) {
webDriver.switchTo().window(winNames[i - 1]);
webDriver.close();
}
}
webDriver.switchTo().window(winNames[0]);
}
catch(Exception e){
e.printStackTrace();
}
}