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(弹窗)切换的主要内容,如果未能解决你的问题,请参考以下文章
Python3-Selenium自动化测试框架之窗口切换等待