当前位置: 首页 > news >正文

Selenium切换窗口、框架和弹出框window、ifame、alert

一、切换窗口

#获取打开的多个窗口句柄
windows = driver.window_handles
#切换到当前最新打开的窗口
driver.switch_to.window(windows[-1])
#最大化浏览器
driver.maximize_window()
#刷新当前页面
driver.refresh()

二、切换框架frame

如存在以下网页:

<html lang="en">
<head>
<title>FrameTest</title>
</head>
<body>
<iframe src="a.html" id="frame1" name="myframe"></iframe>
</body>
</html>

可以使用4中方式切换frame

#1.用frame的index来定位,第一个是0
driver.switch_to.frame(0)  
#2.用id来定位
driver.switch_to.frame("frame1")  
#3.用name来定位
driver.switch_to.frame("myframe")
#4.用WebElement对象来定位
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

三、切换alert()提示框

#1. 获取alert
driver.switchTo().alert()
#2.点确定 
alert.accept()
#3.点取消 
alert.dismiss()
#4.获取alert的内容
alert.getText()

以下是使用中的一个例子:

alert = driver.switch_to.alert #切到弹出框
print(alert.text)
a=alert.text
alert.accept()
return '添加成功!' in a

在Selenium中,可以使用以下方法来切换窗口、框架和弹出框:

  1. 切换窗口:
  • driver.switch_to.window(window_handle):通过窗口句柄(window handle)切换到指定的窗口。可以使用driver.window_handles获取所有窗口的句柄,然后通过索引或其他方式选择要切换的窗口。
  1. 切换框架(iframe):
  • driver.switch_to.frame(frame_reference):通过框架的名称或索引切换到指定的框架。可以使用框架的名称或索引来定位到框架,并切换到它。
  1. 处理弹出框(alert):
  • driver.switch_to.alert:切换到当前页面上的警告框(alert)。可以使用accept()接受警告框,点击确定按钮;使用dismiss()关闭警告框,点击取消按钮;使用send_keys(text)向警告框发送文本。

注意事项:

  • 切换窗口和框架时,需要确保当前焦点在正确的上下文中。You可能需要先切换到默认内容,即主页面,然后再进行窗口或框架的切换。
  • 在处理弹出框之前,需要等待弹出框的出现。可以使用显式等待来等待弹出框的出现。

示例代码:

python
# 切换窗口
main_window = driver.current_window_handle  # 获取当前窗口句柄
new_window = driver.window_handles[1]  # 假设有多个窗口,选择第二个窗口
driver.switch_to.window(new_window)  # 切换到新窗口# 切换框架
driver.switch_to.frame("frame_name")  # 通过框架名称切换
driver.switch_to.frame(0)  # 通过索引切换# 处理弹出框
alert = driver.switch_to.alert
alert.accept()  # 点击确定按钮
alert.dismiss()  # 点击取消按钮
alert.send_keys("text")  # 发送文本

以上是在Selenium中切换窗口、框架和处理弹出框的方法。根据具体情况,你可以选择适当的方法来实现你的测试需求。

END今天的分享就到此结束了,点赞关注不迷路~

http://www.lryc.cn/news/246991.html

相关文章:

  • QT linux下应用程序打包
  • Java高级技术(单元测试)
  • leetCode 1080.根到叶路径上的不足节点 + 递归 + 图解
  • C++基础 -10- 类
  • 【软件测试】性能测试相关指标
  • Leetcode 2943. Maximize Area of Square Hole in Grid
  • qt 简单了解QHBoxLayout QVBoxLayout QFormLayout水平,垂直,表单布局管理器.
  • springboot中4级配置文件优先级
  • Python(八十九)函数的参数的内存分析
  • 西南科技大学C++程序设计实验二(类与对象一)
  • 代码随想录二刷 |哈希表 |四数之和
  • KMP算法【数据结构】
  • 测开笔记--Typescript: 文件复制到指定目录
  • 数字滚动vue-count-to
  • 扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件
  • Mysql面试题总结
  • 学习知识随笔(Django)
  • 基于element自动表格
  • Python基础语法之学习数据转换
  • 最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图
  • Kotlin中常见的List使用
  • 汽车电子 -- 车载ADAS之LCA(变道辅助系统)
  • MongoDB——golang操作(链接,CURD,聚合)
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)
  • 绿色能源守护者:光伏运维无人机
  • i已学赋能智慧教育时代的幼儿教育
  • [栈迁移+ret滑梯]gyctf_2020_borrowstack
  • PTA:用函数实现从数列中删除一个数
  • C++设计模式之工厂模式(中)——工厂模式
  • 关于el-table的二次封装及使用,支持自定义列内容