- switchTo().window() : 方法可以实现在不同的窗口之间切换;window参数为将要切换到的页面的句柄;
- getWindowHandle():获得当前窗口句柄。
- getWindowHandles():返回的所有窗口的句柄到当前会话。
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行
操作。WebDriver 提供了 switchTo().window()方法可以实现在不同的窗口之间切换。 - public static void main(String[] arge) throws InterruptedException{
- WebDriver driver = new ChromeDriver();
- driver.get("http://www.baidu.com");
- String sreach_handle = driver.getWindowHandle(); //获得当前窗口句柄
- System.out.println(sreach_handle); //打开百度注册窗口
- 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(sreach_handle)==false){
- driver.switchTo().window(handle); //切换到注册页面
- System.out.println("now register window!");
- Thread.sleep(2000);
- driver.findElement(By.name("account")).clear();
- driver.findElement(By.name("account")).sendKeys("username");
- driver.findElement(By.name("password")).sendKeys("password");
- Thread.sleep(2000);
- driver.close(); //关闭当前窗口
- }
- }
- for(String handle : handles){ //判断是否为百度首页,并操作首页上的元素
- if (handle.equals(sreach_handle)){
- driver.switchTo().window(handle); //切换到百度搜索页面
- Thread.sleep(2000);
- driver.findElement(By.className("close-btn")).click();
- System.out.println("now baidu sreach page!");
- driver.findElement(By.id("kw")).sendKeys("webdriver");
- driver.findElement(By.id("su")).click();
- Thread.sleep(2000);
- }
- }
- driver.quit();
- }
复制代码脚本的执行过程:首先打开百度首页,通过 getWindowHandle()获得当前窗口的句柄,并赋值给变量sreach_handle。接着打开登录弹窗,在登录弹窗上单击“立即注册”,从而打开新的注册窗口。通过getWindowHandles()获得当前打开的所有窗口的句柄,并赋值给变量 handles。
第一个循环遍历 handles,如果 handle 不等于 sreach_handle,那么一定是注册窗口,因为脚本执行过程中只打开两个窗口。所以,通过 switchTo().window()切换到注册页进行注册操作。第二个循环类似,不过这一次判断如果 handle 等于 sreach_handle,那么切换到百度搜索页,然后进行搜索操作。
|