Java Selenium实现多窗口切换的示例代码
作者:虫师 时间:2022-01-22 22:48:08
在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,就需要主机切换到新窗口进行操作。WebDriver 提供了switchTo().window()方法可以实现在不同的窗口之间切换。
获取当前窗口浏览器句柄:driver.getWindowHandle();
获取所有窗口的浏览器句柄到当前会话:driver.getWindowHandles();
用于不同窗口的切换:switchTo().window();
在页面操作过程中有时候点击某个链接会弹出新的窗口, 这时就需要主机切换到新打开的窗口上进行操作。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()类似,前者用于不同窗口的切换, 后者用于不同表单之间的切换。
来源:http://www.testclass.net/selenium_java/more-windows
标签:Java,Selenium,多窗口切换
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringMVC自定义拦截 器登录检测功能的实现代码
2023-07-27 18:33:05
![](https://img.aspxhome.com/file/2023/5/57925_0s.png)
Java实现驼峰和下划线互相转换的示例代码
2023-12-16 15:23:48
![](https://img.aspxhome.com/file/2023/6/61066_0s.png)
详解Flutter网络图片本地缓存的实现
2023-08-18 19:44:43
解读List list=new ArrayList()是怎么回事
2022-04-17 12:28:22
![](https://img.aspxhome.com/file/2023/5/61145_0s.png)
举例说明Java设计模式编程中ISP接口隔离原则的使用
2023-11-20 11:07:40
![](https://img.aspxhome.com/file/2023/7/59517_0s.jpg)
Java多线程-线程的同步与锁的问题
2023-11-29 01:40:12
maven环境变量配置讲解
2023-11-29 12:35:51
![](https://img.aspxhome.com/file/2023/3/60683_0s.png)
Java使用ThreadLocal实现当前登录信息的存取功能
2023-06-06 12:00:34
![](https://img.aspxhome.com/file/2023/0/59950_0s.png)
lambda表达式解决java后台分组排序过程解析
2023-11-29 06:03:39
Spring Boot使用Allatori代码混淆的方法
2023-11-24 16:34:55
![](https://img.aspxhome.com/file/2023/0/59080_0s.jpg)
详解Spring ApplicationContext加载过程
2023-07-17 01:07:43
java中JVM中如何存取数据和相关信息详解
2023-08-10 03:49:46
![](https://img.aspxhome.com/file/2023/8/58048_0s.jpg)
深入理解Java中观察者模式与委托的对比
2023-10-30 18:00:03
![](https://img.aspxhome.com/file/2023/2/58712_0s.png)
Swing常用组件之多行文本区JTextArea
2023-11-08 14:16:49
java中使用数组进行模拟加密的方法
2023-11-18 15:37:39
SpringBoot项目依赖和配置最新示例讲解
2021-08-13 23:04:23
关于Java8 parallelStream并发安全的深入讲解
2023-11-15 06:37:35
![](https://img.aspxhome.com/file/2023/5/59545_0s.png)
java 中如何实现 List 集合去重
2023-10-07 07:54:06
![](https://img.aspxhome.com/file/2023/9/58549_0s.webp)
合成聚合复用原则_动力节点Java学院整理
2023-06-27 22:05:20
![](https://img.aspxhome.com/file/2023/9/57599_0s.png)
obix协议在java中的配置和使用详解
2023-11-25 20:59:42
![](https://img.aspxhome.com/file/2023/5/60275_0s.jpg)