1.简介

  今天本来就要分享和讲解三大延时等待的,但是在写作过程中发了问题,会用到这一个知识点,于是就提前介绍一下,以便后边用到了可以更好的理解和掌握。本文就是要介绍如何获得浏览器窗体的句柄或者叫编号,为后面的driver实例在多个窗体之间切换做准备。

2.什么是浏览器窗口句柄?

先来解释下什么是句柄,有时候浏览器的窗口句柄,也叫windows id,英文单词更好理解。你打开了一个浏览器,你开一个tab,就生成了一个id,这个id直到你关闭这个tab才会消失。如果你在一个浏览器上打开多个tab,那么就有多个windows id,为什么你关闭其中一个tab,但是不影响其他tab的显示,就是这个id的作用。

3.实战

废话不说 ,直接进入主题进行实例讲解。

3.1一个windows句柄

我们先看看浏览器只开一个tab,也就是只有一个windows句柄的时候,打印出这个句柄出来。

3.1.1代码设计

3.1.2参考代码
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; /**
* @author 北京-宏哥
*
* 2021年8月19日
*/
public class GetWinId { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径 WebDriver driver = new ChromeDriver ();
//最大化窗口
driver.manage().window().maximize();
//打开百度首页
driver.get("http://wwww.baidu.com"); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); Thread.sleep(1000);
//打印当前页面句柄
System.out.println("打印结果"+driver.getWindowHandle()); driver.close();
}
}
3.1.3运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.2两个windows句柄

接下来,看看有两个tab,打印出两个windows句柄来,使用getWindowsHandles()方法。

3.2.1代码设计

3.2.2参考代码
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; /**
* @author 北京-宏哥
*
* 2021年8月19日
*/
public class GetWinId { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径 WebDriver driver = new ChromeDriver ();
//最大化窗口
driver.manage().window().maximize();
//打开百度首页
driver.get("http://wwww.baidu.com"); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); Thread.sleep(1000); WebElement News = driver.findElement(By.xpath("//div/a[text()='新闻']")); News.click(); Thread.sleep(1000); //打印当前页面句柄
System.out.println("打印结果"+driver.getWindowHandles()); driver.close();
}
}
3.2.3运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.3大于两个windows句柄

接下来,看看大于两个tab,打印出大于两个windows句柄来,使用getWindowsHandles()方法。

3.3.1代码设计

3.3.2参考代码
package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; /**
* @author 北京-宏哥
*
* 2021年8月19日
*/
public class GetWinId { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驱动路径 WebDriver driver = new ChromeDriver ();
//最大化窗口
driver.manage().window().maximize();
//打开百度首页
driver.get("http://wwww.baidu.com"); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); Thread.sleep(1000);
//打开新闻页面
WebElement News = driver.findElement(By.xpath("//div/a[text()='新闻']")); News.click(); Thread.sleep(1000);
//打开地图页面
WebElement Map = driver.findElement(By.xpath("//div/a[text()='地图']")); Map.click(); Thread.sleep(1000);
//打印当前页面句柄
System.out.println("打印结果"+driver.getWindowHandles()); driver.close();
}
}
3.3.3运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.小结

在实际操作中,细心的小伙伴们或者童鞋们已经发现代码的逻辑一直都在百度首页,也就是第一个打开的页面,所以在执行driver.close();时候只有百度首页关闭了,其他页面不受影响,不相信的小伙伴们可以在第一个或者第二个页面定位到页面的元素进行操作,代码会报错告诉你找不到页面元素。所以要想操作对应页面的元素,我们就需要切换到对应窗口的句柄即可。

宏哥在后边的实操中在断言时候,就遇到相同的问题,需要进行句柄切换进行断言,这个宏哥可能会单独列一篇文章进行讲解和分享的。

好了,今天时间也不早了,感谢你耐心地阅读。早点休息吧!

