2012-07-12 65 views
14

我使用Selenium WebDriver。我打开第一页然后打开第二页 - 执行一些操作并返回到第一页。之前,我想结束我用命令driver.close();第二页,但它关闭的第一页,而不是第二个。我如何让Selenium关闭特定的窗口?代码如何使用Selenium WebDriver与Java关闭特定窗口?

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

你能告诉我们一些代码吗? – 2012-07-12 10:00:45

+0

我更新的问题 – khris 2012-07-12 10:04:18

+0

并点击在正确的发生(第二)窗口? – 2012-07-12 10:14:59

回答

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

这对我的作品

部分...

+0

我得到通知 - 集不能被解析为一个类型 – khris 2012-07-12 10:22:53

+0

我的代码工作,只是一些错误关闭窗口 – khris 2012-07-12 10:27:47

+2

@Khris A ['Set']的sequense(http://docs.oracle.com/javase/7/docs /api/java/util/Set.html)是java.util包的一部分。 – 2012-07-12 11:35:03

1

通过它的标题或标识窗口的具体独特的元素,您可以关闭特定的窗口..

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

在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

Ramnarayan所述的解决方案的伟大工程。修改它有点可重复性:

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 
相关问题