Selenium 4 窗口处理

这篇具有很好参考价值的文章主要介绍了Selenium 4 窗口处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium 4 窗口处理

在Selenium自动化测试中,窗口处理是一个重要的技术。随着Selenium 4的发布,窗口处理功能得到了大幅改进和增强。本文将介绍如何使用Selenium 4来处理窗口操作。

获取当前窗口句柄

要获取当前窗口的句柄(handle),可以使用driver.current_window_handle方法。示例代码如下:

current_handle = driver.current_window_handle

示例

from selenium import webdriver

# 创建 ChromeDriver 实例
driver = webdriver.Chrome()

# 打开 CSDN 网站
driver.get("https://www.csdn.net/")

# 获取当前窗口句柄
current_handle = driver.current_window_handle

# 输出当前窗口句柄
print("当前窗口句柄:", current_handle)

# 在这里可以执行其他操作,例如点击链接、填写表单等

# 关闭浏览器窗口
driver.close()

# 退出 ChromeDriver
driver.quit()

输出结果

当前窗口句柄: 12AA3B8EAE3E20CAF9A97C1662A9AC9F

注解

浏览器当前窗口句柄(handle)是一个由数字和字母组成的字符串,用于在操作系统中唯一标识一个窗口实例。这种标识方式的原因在于计算机底层的内存管理和操作系统设计。

  1. 内存地址唯一标识性: 计算机操作系统为每个进程和应用程序分配一块内存地址空间,用于存储其数据和执行代码。窗口作为应用程序的一部分,也会被分配一块内存空间。这些内存地址在计算机内部以二进制数字表示,但在可读性和易用性方面不如十六进制(包括字母和数字的组合)表示。
  2. 十六进制的可读性: 将内存地址表示为十六进制字符串(由数字和字母组成)更容易被人类理解和处理。相比起纯数字的内存地址,十六进制更加紧凑且易于区分,而且可以在日志和调试信息中方便地使用。
  3. 操作系统跨平台性: 使用数字和字母的组合作为窗口句柄可以保证在不同操作系统和硬件体系结构下都能够使用相同的标识方式。这种跨平台性对于开发者和自动化测试工具(例如 Selenium)来说是非常有价值的,因为它们可以在不同环境中保持一致的代码。

总之,浏览器当前窗口句柄的数字和字母组合是一种为了在计算机系统中唯一标识窗口实例而采用的标识方式,兼顾了内部表示的需要和人类可读性的要求。

获取所有窗口句柄

要获取所有打开的窗口的句柄,可以使用driver.window_handles方法。示例代码如下:

all_handles = driver.window_handles

示例

from selenium import webdriver

# 创建 ChromeDriver 实例
driver = webdriver.Chrome()

# 打开第一个窗口并访问 CSDN 网站
driver.get("https://www.csdn.net/")

# 在第一个窗口打开新的标签页
driver.execute_script("window.open('', '_blank');")

# 获取所有窗口句柄
all_handles = driver.window_handles

# 遍历所有窗口句柄并输出
for handle in all_handles:
    print("窗口句柄:", handle)

# 在第二个标签页中打开 CSDN 博客首页
driver.switch_to.window(all_handles[1])
driver.get("https://blog.csdn.net/")

# 在这里可以执行其他操作,例如在不同标签页中进行切换、填写表单等

# 关闭浏览器窗口
driver.close()

# 退出 ChromeDriver
driver.quit()

切换到指定窗口

要切换到指定的窗口,可以使用driver.switch_to.window(handle)方法,其中handle是要切换到的窗口句柄。示例代码如下:

target_handle = all_handles[1]  # 假设要切换到第二个窗口
driver.switch_to.window(target_handle)

示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 创建 ChromeDriver 实例
driver = webdriver.Chrome()

# 打开第一个网站
driver.get("https://www.baidu.com/")

# 等待第一个网站加载完成
wait = WebDriverWait(driver, 20)
wait.until(EC.title_contains("百度"))

