多窗口切换
有时候需要在不同的窗口切换,从而操作不同的窗口上的元素。在selenium1.0 中这个问题比较难处理。
但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口。
这里以百度首页与注册页为例,演示在不同窗口切换。
package com.mypro.jase; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class windows { 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,那么切换到百度搜索页,关闭之前打开的登录弹窗,然后时
行搜索操作。
在本例中所有用到的新方法:
getWindowHandle() 获得当前窗口句柄
getWindowHandles() 返回的所有窗口的句柄到当前会话
switchTo().window() 用于切换到相应的窗口,与上一节的switchTo().frame()是类似,前者
用于不同窗口的切换,后者用于不同表单之间的切换。
原文:http://www.cnblogs.com/111testing/p/6384484.html