• 自动化测试基础篇--Selenium多窗口、句柄问题


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

    一、认识多窗口

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

    二、获取当前窗口句柄

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

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

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

    4.执行结果

    三、获取所有窗口句柄

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

    2、执行结果

    四、切换句柄

    方法一:

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

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

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

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

    执行结果

    方法二:

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

    执行结果

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

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

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

    3.切回句柄到首页;

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

    执行结果

    六、参考代码

    复制代码
    #!/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()
     
  • 相关阅读:
    PE感染学习
    寻找复活节彩蛋egg huting 学习
    unicode exp学习
    zlib的安装与使用
    PDF 学习
    MW6MaxiCode ACX溢出
    Blog 迁移啦
    Malloc Maleficarum复盘
    [winafl]这几天的折腾
    [pwnable.kr]--alloca
  • 原文地址:https://www.cnblogs.com/chenlimei/p/10484231.html
Copyright © 2020-2023  润新知