Selenium多窗口切换解决方案
作者:码同学软件测试 发布时间:2021-07-06 14:56:33
在做web端自动化测试用例编写过程中,大家有没有遇到窗口切换的情况,比如如下截图所示的商品列表页,点击任何一款产品后切换到这块产品详情页的情况。
此时浏览器中叠放了两个窗口, 如下截图这种情况;
或者出现打开两个浏览器窗口的情况,如下截图这种情况。
这两种窗口切换的情况下大家的自动化测试脚本是如何编写的呢?
还是不需要单独处理窗口切换?如果是使用selenium框架编写涉及窗口切换的自动化测试用例,肯定要单独处理窗口切换的情况。
那么为什么要对出现新窗口的情况单独处理呢?因为我们通过浏览器驱动对象访问指定url对应的是一个窗口X,当在窗口X执行某个操作(例如点击)导致新开一个页面或者新窗口Y,这种情况下selenium没有做智能处理,而把主动权交给了脚本编写人员来决定浏览器驱动对象在X还是Y窗口上模拟用户的操作行为。
那么接下来我们就需要去实现如何让窗口切换到我们预期的窗口,还是拿我们文章开头的例子来说吧,我需要从商品列表页切换到商品详情页,大体有4种解决方案,分别是:遍历找到预期窗口再进行切换、遍历过程中先切换窗口再判断预期窗口、指定窗口切换、多个条件判断预期窗口。接下来就需要解决我如何找到执行某个操作前后的窗口唯一标识,就像人和人之间的区别是身份证,出现商品列表页、商品详情页的情况下这两个窗口如何区分呢?
通过句柄,每个窗口都拥有一个唯一标识句柄,如果感兴趣的读者可以将句柄打印出来看看,其实就是一串作为唯一标识的字符串。
那么selenium框架web自动化情况下,我们如何来获取句柄呢?通过getWindowHandle()方法来获取当前页面的句柄。接下来我们尝试通过第一种解决方案遍历找到预期窗口再进行切换来获取,具体的代码实现逻辑为在执行点击某款产品前获取窗口句柄,然后定位某款产品元素并调用点击方法,然后调用getWindowHandles()方法获取当前所有打开窗口的句柄集合,也就是商品列表页以及商品详情页的句柄集合,接下来要做的就是遍历句柄集合中的元素,遍历的过程中判断当前这个句柄是否和点击操作前的句柄相同,如果不相同则切换到这个句柄对应的窗口,那么读者可能会问,切换窗口的方法是哪个?是switchTo()。下面给读者们提供一份样例代码块。
读者们平时写测试用例涉及到多窗口切换的情况下,一般用这个方法就可以搞定。当然如果非常确定执行点击等操作后只新开一个窗口的话,还可以使用指定窗口切换这个解决方案,代码的实现逻辑就比较简单了,区分于方案一的地方就是将句柄集合转换成数组,然后通过指定数组下标来实现窗口切换,如下是给大家提供的实现代码块:
如果出现多个叠加操作导致打开多个窗口的情况,还可以采用遍历过程中先切换窗口再判断预期窗口的方案,该方案区别于方案之处在于先执行窗口切换,然后再判断当前窗口句柄和预期的窗口句柄是否一致,如果一致,则停止遍历,依然给大家一段参考的实现代码,如下所示:
以上代码块中实现的停止切换窗口的条件是,当前切换到的窗口title属性值是否是我预期窗口的title属性值,如果是则停止继续切换窗口。看到这里有读者可能会问了,如果有多个窗口的title属性值都相同,这个方案就不管用了吧?是的,但是我们可以尝试替换判断条件,例如判断当前切换到的窗口url和预期的url是否一致,这个判断比较保险,不同的窗口对应的url一般是不同的,但是如果前端代码版本更新时修改了url,此时我们的测试用例该部分信息也需要跟着修改,不要郁闷还有其他的替代解决方案,判断条件可以有一个变成多个,以上是针对多窗口切换情况的常用解决方案以及应用场景,希望能帮到我们的读者朋友。更多相关Selenium多窗口切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://blog.csdn.net/Testfan_zhou/article/details/125534144
猜你喜欢
- 对于xml2ddl项目,Freshmeat.org提供了一整套基于GNU或者GPL通用公共许可证下的Python程序。在一个运行的Pytho
- <html> <head> <title>Login</title> <meta ht
- 这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用p
- 有时候在一个页面用到收放功能的时候时,总有一个虚线框在触发收放的功能按钮上,显得特别刺眼,那如何去除这个虚线框呢?在IE下,需要在标签 a
- 内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对
- 目标:爬取自己账号中购买的课程视频。一、实现登录账号这里采用的是手动输入验证码的方式,有能力的盆友也可以通过图像识别的方式自动填写验证码。登
- 使用torchvision库的datasets类加载常用的数据集或自定义数据集图像识别是计算机视觉中的一个基础任务,它的目标是让计算机能够识
- 本文实例为大家分享了python使用itchat实现手机控制电脑的具体代码,供大家参考,具体内容如下1.准备材料首先电脑上需要安装了pyth
- TihuanWords.txt文档格式注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词。年休假 年假 年休究竟 到底回家场景 我
- 原始两张图片:代码运行结果如下。5种算法值哈希算法、差值哈希算法和感知哈希算法都是值越小,相似度越高,取值为0-64,即汉明距离中,64位的
- 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值。典型的例子就是一个银行账户,因为你每一次都是在不同的时间
- 本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:Python版本: python3.+ 运
- 在对二维数据进行 resize / mapping / 坐标转换等操作时,经常会将原本的整数坐标变换为小数坐标,对于非整数的坐标值一种直观有
- 等啊等,约会都回来了,终于等到了Google放出今年的情人节Logo,原本下午四点就可以上线的这篇文章,为了等待Google谷歌美国总部的那
- 两个例子package main import ( "fmt" "time")func Proces
- 对于请求一些网站,我们需要加上请求头才可以完成网页的抓取,不然会得到一些错误,无法返回抓取的网页。下面,介绍两种添加请求头的方法。方法一:借
- 本文摘自 《深度学习原理与PyTorch实战》我们将从预测某地的共享单车数量这个实际问题出发,带领读者走进神经网络的殿堂,运用PyTorch
- go简单代码反汇编用简单的代码用以分析go的调用约定及多返回值的返回方式。package mainfunc vals(c, d int) (
- 写在前面的话:此篇还是asp相关的,相信玩ASP的都有这个感觉,当数据有5万多条时-------just like音乐网,要调用最新的10条
- creatdoc.asp<!DOCTYPE HTML PUBLIC "-//W3C/DTD&n