selenium中的window handle
webdriver之window handle
实例化一个webdriver后相当于开启一个浏览器进程,
一个实例化的driver可以有多个window窗口,在浏览器中显示为多个标签,
比如点击一个链接 网易,会打开一个新的窗口 webdriver类中的所有方法有一个前提条件是:都作用于某一window handle window handle是惰性的,不会自动切换,如果打开了一个新的窗口,想在新窗口上获取某一元素,需要先手动切换window handle,driver.switch_to.window(xxx_handle) 用driver.window_handles可以获取所有窗口句柄 窗口句柄是浏览器拥有的,元素没有窗口句柄window handle示例
`import timefrom selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdef 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 handleprint(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:
- driver的current handle也是惰性的,如果current window handle被关闭,那么current_handle这个值就取不到了,会报异常,需要用手动调用driver.switch_to.window 来显示切换。
- 如果元素定位失败,要检查一下是不是打开了新的窗口,如果是,则需要切换window handle,因为它不会自动切换。
selenium中的window handle相关推荐
- chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver
摄影:产品经理产品经理的三文鱼炒饭 在<一日一技:如何正确移除Selenium中window.navigator.webdriver的值>一文中,我们介绍了在当时能够正确从Selenium ...
- webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver
摄影:产品经理春天来了~ 在<在Pyppeteer中正确隐藏window.navigator.webdriver >一文中,我们介绍了修改源代码使Pyppeteer 打开的 Chrome ...
- python executescript_在selenium中一些相对常用的JavaScript事件
输入框输入: 1.找到输入框的id,然后进行输入操作 ordinal :输入框的id parameter :需要输入的内容 browser.execute_script("document. ...
- selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素
selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...
- 在Selenium中按TagName定位元素
Selenium定位器是处理网页上的元素时的关键. 从ID,名称,类,标记名,XPath,CSS选择器等定位器列表中,可以根据需要选择其中任何一种,然后在网页上找到Web元素. 由于与tagName或 ...
- Selenium Java教程– Selenium中的类名定位器
Selenium中CSS Locator是编写脚本的最重要方面之一. 如果您无法通过使用Selenium中的任何CSS定位器来定位元素,那么精通Selenium自动化将是一项艰巨的任务. 硒提供多种定 ...
- selenium中的三种等待方法
在selenium中,当我们定位的元素由于网络原因还没加载出来,浏览器找不到我们要定位的元素就会报错.等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,常用的等待方法有: sleep() -- ...
- Selenium中的隐式等待和显式等待
在Selenium中,"等待"在执行测试中起着重要作用.在本文中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在本文中,您 ...
- web自动化:8.3 selenium中如何实现浏览器的窗口滚动
窗口滚动不属于网页的操作,属于窗口行为.实现窗口滚动,需要在selenium中发送js指令(参考:8.2 selenium中如何发送js指令) 使用场景: 1.存在懒加载的产品:不会一次性把所有东西加 ...
最新文章
- 字符串最易犯的错误 总是和 那个\0 有关
- TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。
- spring mvc+spring + hibernate 整合(二)
- CSS-合理使用z-index控制盒子视轴高度,解决z-index失效
- 最长等差数列_最长等差数列分析
- python求圆柱体的体积_Python 常见优化技巧,让你的程序溜溜的跑起来!
- 扩展js对象数组的OrderByAsc和OrderByDesc方法
- Java Web中相对路径与绝对路径的分析
- Java HttpServlet 详解
- windows server 2008 搭建文件共享服务
- DialogFragment初探路
- pmp备考资料这些都是必备的
- CocosCreator代码混淆加密
- 基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
- Windows Server 2012 R2 打印服务器的设置与管理-深博-专题视频课程
- 网易云音乐(纯CSS实战)
- HTML 修真录------深渊三君王
- ubuntu 装机必备软件
- C语言|计算流逝后的时间
- Redis核心技术笔记——Redis主从、主从从、切片集群
热门文章
- BZOJ.3261.最大异或和(可持久化Trie)
- python 的基础 学习 第四天 基础数据类型
- Embeded linux之地址映射
- Apache Hadoop 源码阅读(陆续更新)
- MyBatis基础入门--知识点总结
- Java阻塞队列的实现
- K210系列第一个示例程序
- 【C++笔记】构造函数与析构函数相关知识
- wordpress上传文件报错的解决方法(413 Request Entity Too Large、超过upload_max_filesize文件中定义的php.ini值)
- android scalex中心,androidmatrix android怎么算matrix中心点