2013-08-28 33 views
8

webdriverを使用して最初のタブ/メインタブ以外の開いているタブをすべて閉じる方法を教えてもらえますか?webdriverを使用して最初のタブ/メインタブ以外のすべての開いているタブを閉じる

私は以下を試みましたが、最初のタブも含めてすべてのタブを閉じています。

public static void closeTabs() { 
    String wh1=driver.getWindowHandle(); 
    String cwh=null; 
    while(wh1!=cwh) 
    { 
    new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform(); 
    driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.TAB); 
    cwh=driver.getWindowHandle(); 
    driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL+"w"); 
    } 
} 

私を助けてください。

+0

は、誰かが、タブを閉じる方法を、私を助けることができますか..? –

答えて

17

すべてのウィンドウハンドルを取得し、それを繰り返し、webdriverを新しいハンドルに切り替えてから、closeメソッドを呼び出します。明らかに元のハンドルのためにこれをスキップし、残りのハンドルに戻る。

類似のもの;

String originalHandle = driver.getWindowHandle(); 

    //Do something to open new tabs 

    for(String handle : driver.getWindowHandles()) { 
     if (!handle.equals(originalHandle)) { 
      driver.switchTo().window(handle); 
      driver.close(); 
     } 
    } 

    driver.switchTo().window(originalHandle); 
+0

私は 'driver.switchTo().window(handle).close()'は動作しませんが、 'driver.switchTo()。 driver.close(); 'work –

+0

' driver.switchTo()。ウィンドウ(ハンドル) 'は現在のウィンドウコンテキストを切り替えますが、wendriverオブジェクトを返します –

1

それが動作するはずです、このコードを試してみてください。

for(String winHandle : driver.getWindowHandles()) 
    { 
    if (winHandle == driver.getWindowHandles().toArray()[driver.getWindowHandles().size()-1])  
    { 
     continue; 
    } 
    driver.switchTo().window(winHandle); 
    driver.close(); 
    } 
+0

こんにちはAbhi、そのタブ全体ではなくウィンドウを閉じます。しかし、私は単一の/同じウィンドウ内の最初のタブを除くすべてのタブを閉じたいです。 Plsはこれを行う方法を教えてください? Plsはあなたがこれに関する他の情報が必要かどうか私に知らせます.. –

0

私はそれは一度目的のウィンドウが表示されます

public class Utility 
{ 
    public static WebDriver getHandleToWindow(String title){ 

     //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle. 
     WebDriver popup = null; 
     Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles(); 
     System.err.println("No of windows : " + windowIterator.size()); 
     for (String s : windowIterator) { 
      String windowHandle = s; 
      popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle); 
      System.out.println("Window Title : " + popup.getTitle()); 
      System.out.println("Window Url : " + popup.getCurrentUrl()); 
      if (popup.getTitle().equals(title)){ 
       System.out.println("Selected Window Title : " + popup.getTitle()); 
       return popup; 
      } 

     } 
       System.out.println("Window Title :" + popup.getTitle()); 
       System.out.println(); 
      return popup; 
     } 
} 

下に示すように、必要なウィンドウに切り替えるには、ユーティリティメソッドを持っていますウィンドウのタイトルはパラメータとして渡されます。あなたの場合はあなたがすることができます。

し、再度複数のウィンドウを扱うときに、この方法は有効に機能

Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow"); 

同じ方法を使用して、親ウィンドウに切り替えます。

0

これを試してみてください:私はすべてのウィンドウが、メイン1閉じるには、以下のなかった

for(int i = driver.getWindowHandles().size() -1 ; i > 0 ; i--){ 

     String winHandle = driver.getWindowHandles().toArray()[i].toString(); 

     driver.switchTo().window(winHandle); 

     driver.close(); 

} 
1

// Find out which handle is the one of the main window 
String mainWindow = driver.CurrentWindowHandle; 

// Get a list of all windows, except the main window 
driver.WindowHandles.Where(w => w != mainWindow).ToList() 
    // For each window found 
    .ForEach(w => 
    { 
     // switch to the window 
     driver.SwitchTo().Window(w); 

     // close the window 
     driver.Close(); 
    }); 

// At the end, come back to the main window 
driver.SwitchTo().Window(mainWindow); 
関連する問題