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,多窗口切换
0
投稿

猜你喜欢

  • SpringMVC自定义拦截 器登录检测功能的实现代码

    2023-07-27 18:33:05
  • Java实现驼峰和下划线互相转换的示例代码

    2023-12-16 15:23:48
  • 详解Flutter网络图片本地缓存的实现

    2023-08-18 19:44:43
  • 解读List list=new ArrayList()是怎么回事

    2022-04-17 12:28:22
  • 举例说明Java设计模式编程中ISP接口隔离原则的使用

    2023-11-20 11:07:40
  • Java多线程-线程的同步与锁的问题

    2023-11-29 01:40:12
  • maven环境变量配置讲解

    2023-11-29 12:35:51
  • Java使用ThreadLocal实现当前登录信息的存取功能

    2023-06-06 12:00:34
  • lambda表达式解决java后台分组排序过程解析

    2023-11-29 06:03:39
  • Spring Boot使用Allatori代码混淆的方法

    2023-11-24 16:34:55
  • 详解Spring ApplicationContext加载过程

    2023-07-17 01:07:43
  • java中JVM中如何存取数据和相关信息详解

    2023-08-10 03:49:46
  • 深入理解Java中观察者模式与委托的对比

    2023-10-30 18:00:03
  • 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
  • java 中如何实现 List 集合去重

    2023-10-07 07:54:06
  • 合成聚合复用原则_动力节点Java学院整理

    2023-06-27 22:05:20
  • obix协议在java中的配置和使用详解

    2023-11-25 20:59:42
  • asp之家 软件编程 m.aspxhome.com