2013-08-28 10 views
8

Czy ktoś może mi powiedzieć, jak zamknąć wszystkie otwarte karty za wyjątkiem pierwszej karty/głównej karty za pomocą webdrivera?Zamykanie wszystkich otwartych kart z wyjątkiem pierwszej karty/głównej zakładki za pomocą webdrivera.

Próbowałem poniżej, ale zamyka również wszystkie zakładki, w tym pierwszą kartę.

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"); 
    } 
} 

Proszę mi pomóc.

+0

Czy ktoś może mi pomóc, jak zamknąć wypustki ..? –

Odpowiedz

17

Pobierz wszystkie uchwyty okien, a następnie wykonaj ich iteracje, przełączając webdriver na nowy uchwyt, a następnie wywołując metodę zamykania. Oczywiście należy to pominąć w przypadku oryginalnego uchwytu, a następnie powrócić do pozostałego uchwytu.

Coś jak;

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

Zastanawiam się, dlaczego 'driver.switchTo(). Okno (uchwyt) .close()' nie działa, ale 'driver.switchTo(). Okno (uchwyt); driver.close(); 'work –

+0

' driver.switchTo(). Window (uchwyt) 'przełącza bieżący kontekst okna, ale zwraca obiekt wendriver –

1

Spróbuj ten kod powinien działać:

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

Hi Abhi, zamyka całe okno, nie tabulatory. Ale chcę zamknąć wszystkie karty z wyjątkiem pierwszej Tab w jednym/tym samym oknie. Pls powiedz mi, jak to zrobić? Pls daj mi znać, jeśli potrzebujesz innych informacji dotyczących tego .. –

0

Mam metodę użytkową, aby przełączyć do wymaganego okna, jak pokazano poniżej

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; 
     } 
} 

To zabierze Cię do żądanego okna raz tytuł okna jest przekazywany jako parametr. W twoim przypadku możesz to zrobić.

a następnie ponownie przełączyć się do okna nadrzędnego stosując tę ​​samą metodę

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

Ta metoda działa efektywnie, gdy do czynienia z wieloma oknami.

0

Spróbuj tego:

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

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

     driver.switchTo().window(winHandle); 

     driver.close(); 

} 
1

zrobiłem następujące czynności, aby zamknąć wszystkie okna, ale głównym z nich:

// 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); 
Powiązane problemy