# 在第一个窗口打开新的标签页(第二个网站)
driver.execute_script("window.open('https://juejin.cn/', '_blank');")

# 在第一个窗口打开新的标签页(第三个网站)
driver.execute_script("window.open('https://www.csdn.net/', '_blank');")

# 停顿10秒
time.sleep(10)

# 获取所有窗口句柄
all_handles = driver.window_handles

# 切换到第三个窗口
driver.switch_to.window(all_handles[2])

wait.until(EC.title_contains("CSDN"))  # 等待第三个网站加载完成

# 切换回第二个窗口
driver.switch_to.window(all_handles[1])
wait.until(EC.title_contains("掘金"))  # 等待第二个网站加载完成

# 打印第二个窗口的句柄和网页标题
second_window_handle = all_handles[1]
second_window_title = driver.title
print("第二个窗口的句柄:", second_window_handle)
print("第二个窗口的网页标题:", second_window_title)



# 关闭浏览器窗口
driver.quit()

代码逻辑流程

  1. 导入所需的 Selenium 模块和类。

  2. 创建 ChromeDriver 实例。

  3. 打开第一个网站(百度)并等待加载完成。

  4. 在第一个窗口打开新的标签页(第二个网站 - 掘金)。

  5. 在第一个窗口打开新的标签页(第三个网站 - CSDN)。

  6. 停顿10秒,确保新打开的标签页有足够的时间加载内容。

    解释一下为什么这里要强制等待10秒:因为已经打开了三个网站,但是在测试时可能会受到网速影响,网页加载不完全,因为状态还是在等待加载中,没有完全加载完毕还是会继续执行后面的代码,
    从而报错发生异常
    所以还是要加上强制等待,利于观察到第三个完整加载完毕然后切换到第二个窗口的整个过程
    
  7. 获取所有窗口句柄。

  8. 切换到第三个窗口(CSDN网站)并等待加载完成。

  9. 切换回第二个窗口(掘金网站)并等待加载完成。

  10. 打印第二个窗口的句柄和网页标题。

  11. 关闭浏览器窗口。

总的来说,这段代码的目标是在一个浏览器窗口中打开百度、掘金和CSDN三个网站,切换窗口并等待页面加载完成,然后打印出第二个窗口的句柄和网页标题。代码中使用了 WebDriver 的等待机制(WebDriverWait)来确保页面在必要时得以完全加载。最后,浏览器窗口会被关闭。

关闭当前窗口

要关闭当前窗口,可以使用driver.close()方法。示例代码如下:

driver.close()

示例

from selenium import webdriver

# 初始化浏览器驱动
driver = webdriver.Chrome()
import time
# 打开百度网站
driver.get("https://www.baidu.com/")

# 在新窗口中打开 CSDN 网站
driver.execute_script("window.open('https://www.csdn.net/', '_blank')")

# 获取所有窗口句柄
window_handles = driver.window_handles

# 切换到新窗口(CSDN 窗口)
driver.switch_to.window(window_handles[1])
time.sleep(5)
# 关闭 CSDN 窗口
driver.close()

# 切换回原始窗口(百度窗口)
driver.switch_to.window(window_handles[0])
# 获取并打印当前网页标题
print("当前网页标题:", driver.title)
time.sleep(5)

# 关闭浏览器
driver.quit()

在新窗口中打开链接

要在新窗口中打开链接,可以使用driver.execute_script方法配合JavaScript代码来实现。示例代码如下:

# 点击一个链接,新窗口会打开
link_element = driver.find_element(By.XPATH, "//a[contains(text(),'Open Link')]")
driver.execute_script("window.open(arguments[0], '_blank')", link_element.get_attribute("href"))

# 切换到新窗口
new_handle = driver.window_handles[-1]
driver.switch_to.window(new_handle)

示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 初始化浏览器驱动
driver = webdriver.Chrome()

# 打开百度网站
driver.get("https://www.baidu.com")

# 点击链接,新窗口会打开
link_element = driver.find_element(By.LINK_TEXT, '新闻')
driver.execute_script("window.open(arguments[0], '_blank')", link_element.get_attribute("href"))

