多窗口切换——selenium

  1. 获取窗口句柄(以Python + Selenium为例)
    • current_window_handle方法
      • 用于获取当前窗口的句柄。句柄是一个标识符,用于唯一标识一个窗口。
      • 示例代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
current_window_handle = driver.current_window_handle
print("当前窗口句柄:", current_window_handle)
  • window_handles方法
    • 用于获取所有打开窗口的句柄,返回一个句柄列表。这个列表在需要切换窗口时非常有用。
    • 示例代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
print("所有窗口句柄:", window_handles)
  1. 切换窗口(以Python + Selenium为例)
    • 通过句柄切换窗口
      • 当有多个窗口句柄时,可以通过指定句柄来切换窗口。
      • 示例代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
# 切换到新打开的窗口
driver.switch_to.window(window_handles[1])
  • 在上述代码中,window_handles方法获取了所有窗口的句柄,由于新打开的窗口句柄在列表中的第二个位置(索引为1,第一个是原始窗口),所以通过driver.switch_to.window(window_handles[1])切换到新窗口。
  1. 切换回原始窗口(以Python + Selenium为例)
    • 示例代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
original_window_handle = driver.current_window_handle
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
# 切换到新打开的窗口
driver.switch_to.window(window_handles[1])
# 切换回原始窗口
driver.switch_to.window(original_window_handle)
  • 这里首先保存了原始窗口的句柄,在切换到新窗口并进行相关操作后,通过driver.switch_to.window(original_window_handle)切换回原始窗口。
  1. 等待新窗口打开(结合WebDriverWait
    • 在实际操作中,新窗口的打开可能需要一些时间。可以使用WebDriverWait来等待新窗口打开,确保在切换窗口之前窗口已经成功打开。
    • 示例代码(使用WebDriverWait等待新窗口打开并切换)
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 记录原始窗口句柄
original_window_handle = driver.current_window_handle
# 点击打开新窗口的链接
driver.find_element_by_link_text("打开新窗口链接").click()
# 等待新窗口打开
new_window_handle = WebDriverWait(driver, 10).until(
    EC.window_opens(lambda: len(driver.window_handles) > 1)
)
# 切换到新窗口
driver.switch_to.window(new_window_handle)
  • 在这个示例中,WebDriverWait等待条件是新窗口打开,即window_opens条件,通过一个匿名函数lambda: len(driver.window_handles) > 1来判断窗口数量是否大于1。当条件满足时,until方法返回新窗口的句柄,然后就可以切换到新窗口进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件著作权申请教程(超详细)(2024新版)软著申请

目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】的身份。中…

HTTPS详解:加密机制、工作流程、CA证书与中间人攻击防护

文章目录 1. 前言1.1. 什么是HTTPS1.2. 什么是加密1.3. 常见的加密方式① 对称加密② 非对称加密 1.4. 数据摘要(数据指纹)① 实例:软件分发中的数据摘要 1.5.1 一个小问题 2. HTTPS 工作流程探究2.1. 方案1 - 只使用对称加密2.2. 方案2 - 只…

机器学习基础04

目录 1.朴素贝叶斯-分类 1.1贝叶斯分类理论 1.2条件概率 1.3全概率公式 1.4贝叶斯推断 1.5朴素贝叶斯推断 1.6拉普拉斯平滑系数 1.7API 2.决策树-分类 2.1决策树 2.2基于信息增益的决策树建立 2.2.1信息熵 2.2.2信息增益 2.2.3信息增益决策树建立步骤 2.3基于基…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN(基础概念) 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

ospf排错学习

排错步骤是 1、查看ospf的router-id是否相同 2、错误配置ospf发布路由 //典型错误 3、错误的ospf区域号 4、错误的被动接口设置 //接口设置为被动接口,不学习了 排错思路(思科命令&#xff09…

AR眼镜方案_AR智能眼镜阵列/衍射光波导显示方案

在当今AR智能眼镜的发展中,显示和光学组件成为了技术攻坚的主要领域。由于这些组件的高制造难度和成本,其光学显示模块在整个设备的成本中约占40%。 采用光波导技术的AR眼镜显示方案,核心结构通常由光机、波导和耦合器组成。光机内的微型显示…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API (1)初始化互斥量 (2)销毁互斥量 (3)互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子,每个篮子装的水果种类相同,如果从 0 开始摘,则只能摘 0 和 1 两个种类 ; 因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类…

Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具,能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台,它能支持物理引擎,允许机器人在虚拟环境中模拟和测试。结合ROS,它能提供一个完整的…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展,传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式,即商家不需要自己储备商品库存,而是将订单直接转给供应商,由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

5G CPE:为什么活动会场与商铺的网络成为最新选择

在快节奏的现代社会中,无论是举办一场盛大的活动还是经营一家繁忙的商铺,稳定的网络连接都是不可或缺的基石。然而,面对复杂的布线难题或高昂的商业宽带费用,许多场所往往陷入两难境地。幸运的是,5G CPE(Cu…

python怎么安装numpy

1、在python官网https://pypi.python.org/pypi/numpy中找到安装的python版本对应的numpy版本。 例如: python版本是: 下载的对应numpy版本是: 2、将numpy下载到python的安装目录下的scripts文件夹中; 3、然后在cmd中执行以下命…

Qt主线程把数据发给子线程,主线程会阻塞吗

演示&#xff1a; #include <QCoreApplication> #include <QThread> #include <QObject> #include <QDebug>// 子线程类 class Worker : public QObject {Q_OBJECT public slots:void processData(int data) {qDebug() << "Processing dat…

OSG开发笔记(三十一):OSG中LOD层次细节模型介绍和使用

​若该文为原创文章&#xff0c;未经允许不得转载 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/143697554 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 长沙红胖子Qt…

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试&#xff0c;它会优先读取 .env 配置&#xff0c;然后再读取 database.php 的配置&#xff1b; 如果禁用了 .env 配置&#xff0c;则会读取数据库连接的默认配置&#xff1a; # .env文件&#xff0c;部署服务器&#xff0c;请禁用我 我们可以…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…