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弹窗切换

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

posted on 2021-05-21 17:01  jyf上善若水  阅读(376)  评论(0编辑  收藏  举报