美文网首页软件测试程序员群集·测试人在路上
如何解决Selenium句柄、多窗口问题

如何解决Selenium句柄、多窗口问题

作者: TeacherAilie | 来源:发表于2018-10-11 20:27 被阅读4次

    有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

    一、认识多窗口

    1、这里以赶集网为例,打开赶集网http://cd.ganji.com/,点击工作,就会发现会重新打开一个窗口;

    image

    二、获取当前窗口句柄

    1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。

    2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。

    3.获取当前页面的句柄:browser.current_window_handle

    image

    4.执行结果

    image

    三、获取所有窗口句柄

    1、获取所有窗口句柄:brows.window_handles

    image

    2、执行结果

    image

    四、切换句柄

    方法一:

    1.循环判断是否与首页句柄相等;

    2.如果不等,说明是新页面的句柄;

    3.获取的新页面句柄后,可以切换到新打开的页面上;

    4.打印新页面的title,看是否切换成功。

    image

    执行结果

    image

    方法二:

    直接获取all_h这个list数据里面第二个hand的值:all_h[i]

    image

    执行结果

    image

    五、关闭新窗口,返回到原来的窗口

    1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证;

    2.验证完后切关闭新窗口;

    3.切回句柄到首页;

    4.打印当前页面的句柄,看是否切换到首页了。

    image

    执行结果

    image

    六、参考代码

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File    : handles.py
    # @Software: PyCharm
    import time
    from selenium import webdriver
    url = 'http://cd.ganji.com/'
    browser = webdriver.Firefox()
    browser.get(url)
    time.sleep(5)
    # 获取当前页面的窗口句柄
    handle = browser.current_window_handle
    print(handle)
    # 获取所有窗口句柄
    browser.find_element_by_link_text('成都招聘').click()
    handles = browser.window_handles
    print(handles)
    # 方法一:判断句柄是否与首页相等
    for i in handles:
        if i != handle:
            browser.switch_to.window(i)
            print(browser.title)
            browser.close()
            browser.switch_to.window(handle)
            print(browser.title)
    # 方法二:直接获取list列表里面的值,取值handles[i]
    # browser.switch_to.window(handles[0])
    # print(browser.title)
    # 退出
    browser.quit()
    

    好了,说了那么多,那么如何学习自动化?学习有没有资料?

    对自动化感兴趣的同学,欢迎加QQ群175317069,一起学习,相互讨论。

    群内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频),欢迎加群免费领取

    加QQ群175317069,免费领取资料

    分享给喜欢自动化,有梦想成为大牛的Tester们,希望能够帮助到你们。

    相关文章

      网友评论

        本文标题:如何解决Selenium句柄、多窗口问题

        本文链接:https://www.haomeiwen.com/subject/uxjiaftx.html