selenium中的window handle

栏目: 编程工具 · 发布时间: 5年前

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,因为它不会自动切换。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

企业应用架构模式

企业应用架构模式

Martin Fowler / 人民邮电出版社 / 2009 / 79.00元

随着信息技术的广泛应用,系统需要处理的数据量越来越大,企业级软件开发已经渐成主流,而开发人员面临的困难与挑战也是显而易见的。更糟糕的是,这一领域的资料一直非常缺乏。 本书是软件开发大师Martin Fowler的代表作,采用模式的形式系统总结了业界多年积累的经验,被称为“企业级应用开发领域的圣经”,出版以来一直畅销不衰,至今仍然无可替代。作 者在精彩地阐述了企业应用开发和设计中的核心原则基础......一起来看看 《企业应用架构模式》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具