2012-07-12 16 views
14

Używam Selenium WebDriver. Otwieram pierwszą stronę, a następnie otwieram drugą stronę - wykonaj jakąś czynność i wróć do pierwszej strony. Zanim chcę zamknąć drugą stronę, używam komendy driver.close();, ale zamyka ona pierwszą stronę zamiast drugiej. Jak mogę ustawić Selenium, aby zamknął określone okno?Jak mogę zamknąć określone okno przy pomocy Selenium WebDriver z Javą?

Część kodu

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

czy możesz pokazać nam kod? –

+0

zaktualizowane pytanie – khris

+0

czy kliknięcie ma miejsce w prawym (drugim) oknie? –

Odpowiedz

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

Działa to dla mnie ...

+0

Otrzymuję powiadomienie - Zestaw nie może być rozwiązany na typ – khris

+0

Mój kod działa, po prostu coś nie tak z sekwencją zamykania okna – khris

+2

@Khris A ['Zestaw'] (http://docs.oracle.com/javase/7/docs /api/java/util/Set.html) to pakiet 'java.util'. –

1

Można zamknąć określonego okna przez to tytuł lub identyfikowania konkretnego unikalny element tego okna ..

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

W języku 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

Rozwiązanie Ramnarayana działa świetnie. Zmodyfikowaliśmy go nieco pod kątem ponownego użycia:

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