首页 > 编程语言 >Selenium4+Python3系列(五) - 多窗口处理之句柄切换

Selenium4+Python3系列(五) - 多窗口处理之句柄切换

时间:2022-10-30 20:02:32浏览次数:54  
标签:handle 句柄 多窗口 driver handles Selenium4 window print

写在前面

感觉到很惭愧呀,因为居然在Selenium+Java系列中没有写过多窗口处理及句柄切换的文章,不过也无妨,不管什么语言,其思路是一样的,下面我们来演示,使用python语言来实现窗口句柄的切换。

什么是窗口句柄

可能有的同学会问了,到底啥是窗口,什么又是多窗口,句柄到底是啥玩楞?

那么,他到底长啥样?如下图所示:

怎么处理多窗口句柄

如何获取窗口句柄

语法:

driver.current_window_handle

1、模拟场景

打开搜狗首页,输入淘宝进入久曲健 博客园,并输出页面标题

2、使用具柄判断切换

就是通过窗口句柄判断切换,示例代码入下:

for window_handle in window_handles:
    if window_handle != old_Window:
        driver.switch_to.window(window_handle)
        print(driver.title)
    else:
        driver.close()

3、使用URL判断切换

就是根据跳转的当前URL切换,示例代码如下:

for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        print(driver.title)
    else:
        driver.close()

4、通过下标切换

window_handles = driver.window_handles返回的是一个集合,所以自然用下标去切换,简单点说就是,只要找到想要切换的窗口下标即可实现切换,多个窗口不建议使用此方法。

示例代码如下:

driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title)

5、关闭新窗口句柄,切回原来主页

笔者反复试验发现,用句柄删除不好用,还是这个url靠谱,示例代码如下:

for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        driver.close()
    else:
        print(driver.title)

所有汇总代码如下:

# -*- coding: utf-8 -*-
"""
@Time : 2022/10/26 14:12
@Auth : 软件测试君
@File :switch_window.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)
多窗口处理之句柄切换

"""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

'''
初始化操作
'''
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))


def init():
    # 最大化操作
    driver.maximize_window()
    driver.set_script_timeout(60)
    # 智能等待找到元素后立即继续执行,全局生效
    driver.implicitly_wait(60)
    driver.set_page_load_timeout(60)


init()

driver.get("https://www.sogou.com/")
driver.find_element(By.ID, "query").clear()
driver.find_element(By.ID, "query").send_keys("久曲健 博客园")
driver.find_element(By.ID, "stb").click()
time.sleep(2)
# 获取当前页面窗口句柄(每个句柄的表示都是唯一的)
old_Window = driver.current_window_handle
print('当前窗口句柄为:{0}'.format(old_Window))
driver.find_element(By.LINK_TEXT, "久曲健 - 博客园").click()
time.sleep(2)
window_handles = driver.window_handles
print(window_handles)
'''
### 方法一:
for window_handle in window_handles:
    if window_handle != old_Window:
        driver.switch_to.window(window_handle)
        print(driver.title)
    else:
        driver.close()

'''
'''
### 方法二:
driver.close()
driver.switch_to.window(window_handles[1])
print(driver.title)

'''
'''
### 方法三:
for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        print(driver.title)
    else:
        driver.close()
'''

# 关闭新窗口句柄,切回原来主页
for window_handle in window_handles:
    driver.switch_to.window(window_handle)
    newUrl = driver.current_url
    if 'cnblogs' in newUrl:
        driver.close()
    else:
        print(driver.title)

driver.quit()

写在最后

最近心情还是很不好,恐慌的不是单身可怕,而是年纪越来越大,也不知道现在的女孩都在想什么,好想结婚呀!

感兴趣的同学,请自己去尝试,关于Selenium4.0+Python3系列教程,未完待续····

标签:handle,句柄,多窗口,driver,handles,Selenium4,window,print
From: https://www.cnblogs.com/longronglang/p/16842063.html

相关文章

  • 银行排队问题之单队列多窗口服务
    假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选......
  • Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
    一、写在前面上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏、转发!二、元素的状态在操作元素之前,我们需要了解元素的常见状态。......
  • Selenium4Web自动化11-分布式测试Grid入门到实战
    一、Grid介绍要在多台计算机上并行运行测试吗?那么,Grid正是为你准备的.SeleniumGrid允许通过路由命令在远程机器上执行WebDriver脚本,这些命令由客户机发送到远程浏览......
  • Selenium4Web自动化7-文件上传和日期控件
    一、文件上传操作-input标签文件选择当input元素为文件类型时,文件上传对话框可以使用Selenium处理.文件上传的代码实现如下fromseleniumimportwebdriverfromwebd......
  • selenium4-获取页面元素相关信息
    本小节我们简单说下如何使用selenium4-获取页面元素相关信息,以及获取页面元素的相关信息后可以做什么。获取页面元素的主要目的:(1)执行完步骤后进行断言;(2)获取前一步骤的响应......
  • Javascript--变量内函数句柄
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><p>创建和使用对象方法。</p><p>对象方法作为一个函数定义存储......
  • 查询系统所有句柄(可以筛选进程打开的全部句柄)
    作者:狂客,原创文章.转载请注明来源,侵权必究#ifndefUNICODE#defineUNICODE#endif#include<windows.h>#include<stdio.h>#defineNT_SUCCESS(x)((x)>=0)#defineSTAT......
  • selenium4-定位组元素
    总体思路:find_elements()该方法将所有定位到的元素放到一个列表中,再通过列表的下标定位到具体元素。例1、使用tagname定位到百度搜索框,并输入selenium关键字service......
  • selenium4-定位单个页面元素
    在操作各项页面元素之前,先介绍下如何通过Python代码来找到这些元素。WebDriver提供了18种元素定位方法,共分为两类(定位当个元素、定位组元素),本节先举例详细介绍下selenium4-......
  • Selenium4Web自动化4-鼠标键盘模拟操作
    一、Web元素交互参考官方文档:https://www.selenium.dev/zh-cn/documentation/webdriver/elements/interactions/用于操纵表单的高级指令集.仅有五种基本命令可用于元......