ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

selenium 多窗口切换

2021-12-17 19:04:02  阅读:158  来源: 互联网

标签:窗口 selenium 多窗口 driver handles window 切换 句柄 handle


在做web自动化的时候,经常会遇到点击一个元素弹出了一个新的窗口,我们需要进入到新的窗口中,进行自动化操作,那么我们如何跳转到新的窗口上呢? 

切换新窗口

在浏览器上遇到新的窗口打开的时候,因为脚本不知道我们想要跳转到那个窗口上,先获取全部窗口信息,然后进行选择窗口进行跳转,这里窗口是通过句柄的方法进行识别的。这里就用到了selenium中的3个方法,获取当前窗口句柄的方法,和获取全部窗窗口句柄的方法,以及跳转到窗口句柄的方法

获取当前窗口句柄

通过方法: current_window_handle 

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("博客园")
driver.find_element_by_id("su").click()
handle = driver.current_window_handle
print(handle)
CDwindow-C439E20E72721D85DBAD47EEF83BD6CD

 

 获取全部窗口句柄

通过方法: window_handles 

执行完结果为列表显示内容,最后一个弹出框为最后一个。

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("博客园")
driver.find_element_by_id("su").click()
handle = driver.current_window_handle
print(handle)
time.sleep(2)
driver.find_element_by_xpath("//*[contains(text(),'开发者的网上家园')]").click()
time.sleep(2)
handles = driver.window_handles
print(handles)

 ['CDwindow-0EFAD51458B9F6FEE8A46AA3DB578317', 'CDwindow-3197BFABC1F3E841CB3F2E65E388AB4E']

 

 

跳转到对应的窗口

如何查看窗口的句柄已经了解到了,如何跳转到对应的句柄上呢?我们可以通过方法 switch_to.window() 

switch_to_window()和前面说的iframe方法一样,官方不推荐使用,我们可以通过switch_to.window()方法来操作

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("博客园")
driver.find_element_by_id("su").click()
#打印当前窗口的句柄
handle = driver.current_window_handle
print(handle)
time.sleep(2)
driver.find_element_by_xpath("//*[contains(text(),'开发者的网上家园')]").click()
time.sleep(2)
# 打印当前全部窗口的句柄
handles = driver.window_handles
print(handles)
# 跳转到对应的窗口
driver.switch_to.window(handles[-1])
#打印当前窗口的句柄
ha = driver.current_window_handle
print(ha)
print(driver.title)
博客园 - 开发者的网上家园

 

 

通过显示等待判断窗口是否出现

我们可以通过显示等待的方法加上判断窗口是否出现的方法进行来减少我们的运行时间和避免运行错误。

判断窗口出现方法前面有 new_window_is_opened() 写过这里需要穿的参数是窗口的数量,通过判断窗口是否增加

源码:

复制代码
class new_window_is_opened(object):
    """ An expectation that a new window will be opened and have the number of
    windows handles increase"""

    def __init__(self, current_handles):
        self.current_handles = current_handles

    def __call__(self, driver):
        return len(driver.window_handles) > len(self.current_handles)
复制代码

 

 

 

小伙伴们,看完后记得去自己

标签:窗口,selenium,多窗口,driver,handles,window,切换,句柄,handle
来源: https://www.cnblogs.com/superbaby11/p/15703459.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有