# 切换到新窗口
new_handle = driver.window_handles[-1]
driver.switch_to.window(new_handle)
sleep(5)
# 在新窗口进行操作
# ...

# 关闭新窗口
driver.close()

# 切换回原始窗口
original_handle = driver.window_handles[0]
driver.switch_to.window(original_handle)

# 获取并打印当前网页标题
print("当前网页标题:", driver.title)

sleep(5)

# 关闭浏览器
driver.quit()

这些是Selenium 4中处理窗口的常用方法。通过这些方法,可以轻松地控制和操作窗口,以实现自动化测试中的各种场景。文章来源地址https://www.toymoban.com/news/detail-856779.html

到了这里,关于Selenium 4 窗口处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium —— 网页frame与多窗口处理!

    点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就 得先切换窗⼜了。 获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵 活操作了 先获取当前窗口的句柄driver.current_window_handle 再获取所有的窗口句柄driver.windows_handles 然后

    2024年02月05日
    浏览(46)
  • selenium并发处理多个窗口线程/进程任务

    这里以百度搜索为例,通过不同的浏览器来启动不同的线程。

    2024年01月20日
    浏览(42)
  • Python获取与设置Windows当前窗口

    在Python做屏幕自动化的过程中,难免需要涉及对窗口的操作,理论上都可以用鼠标键盘+屏幕识别(对人的完全模拟)来实现,但具体做起来实在有点麻烦。如果不考虑跨平台的兼容性,那么引入win32gui库,可以省很多事。 获取当前窗口 查找窗口 设置当前窗口

    2023年04月08日
    浏览(38)
  • 软件测试/测试开发丨Selenium 网页frame与多窗口处理

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27048 点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就 得先切换窗⼜了。 获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵 活操作了 先获

    2024年02月10日
    浏览(49)
  • C# Windows API应用:获取桌面所有窗口句柄的方法

    C# Windows API应用:获取桌面所有窗口句柄的方法 在 C# 的 Windows 应用程序开发中,我们常常需要获取桌面上所有窗口的句柄,以便进行一些窗口管理或者后续操作。本文将介绍一种利用 Windows API 获取桌面所有窗口句柄的方法,并提供相应的源代码和描述。 在开始之前,我们需

    2024年02月05日
    浏览(52)
  • selenium+python切换浏览器窗口

    selenium在当前浏览器页面打开了新的窗口,此时如果要聚焦到新开的浏览器窗口,就需要切换到新的窗口,切换窗口的操作,具体selenium+python示例如下:

    2024年02月15日
    浏览(45)
  • selenium click点击 跳转新页面转句柄

    1.click点击 2.跳转到新页面,selenium获取内容还停留在第一页,需要转句柄 3.截图不完整--因为 browser.switch_to.window 会缩小窗口 4.iframe在转句柄后,关闭新页面还有重新进入iframe 遇见一个a标签没有url的网站,然后用click点击进行跳转,跳转后又selenium还停留在第一个页面,查找原

    2024年02月13日
    浏览(50)
  • selenium+python切换浏览器窗口--详细讲解

    在浏览器页面打开窗口后,有时点击按钮会打开新的页面,我们需要切换到新的窗口才能去定位操作,不然无法操作,切换窗口代码如下

    2024年02月14日
    浏览(47)
  • python-selenium控制浏览器多开窗口

    1、视频展示-多开5个百度页面 目录结构 只要在当前目录下放上自己所在的谷歌驱动器:谷歌驱动器如何下载,请参考博客:请点我 奉上代码

    2024年02月16日
    浏览(61)
  • python自动化测试selenium(四)切换页面、切换窗口

    一、切换页面 如果定位元素失败(抛出NoSuchElementException),调查网页源代码,发现这个元素位于一个frame或iframe标记的元素下的子网页(html标记)里,那么此时需要切换Frame。 切换方法一:使用frame或iframe标记的元素的id或name属性值来作为切换条件 switch_to.frame() 将当前定位

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包