# （十四）多窗口切换




<br>
在页面操作过程中有时候点击某个链接会弹出新的窗口， 这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换。

以百度首页和百度注册页为例，在两个窗口之间的切换如下图。
![](http://orru5lls3.bkt.clouddn.com/more_windows_n.png)

实现窗口切换的代码如下：

```java

import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MoreWindows {

  public static void main(String[] arge) throws InterruptedException{

    WebDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");

    //获得当前窗口句柄
    String search_handle = driver.getWindowHandle();

    //打开百度注册窗口
    driver.findElement(By.linkText("登录")).click();
    Thread.sleep(3000);
    driver.findElement(By.linkText("立即注册")).click();

    //获得所有窗口句柄
    Set<String> handles = driver.getWindowHandles();

    //判断是否为注册窗口， 并操作注册窗口上的元素
    for(String handle : handles){
      if (handle.equals(search_handle)==false){
        //切换到注册页面
        driver.switchTo().window(handle);
        System.out.println("now register window!");
        Thread.sleep(2000);
        driver.findElement(By.name("userName")).clear();
        driver.findElement(By.name("userName")).sendKeys("user name");
        driver.findElement(By.name("phone")).clear();
        driver.findElement(By.name("phone")).sendKeys("phone number");
        //......
        Thread.sleep(2000);
        //关闭当前窗口
        driver.close();
      }
    }
    Thread.sleep(2000);

    driver.quit();
  }
}
```
在本例中所涉及的新方法如下：

* getWindowHandle()： 获得当前窗口句柄。

* getWindowHandles()： 返回的所有窗口的句柄到当前会话。

* switchTo().window()： 用于切换到相应的窗口，与上一节的switchTo().frame()类似，前者用于不同窗口的切换， 后者用于不同表单之间的切换。




原始封面

![课程图片](https://images.unsplash.com/photo-1531791040016-29a5e23b8a3e?w=300)


