2012-07-12 31 views
14

Uso Selenium WebDriver. Abro la primera página, luego abro la segunda página, realizo algunas acciones y vuelvo a la primera página. Antes de que desee cerrar la segunda página, uso el comando driver.close();, pero cierra la primera página en lugar de la segunda. ¿Cómo puedo hacer que Selenium cierre una ventana específica?¿Cómo puedo cerrar una ventana específica usando Selenium WebDriver con Java?

Parte del código

String HandleBefore = driver.getWindowHandle(); 

driver.findElement(By.xpath("...")).click(); 
for (String twohandle : driver.getWindowHandles()) { 
     driver.switchTo().window(twohandle); 
    }  
driver.findElement(By.linkText("001")).click(); 
driver.close(); 
+0

¿nos puede mostrar algún código? –

+0

He actualizado la pregunta – khris

+0

¿El clic aparece en la ventana de la derecha (segunda)? –

Respuesta

17
String base = driver.getWindowHandle(); 

    Set <String> set = driver.getWindowHandles(); 

    set.remove(base); 
    assert set.size()==1; 

    driver.switchTo().window(set.toArray(new String[0])); 

    driver.close(); 
    driver.switchTo().window(base); 

Esto funciona para mí ...

+0

Recibo una notificación: el conjunto no se puede resolver con un tipo – khris

+0

Mi código funciona, simplemente hay un problema con la secuencia de la ventana de cierre – khris

+2

@Khris A ['Set'] (http://docs.oracle.com/javase/7/docs /api/java/util/Set.html) es del paquete 'java.util'. –

1

Puede cerrar una ventana específica por su título o la identificación de un único elemento específico de esa ventana ..

private void SwitchTabandClose() 
{ 
    Set <String> windows = driver.getWindowHandles(); 
    String mainwindow = driver.getWindowHandle(); 

    for (String handle: windows) 
    { 
     driver.switchTo().window(handle); 
     System.out.println("switched to "+driver.getTitle()+" Window"); 
     String pagetitle = driver.getTitle(); 
     if(pagetitle.equalsIgnoreCase("XYZ Title")) 
     { 
      driver.close(); 
      System.out.println("Closed the '"+pagetitle+"' Tab now ..."); 
     } 
    } 

    driver.switchTo().window(mainwindow); 
} 
4

En Python

default_handle = driver.current_window_handle 
handles = list(driver.window_handles) 
assert len(handles) > 1 

handles.remove(default_handle) 
assert len(handles) > 0 

driver.switch_to_window(handles[0]) 
# do your stuffs 
driver.close() 
driver.switch_to_window(default_handle) 
1

La solución de Ramnarayan funciona muy bien. Se modificó un poco para reusablity:

public static String switchToWindowByTitle(WebDriver driver, String windowTitle) { 
    Set<String> handles = driver.getWindowHandles(); 
    String currentHandle = driver.getWindowHandle(); 
    for (String handle : handles) { 
    driver.switchTo().window(handle); 
    if (windowTitle.equalsIgnoreCase(driver.getTitle())) { 
     break; 
    } 
    } 

    return currentHandle; 
} 


// How to use method 
String currentHandle = SeleniumUtil.switchToWindowByTitle(driver, WINDOW_TITLE); 
driver.close(); // Close WINDOW_TITLE page or do other things 
driver.switchTo().window(currentHandle); // Return to current page 
Cuestiones relacionadas