webDriver提供了一个api,用于处理JavaScript提供的三种类型的原生弹窗消息(弹窗无法通过网页元素定位)
一、Alerts警告框
显示一条自定义消息, 以及一个用于关闭该警告的按钮, 在大多数浏览器中标记为"确定”(OK). 在大多数浏览器中, 也可以通过按"关闭”(close)按钮将其关闭, 但这始终与“确定”按钮具有相同的作用. 查看样例警告框.
WebDriver可以从弹窗获取文本并接受或关闭这些警告.
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome() as driver:
driver.get(r'https://www.w3school.com.cn/tiy/t.asp?f=hdom_alert')
driver.switch_to.frame('iframeResult')
button=WebDriverWait(driver,timeout=3).until(EC.visibility_of_element_located(('xpath','//input')))
button.click()
time.sleep(5)
# 等待alert弹出
alert=WebDriverWait(driver,timeout=3).until(EC.alert_is_present())
# 打印弹出框所有属性
print(dir(alert))
# 获取弹出框文本
text=alert.text
print(text)
time.sleep(2)
# 确认弹窗
alert.accept()
time.sleep(3)
二、confirm确认框
确认框类似于警告框, 不同之处在于用户还可以选择取消.
此示例还呈现了警告的另一种实现
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=hdom_confirm')
driver.switch_to.frame('iframeResult')
button=WebDriverWait(driver,timeout=3).until(
EC.presence_of_element_located(('xpath','//input[@type="button"]')))
button.click()
# 等待alert弹出
WebDriverWait(driver,timeout=3).until(EC.alert_is_present())
# 获取alert(不常用,一般在等待alert弹出时获取)
alert=driver.switch_to.alert
# 获取弹出框文本
text=alert.text
print(text)
time.sleep(3)
# 取消
# 点击取消后,当前的alert对象就会被销毁
alert.dismiss()
time.sleep(3)
# 要拿到新打开的alert需要再获取一遍
new_alert=WebDriverWait(driver,timeout=3).until(
EC.alert_is_present()
)
print(new_alert.text)
time.sleep(1)
# 确认
new_alert.accept()
三、prompt提示框
提示框与确认框相似, 不同之处在于它们还包括文本输入. 与处理表单元素类似, 您可以使用WebDriver的sendKeys来填写响应. 这将完全替换占位符文本. 按下取消按钮将不会提交任何文本. 查看样例提示框.
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome() as driver:
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=hdom_prompt')
driver.switch_to.frame('iframeResult')
WebDriverWait(driver,timeout=3).until(
EC.presence_of_element_located(('xpath','//input[@type="button"]'))).click()
# 获取alert弹窗
alert=WebDriverWait(driver,timeout=3).until(EC.alert_is_present())
# 输入信息
alert.send_keys('test')
time.sleep(3)
# 确认
alert.accept()
time.sleep(3)