《手把手教你》系列技巧篇(二十一)-java+ selenium自动化测试-浏览器窗口的句柄(详细教程)的更多相关文章

  1. 《手把手教你》系列技巧篇(五十二)-java+ selenium自动化测试-处理面包屑(详细教程)

    1.简介 面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了 ...

  2. 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教程)

    1.简介 按照计划宏哥今天将介绍java+ selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客 - 截取某个元素(或者目标区域)的图片.在测试的过程中,有时候不需要截取整个屏 ...

  3. 《手把手教你》系列技巧篇(六十)-java+ selenium自动化测试 - 截图三剑客 -中篇(详细教程)

    1.简介 前面我们介绍了Selenium中TakeScreenshot类来截图,得到的图片是浏览器窗口内的截图.有时候,只截浏览器窗口内的图是不够的,而且TakeScreenshot截图只针对浏览器的 ...

  4. 《手把手教你》系列技巧篇(五十六)-java+ selenium自动化测试-下载文件-上篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  5. 《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  6. 《手把手教你》系列技巧篇(五十九)-java+ selenium自动化测试 - 截图三剑客 -上篇(详细教程)

    1.简介 今天本来是要介绍远程测试的相关内容的,但是宏哥在操作服务器的时候干了件糊涂的事,事情经过是这样的:本来申请好的Windows服务器用来做演示的,可是服务器可能是局域网的,连百度都不能访问,宏 ...

  7. 《手把手教你》系列技巧篇(六十九)-java+ selenium自动化测试 - 读取csv文件(详细教程)

    1.简介 在实际测试中,我们不仅需要读取Excle,而且有时候还需要读取CSV类的文件.如何去读取CSV的文件,宏哥今天就讲解和分享一下,希望对你能够有所帮助.前面介绍了如何读取excel文件,本篇介 ...

  8. 《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)

    1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助. 2.select 下拉框 2.1Select ...

  9. 《手把手教你》系列技巧篇(四十二)-java+ selenium自动化测试 - 处理iframe -下篇(详解教程)

    1.简介 经过宏哥长时间的查找,终于找到了一个含有iframe的网页.所以今天这一篇的主要内容就是用这个网页的iframe,宏哥给小伙伴或者童鞋们演示一下,在处理过程中遇到的问题以及宏哥是如何解决的. ...

随机推荐

  1. WPF教程八:如何更好的使用Application程序集资源

    这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程序集资源实际上是二进制资源,后续编译过程中会被嵌入到程序集中,而为了更方便的使用资源,我们要好好梳理一下程序 ...

  2. echarts堆叠柱状图在最上面的柱子显示总和

    需求 柱子需设置barMinHeight 在堆叠柱状图的最上面显示当前堆叠的总和 直接上代码吧 需要注意:设置barMinHeight时为了让0不显示,只能将0设置为null; 设置为null的柱子l ...

  3. 深入浅出 Jest 框架的实现原理

    English Version | 中文版 深入浅出 Jest 框架的实现原理 https://github.com/Wscats/jest-tutorial 什么是 Jest Jest 是 Face ...

  4. java基础---常用类

    一.字符串类String String:字符串,使用一对""引起来表示,字符串常量池在方法区中 public final class String implements java. ...

  5. [转载]API网关

    1. 使用API网关统一应用入口 API网关的核心设计理念是使用一个轻量级的消息网关作为所有客户端的应用入口,并且在 API 网关层面上实现通用的非功能性需求.如下图所示:所有的服务通过 API 网关 ...

  6. 【spring源码系列】之【Bean的初始化】

    只要不放弃,希望迟早都会到来! 1. Bean的初始化 如果把bean的生命周期看作一个婴儿诞生过程的,那么创建实例相当于婴儿从母体出来,一丝不挂光秃秃:属性赋值相当于给宝宝的头带帽子,上身穿衣服.下 ...

  7. C语言:虚拟地址 和编译模式

    所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ...

  8. 解决远程连接服务器数据库报错:Host ‘XXXXXX’ is blocked because of many connection errors

    参考:https://blog.csdn.net/li_li_lin/article/details/72764683和 https://blog.csdn.net/zaishijizhidian/a ...

  9. 【系统学习ES6】新专题发布

    我要发免费专题了,向下看 公众号和博客都有一阵没更新了,丢了一些粉儿,但是也很庆幸,时时还会有人关注.我并不是什么专业讲师,文章都是利用业余时间手工原创.在这里非常感谢各位的支持和厚爱. 这个月开始, ...

  10. ThinkPHP 2.x 任意代码执行漏洞

    直接访问 http://192.168.49.2:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D