2013-08-28 8 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(). Window (handle); driver.close(); 'work –

+0

' driver.switchTo(). Window (handle) 'переключает контекст текущего окна, но возвращает объект wendriver –

1

Попробуйте этот код, он должен работать:

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

Hi Abhi, его закрытие всего окна, а не вкладки. Но я хочу закрыть все вкладки, кроме первой вкладки в одном окне. Скажите мне, как это сделать? 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

Попробуйте это:

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); 
Смежные вопросы