在页面操作过程中有时候点击某个链接会弹出新的窗口, 这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换。

以百度首页和百度注册页为例,在两个窗口之间的切换如下图。

实现窗口切换的代码如下:

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()类似,前者用于不同窗口的切换, 后者用于不同表单之间的切换。

最新文章

  1. Ubuntu安装Svn,提供http访问
  2. js中的call和apply
  3. 深入理解javascript函数系列第二篇——函数参数
  4. 统计哪些程序占用了swap
  5. 过滤DataTable中的空数据
  6. Linux内核中关于内存的数据结构
  7. python 使用__slots__
  8. javascript——touch事件
  9. Lua中实现队列(高效方式)
  10. ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo
  11. Apache中RewriteCond规则参数介绍(转)
  12. 【转】android 欢迎界面翻页成效,仿微信第一次登陆介绍翻页界面
  13. maven创建spring项目之后,启动报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade
  14. Flask 学习 六 大型程序结构
  15. luogu P3576 [POI2014]MRO-Ant colony
  16. android圆角功能,非常好用,可以用在图片,视频,gif等上面
  17. 微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
  18. oracle死锁测试
  19. 01_Flume基本架构及原理
  20. nginx.conf_2017-11-24

热门文章

  1. .net core中关于System.Text.Json的使用
  2. GSVA的使用
  3. qt model--view-delegate模式的界面设计概念,ListView用法
  4. 使用speedtest-cli测量服务器带宽
  5. 创建一个用目录分层的Rust应用
  6. java绘图(基于Graphics2D)
  7. nginx tar包安装 包含openssl,rewrite,stream,sticky 等模块
  8. 【LEETCODE】36、121题,Best Time to Buy and Sell Stock
  9. springboot2.x配置druid sql监控
  10. hibernate注解(自动建表如何有表DDL注释) -- Comment用法