一、窗口(window)切换
在浏览器当中,如果在页面进行了某个操作,结果浏览器打开了另外一个新窗口(tab)。如果要操作新窗口当中的页面元素,就需要窗口切换。
前提:有新的窗口打开、或者你要操作其它窗口
1、sleep(1)或显示等待 -- 等待浏览器新的窗口出现(无法使用隐性等待,隐性等待只能用于找元素)
2、先获取当前会话浏览器的,所有窗口。句柄(窗口唯一标识)
所有窗口句柄 = driver.window_handles #是个列表
句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。所以新窗口是列表的最后一个!
3、切换到指定的窗口
driver.switch_to.window(窗口的句柄)
#方式一:用sleep等待
sleep(1) #等待新窗口出现
# ========== 浏览器打开了另外一个新窗口 ===========
# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
#方式二:用显性等待
# 获取当前的窗口句柄
wins = driver.window_handles
# === 打开新的窗口 ===
driver.find_element(By.XPATH, '//div[@id="1"]//a').click()
# ========== 浏览器打开了另外一个新窗口 2===========
# 要传一个当前的句柄列表。等待新窗口出现.
wait = WebDriverWait(driver,30)
wait.until(EC.new_window_is_opened(wins)) #new_window_is_opened新的窗口打开,逻辑是点击后的句柄数若大于点击之前的句柄数,那就表示有新窗口打开
# 取最新打开的窗口
new_wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
二、iframe切换
iframe:html当中内嵌了另外一个html。
当页面中包含iframe时,不能直接操作iframe中的元素,需要先切换进iframe才行
2.1、iframe切换
1)要判断你要操作的元素,是否在iframe当中
F12当中定位元素后,去看它的绝对路径当中是否有2个或2个以上的html。
2)如果要操作iframe当中的元素,则必须切换到iframe当中。若有多层iframe,一层一层切入
driver.switch_to.frame(iframe的元素识别策略)
driver.switch_to.frame("frameforlogin")
3)如果要从iframe当中退出来
driver.switch_to.default_content()
4)切换回上一层
driver.switch_to.parent_frame()
2.2、iframe识别策略
1)index(下标):整个页面所有的iframe当中,当前要切换的iframe的下标。从0开始
driver.switch_to.frame(1)
2)name属性:driver.switch_to.frame(iframe name属性名)
driver.switch_to.frame("frameforlogin")
3)webelement对象:通过find_element获得元素的webelement对象
driver.switch_to.frame(driver.find_element(By.ID,"frameforlogin"))
三、alert弹出框切换
WebDriver提供了一个API,用于处理JavaScript提供的三种类型的原生弹窗消息。
页面的弹出框2种:
1)右键元素定位
2)js弹框 -- 由页面操作触发的
3.1、三种alert弹窗
1)Alerts警告框
https://www.w3school.com.cn/tiy/t.asp?f=hdom_alert
2)confirm确认框,与警告框不同,确认框还有取消按钮
https://www.w3school.com.cn/tiy/t.asp?f=hdom_confirm
3)prompt提示框,还可以输入文本
https://www.w3school.com.cn/tiy/t.asp?f=hdom_prompt
3.2、切换进入Alert
driver.switch_to.alert
3.3、Alert类
1)accept() :确定
如果有多个弹窗,可以点多次确定或取消
# 切换到alert
alert = driver.switch_to.alert
#确定
alert.accept()
2)dismiss() :取消
# 切换到alert
alert = driver.switch_to.alert
#取消
alert.dismiss()
3)send_keys():输入
如果有默认输入内容,输入的内容会覆盖默认内容
# 切换到alert
alert = driver.switch_to.alert
# 在弹出框当中输入文本内容
alert.send_keys("hello selenium")
# 确定
alert.accept()
4)text:获取当前弹框的文本内容
四、selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?
参考:https://www.cnblogs.com/Simple-Small/p/12486621.html
标签:web,Selenium,driver,alert,switch,切换,iframe,句柄 From: https://www.cnblogs.com/mango-93/p/18047308