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 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:

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

selenium中的window handle相关推荐

  1. chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

    摄影:产品经理产品经理的三文鱼炒饭 在<一日一技:如何正确移除Selenium中window.navigator.webdriver的值>一文中,我们介绍了在当时能够正确从Selenium ...

  2. webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver

    摄影:产品经理春天来了~ 在<在Pyppeteer中正确隐藏window.navigator.webdriver >一文中,我们介绍了修改源代码使Pyppeteer 打开的 Chrome ...

  3. python executescript_在selenium中一些相对常用的JavaScript事件

    输入框输入: 1.找到输入框的id,然后进行输入操作 ordinal :输入框的id parameter :需要输入的内容 browser.execute_script("document. ...

  4. selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

    selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...

  5. 在Selenium中按TagName定位元素

    Selenium定位器是处理网页上的元素时的关键. 从ID,名称,类,标记名,XPath,CSS选择器等定位器列表中,可以根据需要选择其中任何一种,然后在网页上找到Web元素. 由于与tagName或 ...

  6. Selenium Java教程– Selenium中的类名定位器

    Selenium中CSS Locator是编写脚本的最重要方面之一. 如果您无法通过使用Selenium中的任何CSS定位器来定位元素,那么精通Selenium自动化将是一项艰巨的任务. 硒提供多种定 ...

  7. selenium中的三种等待方法

    在selenium中,当我们定位的元素由于网络原因还没加载出来,浏览器找不到我们要定位的元素就会报错.等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,常用的等待方法有: sleep() -- ...

  8. Selenium中的隐式等待和显式等待

    在Selenium中,"等待"在执行测试中起着重要作用.在本文中,您将学习Selenium中"隐式"和"显式"等待的各个方面. 在本文中,您 ...

  9. web自动化:8.3 selenium中如何实现浏览器的窗口滚动

    窗口滚动不属于网页的操作,属于窗口行为.实现窗口滚动,需要在selenium中发送js指令(参考:8.2 selenium中如何发送js指令) 使用场景: 1.存在懒加载的产品:不会一次性把所有东西加 ...

最新文章

  1. 字符串最易犯的错误 总是和 那个\0 有关
  2. TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。
  3. spring mvc+spring + hibernate 整合(二)
  4. CSS-合理使用z-index控制盒子视轴高度,解决z-index失效
  5. 最长等差数列_最长等差数列分析
  6. python求圆柱体的体积_Python 常见优化技巧,让你的程序溜溜的跑起来!
  7. 扩展js对象数组的OrderByAsc和OrderByDesc方法
  8. Java Web中相对路径与绝对路径的分析
  9. Java HttpServlet 详解
  10. windows server 2008 搭建文件共享服务
  11. DialogFragment初探路
  12. pmp备考资料这些都是必备的
  13. CocosCreator代码混淆加密
  14. 基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
  15. Windows Server 2012 R2 打印服务器的设置与管理-深博-专题视频课程
  16. 网易云音乐(纯CSS实战)
  17. HTML 修真录------深渊三君王
  18. ubuntu 装机必备软件
  19. C语言|计算流逝后的时间
  20. Redis核心技术笔记——Redis主从、主从从、切片集群

热门文章

  1. BZOJ.3261.最大异或和(可持久化Trie)
  2. python 的基础 学习 第四天 基础数据类型
  3. Embeded linux之地址映射
  4. Apache Hadoop 源码阅读(陆续更新)
  5. MyBatis基础入门--知识点总结
  6. Java阻塞队列的实现
  7. K210系列第一个示例程序
  8. 【C++笔记】构造函数与析构函数相关知识
  9. wordpress上传文件报错的解决方法(413 Request Entity Too Large、超过upload_max_filesize文件中定义的php.ini值)
  10. android scalex中心,androidmatrix android怎么算matrix中心点