• python与selenium自动化基础-多窗口切换、多表单切换


    多窗口切换

    方法:
    (1)driver.current_window_handle   获取当前窗口句柄
    (2)driver.window_handles      获取所有窗口句柄
    (3)driver.switch_to.window(handle)   切换指定句柄窗口
    (4)driver.close()    关闭当前的句柄
    (5)driver.quit()    关闭浏览器

    例:

    from selenium import webdriver
    import time
    d = webdriver.Firefox()
    d.get('https://www.baidu.com/')
    d.find_element_by_id('kw').clear()
    d.find_element_by_id('kw').send_keys("慕课网")
    d.find_element_by_id('su').click()
    time.sleep(10)
    d.find_element_by_partial_link_text('程序员的梦工厂').click()
    time.sleep(10)
    print(d.window_handles)
    d.switch_to.window(d.window_handles[1])
    print(d.current_window_handle)
    print(d.current_url)
    d.close() 
    d.quit()

    输出:

    ['6442450945', '6442450949']
    6442450949
    https://www.imooc.com/

    多表单切换

    在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
    1)什么是多表单?
        实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
    2)处理方法        
        直接使用id值切换进表单
            driver.switch_to.frame(value)
        定位到表单元素,再切换进入
            el = driver.find_element_by_xxx(value)
            driver.switch_to.frame(el)

    webdriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为内嵌表单。

    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    url = 'http://126.com/'
    driver.get(url)
    time.sleep(5)   # 防止加载太快
    # 定位到表单
    el_frame = driver.find_element_by_tag_name('iframe')
    # 切换进入表单中
    driver.switch_to.frame(el_frame)
    # 在表单中定位账号输入框
    el_user = driver.find_element_by_name('email')
    # 输入账号
    el_user.send_keys('itcast_soft_test')
    # 定位密码输入框标签
    el_pwd = driver.find_element_by_name('password')
    # 输入密码
    el_pwd.send_keys('1qaz2wsx#EDC')
    
    # 定位登陆按钮
    el_sub = driver.find_element_by_id('dologin')
    # 点击登录
    el_sub.click()
    
    time.sleep(5)
    driver.close()

    driver.switch_to.default_content()
    跳回最外层的页面。
    driver.switch_to.parent_frame()
    跳回上层的页面。

  • 相关阅读:
    Thrift官方安装手冊(译)
    从用python做zoj1011发生Non-zero Exit Code错误说起
    POJ 1637 Sightseeing tour(最大流)
    js中substr与substring的差别
    白话经典算法系列之七 堆与堆排序
    在基于阿里云serverCentOS6.5下安装Subversion 1.6.5服务
    Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释
    java中获取系统属性以及环境变量
    sql中 in 、not in 、exists、not exists 使用方法和区别
    80x86汇编小站站长简单介绍-2014年08月23日
  • 原文地址:https://www.cnblogs.com/peiya/p/12142183.html
Copyright © 2020-2023  润新知