2012-07-12 18 views
14

Uso Selenium WebDriver. Apro la prima pagina e apro la seconda pagina: esegui un'azione e ritorna alla prima pagina. Prima di chiudere la seconda pagina, utilizzo il comando driver.close();, ma chiude la prima pagina anziché la seconda. Come posso fare in modo che Selenium chiuda una finestra specifica?Come posso chiudere una finestra specifica utilizzando Selenium WebDriver con Java?

Parte del codice

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

puoi mostrarci qualche codice? –

+0

ho aggiornato la domanda – khris

+0

il clic si verifica nella finestra destra (seconda)? –

risposta

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

Questo funziona per me ...

+0

Ricevo notifica - Il set non può essere risolto con un tipo – khris

+0

Il mio codice funziona, solo qualcosa di sbagliato con sequenze di chiusura della finestra – khris

+2

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

1

È possibile chiudere una finestra specifica per il suo titolo o identificare un elemento unico specifico di quella finestra ..

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

In 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 soluzione di Ramnarayan funziona alla grande. Modificato un po 'per la riusabilità:

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 
Problemi correlati