20.Selenium【iframe切换】切换页面的iframe、handlers

一、前言

在做web自动化的时候,我们往往会遇到两种切换:iframe、handler。iframe表示在主html上嵌入的子html页面(说人话就是一个页面中套着一个或多个页面);handler表示一个新的页签(说人话就是浏览器上方多了一个页面),但此时我们的操作仍然在原先的窗口当中,如果要在新的窗口继续操作元素,那么就要用到handle窗口切换的方法。

二、学习目标

1.iframe切换

2.handler切换

三、知识点

1.【iframe切换】

示例地址:http://sahitest.com/demo/iframesTest.htm

  • 什么是iframe

    说明:图中阴影部分就是iframe,可以理解为页面中嵌套着一个小页面,我们如果要定位”Link Test“按钮,必须先切换到小页面才能定位,如果不切换则会报错元素未找到。

  • iframe切换

    语法:

    #1.直接使用id值切换
    driver.switch_to.frame(value)  #如果iframe标签中有id属性,可以用这个方法直接传id的值
    #2.通过出入元素对象切换
    el = driver.find_element_by_xxx(value)
    driver.switch_to.frame(el)
    #3.跳回上层的页面
    driver.switch_to.parent_frame()
    #4.跳回最外层的页面
    driver.switch_to.default_content()
    

    代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求某个url
    driver.get('http://sahitest.com/demo/iframesTest.htm')
    time.sleep(3)
    
    #1.通过el元素对象切换iframe
    el = driver.find_element_by_xpath('.//body/iframe')
    driver.switch_to.frame(el)
    #2.点击Link Test按钮
    driver.find_element_by_xpath(".//a[text()='Link Test']").click()
    #3.返回上一次iframe
    driver.switch_to.parent_frame()
    #4.点击Click me按钮
    driver.find_element_by_xpath(".//input[@value='Click me']").click()
    

2.【handler切换】

示例地址:https://www.baidu.com/

  • 什么是handler

    说明:当我们点击百度首页的新闻按钮时,浏览器会出现一个新的窗口。我们如果想操作百度新闻页面的元素,必须要从百度首页的窗口切换到百度新闻页的窗口,否则无法获取到新窗口中的元素。

  • handler切换

    语法:

    #1.获取当前打开的所有窗口句柄,返回类型为一个列表
    driver.window_handles  #注:window_handles是对象属性,没有括号
    #2.获取当前窗口的句柄
    driver.current_window_handle  #注:window_handles是对象属性,没有括号
    #3.切换窗口,handle_id参数代表的是一个窗口句柄
    driver.switch_to.window(handle_id)
    

    代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求某个url
    driver.get('https://www.baidu.com/')
    time.sleep(3)
    
    #点击新闻按钮
    driver.find_element_by_xpath(".//a[text()='新闻']").click()
    time.sleep(3)
    
    #1.获取当前浏览器的全部窗体
    all_handles = driver.window_handles  #
    #2.切换到最新的窗体
    driver.switch_to.window(all_handles[-1])
    #3.获取当前标题
    print(driver.title)  #百度新闻——海量中文资讯平台,说明已经切换啦!
    
posted @ 2023-01-17 09:57  测开星辰  阅读(819)  评论(0编辑  收藏  举报