Selenium中web三大切换之iframe窗口及Alert(弹窗)切换

Posted Dan monkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium中web三大切换之iframe窗口及Alert(弹窗)切换相关的知识,希望对你有一定的参考价值。

一、web窗口之iframe窗口切换

首先,iframe是html里面的html页面。

若遇到要操作的元素,在iframed当中,则需要进行此操作。

操作步骤:

1)判断要操作的元素是否在iframe当前,可使用元素定位方法进行判断;

2)若1中判断元素存在。则需要再判断切换到那个iframe中。

3)切换方法:

1 driver.switch_to.frame()

参数支持3种方式来确定切换到哪个一个iframe:

1 #1) iframe下标 从0开始
2 driver.switch_to.frame(3)
3 
4 #2) iframe元素的name属性
5 driver.switch_to.frame("login_frame_qq")
6 
7 #3) iframe这个webElment元素。
8 
9 driver.switch_to.frame(driver.find_element_by_xpath(//iframe[@name="login_frame_qq"]))

具体实现的流程:

1)打开访问的页面;

2)根据元素定位等操作,进入到有iframe的页面;

3)操作到有iframe的页面当中,且后面的操作,是在此iframe中找到元素并操作;

4)切换到iframe窗口,进入下一代html当中

driver.switch_to.frame("iframe窗口_名称")

5)在firame窗口中定位元素操作;

6) 回到默认的html页面当中 - 第一代
driver.switch_to.default_content()

7)回到上一级的iframe - 上一代
driver.switch_to.parent_frame()

示例:仅供参考

import time
from  selenium import  webdriver
from selenium.webdriver.common.by import By
from  selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 1、打开访问腾讯课堂
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://ke.qq.com/")

# 2、根据xpath定位当前页面登录按钮,点击登录进入QQ登录窗口
loc = (By.XPATH,//a[@id="js_login"])
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
driver.find_element_by_xpath(//a[@id="js_login"]).click()

# 3、强制等待1秒
time.sleep(1)

# 4、在新的弹窗中找到QQ登录按钮,点击进入QQ登录账号密码输入框
loc2 = (By.XPATH,//i[@class="icon-font i-qq"])
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc2))
driver.find_element_by_xpath(//i[@class="icon-font i-qq"]).click()

# 5、在QQ账号登录窗口
loc3 =(By.XPATH,//iframe[@name="login_frame_qq"])
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc3))
driver.find_element_by_xpath(//iframe[@name="login_frame_qq"]).click()

# 6、切换到新的iframe的窗口
driver.switch_to.frame("login_frame_qq")

# 7、在QQ登录窗口定位到QQ账号信息
loc4 =(By.XPATH,//*[@id="img_out_1xxxx"])
WebDriverWait(driver,20).until(EC.visibility_of_element_located(loc4))
driver.find_element_by_xpath(//*[@id="img_out_1xxxx"]).click()

# 9、退出会话
time.sleep(10)
driver.quit()

 

二、web窗口之Alert(弹窗)切换

很多时候我们会遇到弹窗,且必须对弹窗操作后才能对页面进行操作。弹窗的优先级比网页中的任意元素高;

这里就以这种类型的窗口进行操作。

步骤:

1)点击触发操作,触发弹窗出现;

1 driver.find_element_by_id("press").click()

2)等待弹窗出现;

3)将操作切换到弹窗;

1 driver.switch_to.alert

4)将弹窗关掉,进行下一步的页面处理操作

1 print(alert.text)
2 alert.accept

 

示例:

 1 """
 2 alert类
 3 """
 4 import time
 5 
 6 from  selenium import  webdriver
 7 
 8 driver = webdriver.Chrome()
 9 driver.get("E:WorkspacepythonWebclass_05_0307MyHtml.html")
10 
11 # 点击动作,触发弹框出现
12 driver.find_element_by_id("press").click()
13 # 等待弹窗出现
14 time.sleep(1)
15 
16 # 切换弹窗
17 alert = driver.switch_to.alert
18 
19 # 将弹窗关掉,进行下一步的页面处理
20 print(alert.text)
21 alert.accept()
22 
23 # 关闭会话
24 time.sleep(5)
25 driver.quit()

 

以上是关于Selenium中web三大切换之iframe窗口及Alert(弹窗)切换的主要内容,如果未能解决你的问题,请参考以下文章

selenium中三大窗口切换

selenium 窗口切换(多表单切换)

Python3-Selenium自动化测试框架之窗口切换等待

Web自动化测试11:Selenium之frame切换多窗口切换

爬虫进阶Selenium处理iframe, 多窗口调度

python+selenium2自动化---多表单多窗口切换