zoukankan      html  css  js  c++  java
  • 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/

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

  • 相关阅读:
    01 Vue的起步和插值表达式
    06 扩展的对象的功能
    05 解构赋值
    04 函数之扩展运算符、箭头函数
    03 函数之默认值、剩余参数
    02 模板字符串
    01 let和const命令
    28 Bootstrap排版
    27 Bootstrap的列偏移
    26 Bootstrap的栅格系统
  • 原文地址:https://www.cnblogs.com/will-wu/p/13466043.html
Copyright © 2011-2022 走看看