博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium中的window handle
阅读量:6609 次
发布时间:2019-06-24

本文共 2237 字,大约阅读时间需要 7 分钟。

webdriver之window handle

  1. 实例化一个webdriver后相当于开启一个浏览器进程,
    一个实例化的driver可以有多个window窗口,在浏览器中显示为多个标签,
    比如点击一个链接 网易,会打开一个新的窗口
  2. webdriver类中的所有方法有一个前提条件是:都作用于某一window handle
  3. window handle是惰性的,不会自动切换,如果打开了一个新的窗口,想在新窗口上获取某一元素,需要先手动切换window handle,driver.switch_to.window(xxx_handle)
  4. 用driver.window_handles可以获取所有窗口句柄
  5. 窗口句柄是浏览器拥有的,元素没有窗口句柄

window handle示例

`import time            from selenium import webdriver            from selenium.webdriver.common.action_chains import ActionChains            def demo():                driver = webdriver.Chrome()                driver.implicitly_wait(10)                driver.get('[http://baidu.com](http://baidu.com)')                print(driver.window_handles) #打开百度后第一次打印窗口句柄                bd_kw = driver.find_element_by_css_selector('#kw')                bd_sb = driver.find_element_by_css_selector('#su')                ac = ActionChains(driver)                ac.send_keys_to_element(bd_kw, 'python').click(bd_sb).perform()                py = driver.find_element_by_xpath('//*[@id="2"]/h3/a')                py.click() #在百度中搜索python后打开一个新的窗口                print(driver.window_handles) #第二次打印窗口句柄                time.sleep(5)                driver.close() #关闭driver的当前句柄,可以用current_handle查看                print(driver.window_handles) #第三次打印窗口句柄                driver.switch_to.window(driver.window_handles[-1]) #切换window handle                print(driver.current_window_handle) #打印current_window_handle,不切换会报异常,因为之前的window已经被我们关闭了                time.sleep(5)                driver.quit()            if __name__ == '__main__':                demo()            ----------------------            >>>['CDwindow-3711170FE14EB6A64A8D9A51249D8EF6'] #只打开了百度首页,所以只有一个            >>>['CDwindow-3711170FE14EB6A64A8D9A51249D8EF6', 'CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1'] #打开了百度首页和某一个搜索出来的页面,新的页面在新的窗口中,所以有两个            >>>['CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1'] #没切换handle,关闭了第一个window,所以看到,原列表中的第一个元素被删除了,只有新的窗口handle保留下来了            >>>CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1 #切换了handle,并打印出current_window_handle`

tips:

  1. driver的current handle也是惰性的,如果current window handle被关闭,那么current_handle这个值就取不到了,会报异常,需要用手动调用driver.switch_to.window 来显示切换。
  2. 如果元素定位失败,要检查一下是不是打开了新的窗口,如果是,则需要切换window handle,因为它不会自动切换。

转载地址:http://vksso.baihongyu.com/

你可能感兴趣的文章
Android 反编译利器,jadx 的高级技巧
查看>>
Android官方架构组件LiveData: 观察者模式领域二三事
查看>>
[Android组件化]组件化数据分享
查看>>
你必须知道的HTTP基本概念
查看>>
当下拉列表数据过大时,该如何应对?
查看>>
使用OpenGrok搭建 可搜索可跳转的源码 阅读网站
查看>>
Android ContentProvider调用报错"Bad call:..."及相关Binder权限问题分析
查看>>
Linux-正则表达式
查看>>
基本shell脚本的编辑及变量
查看>>
加密和解密 tar
查看>>
VMware、Workstation 使用
查看>>
将datatable 保存为 Excel文件(高效率版本)
查看>>
C/C++五大内存分区(转)
查看>>
springmvc_1(hello world)
查看>>
0.随笔——读后感
查看>>
CentOS 6.5下PXE+Kickstart无人值守安装操作系统
查看>>
xtrapivotcontrol 控件用法及相关属性
查看>>
Shell脚本 常用命令总结 二
查看>>
冰球游戏大概的模块
查看>>
JS模拟select下拉菜单
查看>>