2012-07-12 35 views
14

Tôi sử dụng Selenium WebDriver. Tôi mở trang đầu tiên sau đó mở trang thứ hai - thực hiện một số hành động và quay trở lại trang đầu tiên. Trước khi tôi muốn đóng trang thứ hai, tôi sử dụng lệnh driver.close();, nhưng nó đóng trang đầu tiên thay vì trang thứ hai. Làm thế nào tôi có thể làm cho Selenium đóng một cửa sổ cụ thể?Tôi làm cách nào để đóng một cửa sổ cụ thể bằng cách sử dụng Selenium WebDriver với Java?

Phần mã

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

bạn có thể cho chúng tôi thấy một số mã không? –

+0

i câu hỏi được cập nhật – khris

+0

có nhấp chuột xảy ra ở cửa sổ bên phải (thứ hai) không? –

Trả lời

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

này làm việc cho tôi ...

+0

Tôi nhận được thông báo - Cài đặt không thể được giải quyết thành loại – khris

+0

Mã của tôi hoạt động, chỉ cần một cái gì đó sai với trình tự đóng cửa sổ – khris

+2

@Khris A ['Set'] (http://docs.oracle.com/javase/7/docs /api/java/util/Set.html) là gói 'java.util'. –

1

Bạn có thể đóng một cửa sổ cụ thể bằng cách đó là tiêu đề hoặc xác định một yếu tố độc đáo cụ thể của cửa sổ đó ..

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

Trong 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

Giải pháp của Ramnarayan hoạt động rất tốt. Đã sửa đổi nó một chút để có thể tái sử dụng:

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 
Các vấn đề liên quan