web自动化学习-必须知道的三种切换类型 窗口、iframe、alert

1. iframe切换:元素在iframe中 ,html中内嵌了另一个html

定位方式:
  • 分辨元素是否在iframe中
  • 若在代码当中,则可以先从当前的html切换到iframe中的html,然后再查找元素
  • 多层iframe,可以多次调用switch_to.frame()
  • 退出到主html: switch_to.default_content()
  • 退出到上一级iframe,switch_to.parent_frame()
示例数据:
"""
切换方式:driver.switch_to.frame(iframe的标识)
iframe的标识可以是:iframe的name、索引下标、webelement
"""
……
# 示例
# name属性
driver.switch_to.frame("frame的name属性")  
# 下标
driver.switch_to.frame(1)  
# iframe的webelement
driver.switch_to.frame(driver.find_element(By.XPATH, "iframe的xpath信息"))  
# 切换iframe后,最好设置强制等待,以防后面的元素定位不到
time.sleep(1)
# 返回默认的iframe
driver.switch_to.default_content()

2. 窗口切换

  • 某一动作导致新窗口出现;
  • 获取 所有通过自动化方式打开的窗口句柄,driver.window_handles
  • 获取当前窗口的句柄:driver.current_window_handle
  • 切换 driver.switch_to.window(新窗口句柄)

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("selenium")
driver.find_element(By.ID, "su").click()

loc = (By.XPATH, "//h3[@class='t c-title-en']")

wait = WebDriverWait(driver, 20)
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

# 切换到新的窗口,然后在新窗口中,点击
sleep(1)
# 列表,存储获取到的所有窗口句柄,按照窗口出现的先后顺序添加
win_hans = driver.window_handles 
print("当前打开的窗口句柄:", win_hans)
print("当前正在使用的窗口句柄", driver.current_window_handle)

# 切换 切换到最新打开的窗口
driver.switch_to.window(win_hans[-1])

# 定位新窗口中的某个元素并操作
loc = (By.XPATH, "//div[@class='download-button ide']")
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
# 切换回主窗口
driver.switch_to.window(win_hans[-1])
sleep(3)

3. alert切换

可以通过Alert类或键盘操作
示例数据:

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By

"""
1、某一操作导致alert(或prompt、confirm)弹窗出现
2、切换到弹窗中,driver.switch_to.alert 返回的是一个类的实例化对象,例如用al接收它
"""
# 出现alert弹窗
driver = webdriver.Chrome()
driver.get(r"访问地址")
# 触发弹窗的操作
driver.find_element(By.ID, "press").click()
sleep(1)
# 接收实例
al = driver.switch_to.alert
# 获取文本
print(al.text)
# 关闭弹窗
al.accept()
# 取消弹窗
al.dismiss()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值