• selenium多窗口之间切换


    1、多窗口的切换

      在自动化测试过程中有时候会出现多窗口的情况,脚本打开的窗口光标默认在第一个窗口上,此时需要定位第二个或者其他窗口就需要先切换窗口再定位(依据窗口的句柄切换,句柄是窗口唯一标识,相当于人的身份证)

      获取多窗口方法:driver.window_handles(此方法返回的是一个句柄列表)

    # 导入包
    from selenium import webdriver
    import time
    # 创建一个浏览器对象,访问百度
    driver = webdriver.Firefox()
    driver.get('http://www.baidu.com')
    
    # 打印当前句柄、标题、网址
    print('当前句柄:',driver.window_handles,'
    当前网址:',driver.current_url,'
    浏览器标题:',driver.title)
    # 定位hao123
    hao = driver.find_element_by_css_selector('a.mnav:nth-child(2)')
    # 点击
    hao.click()
    
    # 保存当前打开的网页句柄
    handles_list = driver.window_handles
    
    # 打开浏览器后自动默认光标在第一个页面,若不做切换动作,会一直默认在第一个打开的窗口上
    # 打印当前句柄、标题、网址(可见结果与上面结果相同)
    print('当前句柄:',driver.window_handles,'
    当前网址:',driver.current_url,'
    浏览器标题:',driver.title)
    
    # 切换窗口后再打印句柄等
    driver.switch_to.window(handles_list[1])
    print('当前句柄:',driver.window_handles,'
    当前网址:',driver.current_url,'
    浏览器标题:',driver.title)
    
    # 定位新窗口的元素,若成功定位,则在新窗口上,否则在旧窗口上
    try:
        # 定位新窗口的元素
        driver.find_element_by_css_selector('a.g-gc:nth-child(2)')
        print('在新窗口','
    浏览器标题:',driver.title,'
    网址:',driver.current_url)
    except:
        print('旧窗口旧旧旧旧','
    浏览器标题:',driver.title,'
    网址:',driver.current_url)
    # 关闭浏览器
    driver.quit()

    运行结果:

    当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}']
    当前网址: https://www.baidu.com/
    浏览器标题: 百度一下,你就知道
    当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}', '{10b3404c-4fc5-4014-90fe-a82a83efa39c}']
    当前网址: https://www.baidu.com/
    浏览器标题: 百度一下,你就知道
    当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}', '{10b3404c-4fc5-4014-90fe-a82a83efa39c}']
    当前网址: https://www.hao123.com/
    浏览器标题: hao123_上网从这里开始
    在新窗口
    浏览器标题: hao123_上网从这里开始
    网址: https://www.hao123.com/

    结论:脚本打开浏览器多个页面时,会自动默认光标在第一个窗口上,若需要操作其他窗口,需要依靠句柄切换到窗口再操作页面

  • 相关阅读:
    【转】Oracle 建立索引及SQL优化
    SQL Server Express LocalDB 存入中文产生乱码问题
    安装(c)npm及搭建Vue项目详解
    【转】VSCode 调试 Node.js 介绍
    【转】C#根据用户信息,生成token和cookie的方法
    远程连接 Docker 的 MySQL 服务
    mysql服务器和服务器启动程序
    一台物理机上运行多个mysql实例(Running Multiple MySQL Instances on One Machine)
    mysql5.7主从切换(master/slave switchover)
    选项文件(Option Files)/配置文件(Configuration Files)的使用
  • 原文地址:https://www.cnblogs.com/will-wu/p/13466043.html
Copyright © 2020-2023  润新知