zoukankan      html  css  js  c++  java
  • web自动化测试(4)--iframe、window以及alert弹窗的切换操作

    在进行元素定位操作的过程中,我们常会遇到如下3种切换操作,分为为:

    1、iframe切换操作

    2、window切换操作

    3、alert弹窗切换操作

    在本节中,我们将详细介绍上述3种切换操作。

    一、iframe切换操作

    1、什么时候需要使用iframe切换操作?

    当我们在进行元素定位时,发现待操作的元素出现在iframe当中,即当前html内嵌的htm中时,此时我们需要使用iframe切换操作,否则无法对元素进行相应的操作。

    2、如何切换?

    切换方式为:driver.switch_to.iframe(iframe的标识)

    iframe常见的标识有:index、name 或者 webelement等

    3、当一个html中存在iframe的多级嵌套时,即html   >> iframe(html)  >> iframe(html)

     3.1、我们如何快速的从当前iframe返回到主html中?

     driver.switch_to.default_content()

     3.2、如何逐级退回到上一级iframe中?

     driver.switch_to.parent_frame()  

    二、window切换操作

    当我们在点击某个链接可能会导致窗口的出现(即当前窗口与新窗口并存的现象),此时我们如果想定位并操作新窗口中的元素是,需要进行窗口切换的操作,具体流程如下:

    1、获取所有窗口的句柄

    driver.window_handles,此时窗口的句柄将保存在一个列表中,新出现的窗口的句柄在列表中的最后位置,即索引值为-1

    2、切换到新窗口

    driver.switch_to.window(新窗口句柄)

    [说明]

    如何获取当前窗口的句柄?

    driver.current_window_handle        # 获取当前窗口的句柄

    三、alert弹窗切换操作

    如果某个动作导致alert弹窗出现时,我们如果想继续进行接下来的操作流程,必须先处理alert弹窗信息,具体操作流程如下:

    1、切换到alert弹窗:al = driver.switch_to.alert

    2、相关操作:

     2.1、获取文本:al.text

     2.2、关闭弹出框:al.accept()

    附录

    1、iframe窗口切换--页面中嵌套多个iframe

     1 """
     2 元素的切换操作
     3 """
     4 from selenium import webdriver
     5 from selenium.webdriver.common.by import By
     6 from selenium.webdriver.support.wait import WebDriverWait
     7 from selenium.webdriver.support import expected_conditions as EC
     8 
     9 # 案例:腾讯课堂用户登录
    10 driver = webdriver.Chrome()
    11 driver.get("https://guanjia.qq.com/sem/970/index.html?ADTAG=media.buy.baidu.SEM")
    12 
    13 wait = WebDriverWait(driver,20)
    14 
    15 login_btn_loc = (By.ID,'mgr_nav_login')
    16 wait.until(EC.visibility_of_element_located(login_btn_loc))
    17 driver.find_element(*login_btn_loc).click()
    18 
    19 # 使用账号密码登录,由于存在iframe的内嵌,需要进行iframe的切换操作
    20 # 由于iframe存在多级嵌套,因此需要进行逐级进入
    21 driver.switch_to.frame("login_ifr")   # 通过name属性进行切换
    22 driver.switch_to.frame("ptlogin_iframe") # 通过name属性进行切换
    23 login_loc = (By.ID,"switcher_plogin")
    24 wait.until(EC.visibility_of_element_located(login_loc))
    25 driver.find_element(*login_loc).click()
    26 
    27 #进行用户登录页面后,进行用户名、密码登录
    28 user_loc = (By.ID,"u")
    29 pwd_loc = (By.ID,"p")
    30 submit_loc = (By.ID,"login_button")
    31 wait.until(EC.visibility_of_element_located(user_loc))
    32 driver.find_element(*user_loc).send_keys("18272165137")
    33 driver.find_element(*pwd_loc).send_keys("12345678")    # 输入密码
    34 driver.find_element(*submit_loc).click()   # 登录提交

    2、window窗口切换--网页搜索查询

     1 from selenium import webdriver
     2 from selenium.webdriver.common.by import By
     3 from selenium.webdriver.support.wait import WebDriverWait
     4 from selenium.webdriver.support import expected_conditions as EC
     5 
     6 driver = webdriver.Chrome()
     7 driver.get("http://www.baidu.com")
     8 wait = WebDriverWait(driver,20)
     9 
    10 input_loc = (By.ID,"kw")
    11 submit_loc = (By.ID,"su")
    12 wait.until(EC.visibility_of_element_located(submit_loc))
    13 driver.find_element(*input_loc).send_keys("selenium")
    14 driver.find_element(*submit_loc).click()
    15 
    16 # 点击第一条搜索记录
    17 rec_first_loc = (By.XPATH,'//a[text()="官方"]')
    18 wait.until(EC.visibility_of_element_located(rec_first_loc))
    19 driver.find_element(*rec_first_loc).click()
    20 
    21 # 产生新的窗口,获取窗口句柄
    22 handles = driver.window_handles
    23 # 切换到新窗口
    24 driver.switch_to.window(handles[-1])
    25 print(driver.current_window_handle)

    3、alert弹窗切换

    找到合适的实例,在补上相应的操作代码......

  • 相关阅读:
    轨迹预测-运动递归函数
    Mandelbrot集合及其渲染
    如何检测一个圆在多个圆内?
    【转】三十分钟掌握STL
    【转】如何理解c和c++的复杂类型声明
    有1,2,3一直到n的无序数组,排序
    归并排序
    希尔排序
    快速排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/yif930916/p/14794597.html
Copyright © 2011-2022 走看看