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


    写在前面

    感觉到很惭愧呀,因为居然在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系列教程,未完待续····

  • 相关阅读:
    枚举--分巧克力--蓝桥杯--二分法
    枚举笔记之哈希表 四个平方和
    枚举 蓝桥杯 四个平方数和2--暴力解法 超时
    枚举例题之平方十位数思路无代码
    LeetCode----盛最多水的容器「贪心」
    2020校招笔试
    2020校招美团点评笔试
    2020校招搜狗笔试
    2020网易校招笔试
    2020校招途家名宿开发笔试
  • 原文地址:https://www.cnblogs.com/longronglang/p/16842063.html
Copyright © 2020-2023  润新知