多窗口切换
有时候需要在不同的窗口切换,从而操作不同的窗口上的元素。在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()是类似,前者
用于不同窗口的切换,后者用于不同表单之间的切换。

最新文章

  1. 掌握javascript中的最基础数据结构-----数组
  2. 巧用git bash
  3. Android 异步Http框架简介和实现原理
  4. struts2环境配置
  5. Socket编程基础——无连接UDP
  6. js时间显示设置
  7. Linux:两台服务器之间添加信任关系,进行远程操作的时候不需要输入密码
  8. centos5.4下mysql主从复制
  9. jQuery scroll(滚动)延迟加载
  10. Hrbustoj 2266 Legendary Weights(辗转相除求最大公约数)
  11. 详解常用的gulp命令
  12. Intellij IDEA 像eclipse那样给maven添加依赖
  13. CCF系列之最大的矩形(201312-3)
  14. 集合的最大缺点是无法进行类型判定(这个缺点在JAVA1.5中已经解决),这样就可能出现因为类型不同而出现类型错误。
  15. VSTO:使用C#开发Excel、Word【2】
  16. UITabBarItem title 和self.title设置不同的标题
  17. python&#160;日志打印之logging使用介绍
  18. hadoop大数据处理平台与案例
  19. scapy IPv6 NS NA报文构造
  20. gzip命令详解

热门文章

  1. Entity Framework6测试使用
  2. jQuery事件处理(五)
  3. LinQ实战学习笔记(二) C#增强特性
  4. win7 开机自启动控制
  5. 攻防对抗中常用的windows命令(渗透测试和应急响应)
  6. vue生成路由实例, 使用单个vue文件模板生成路由
  7. Elasticsearch-mapper 基于注解方式生成mapping(2.0以上)
  8. redis集群节点宕机
  9. [实战]MVC5+EF6+MySql企业网盘实战(2)——验证码
  10. easyui---基础组件:panel