python selenium处理alert弹出对话框并处理无弹窗判断
Posted Jason_WangYing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python selenium处理alert弹出对话框并处理无弹窗判断相关的知识,希望对你有一定的参考价值。
我们的弹出对话框主要分为三种类型:“警告消息框”,“确认消息框”,“提示消息对话”三种类型的对话框。
- 警告消息框(alert)
警告消息框提供了一个“确定”按钮让用户关闭该消息框,而且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。
- 确认消息框(confirm)
确认消息框向用户提示一个“是与否”问题,用户可以根据选择“确定”按钮和“取消”按钮。
- 提示消息对话(prompt)
提示消息框提供一个文本字段,用户可以在此字段输入一个答案来响应您的提示。有一个“确定”按钮和“取消”按钮。选择“确认”会响应对应的提示信息,选择“取消”会关闭对话框。
selenium提供switch_to_alert()方法定位到alert/confirm/prompt对话框。使用text/accept/dismiss/send_keys进行操作,这里注意的是send——keys只能对prompt操作,因为只有它是要输入内容的。
switch_to_alert() #定位弹出对话
text() #获取对话框文本值
accept() #相当于点击“确认”
dismiss() #相当于点击“取消”
send_keys() #输入值,这个alter和confirm没有输入对话框,所以这里不能用,只能用于prompt
大概的页面弹窗形式
简单写下弹窗示例
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<div align="center">
<h4>hello</h4>
<input type="button" οnclick="showPro()" value="输入框弹窗按钮"/>
<input type="button" οnclick="showAlert2()" value="提示弹窗按钮"/>
<input type="button" οnclick="showAlert()" value="确认弹窗按钮"/><br><br><br>
<span id="textSpan"></span>
</div>
</body>
<script>
function showAlert()
document.getElementById("textSpan").innerHTML="";
if(confirm("这是confirm弹窗"))
document.getElementById("textSpan").innerHTML="<font style='color: red;'>是的
else
document.getElementById("textSpan").innerHTML="<font style='color: red;'>否</font>";
function showPro()
document.getElementById("textSpan").innerHTML="";
con = prompt("我是人?");
if(con==1)
document.getElementById("textSpan").innerHTML="<font style='color: green;'>是
document.getElementById("textSpan").innerHTML="<font style='color: green;'>不是</font>";
else
document.getElementById("textSpan").innerHTML="<font style='color: red;'>您没有按要求输入,请重新输入</font>";
function showAlert2()
document.getElementById("textSpan").innerHTML="";
alert("我是弹窗");
</script>
</html>
1.处理alert对话框
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('./alter.html')
'''获取alert对话框的按钮,点击按钮,弹出alert对话框'''
driver.find_element_by_xpath('/html/body/div/input[2]').click()
'''获取alert对话框'''
alert = driver.switch_to_alert()
'''添加等待时间,需等待页面加载'''
time.sleep(2)
'''获取警告对话框的内容'''
print (alert.text) #打印警告对话框内容
alert.accept() #alert对话框属于警告对话框,我们这里只能接受弹窗
'''添加等待时间'''
time.sleep(2)
driver.quit()
2.处理confirm对话框
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('./alter.html')
'''获取confirm对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''获取confirm对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取对话框的内容'''
#打印警告对话框内容
print (dialog_box.text)
dialog_box.accept() #接受弹窗
#打印接受对话框后的提示信息
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
time.sleep(2)
'''再次获取confirm对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''再次获取confirm对话框'''
dialog_box = driver.switch_to_alert()
'''点击【取消】"'''
time.sleep(2)
dialog_box.dismiss() #关闭获取取消对话框
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
driver.quit()
3.处理prompt对话框
#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
'''获取对话框输入'''
driver.get('./alter.html')
'''获取prompt对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''获取prompt对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取对话框的内容'''
print (dialog_box.text) #打印警告对话框内容
dialog_box.send_keys("2") #弹出框内输入2
dialog_box.accept() #接受
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text) #获取关闭弹窗结果 #获取确认弹窗结果
'''这里等待几秒在测试取消'''
time.sleep(2)
#************************点击【取消】,并且获取显示结果**********************
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''获取prompt对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
dialog_box.dismiss() #关闭对话框
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text) #获取关闭弹窗结果
time.sleep(2)
driver.quit()
4.判断页面是否有弹窗
我查了半天,发现没有判断是否有弹窗的直接function,只能通过判断是否出错来判断。
try:
driver.switch_to.alert.accept()
except:
import traceback
traceback.print_exc()
如果没有弹窗,会走下面的报错流程
具体内容如下:
/Library/Frameworks/Python.framework/Versions/3.7/bin/ipython:2: DeprecationWarning: use driver.switch_to.alert instead
# -*- coding: utf-8 -*-
Traceback (most recent call last):
File "<ipython-input-13-2c30c341a472>", line 2, in <module>
alter = driver.switch_to_alert()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 803, in switch_to_alert
return self._switch_to.alert
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/switch_to.py", line 55, in alert
alert.text
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/alert.py", line 67, in text
return self.driver.execute(Command.W3C_GET_ALERT_TEXT)["value"]
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoAlertPresentException: Message: no such alert
(Session info: chrome=102.0.5005.61)
以上是关于python selenium处理alert弹出对话框并处理无弹窗判断的主要内容,如果未能解决你的问题,请参考以下文章
python selenium处理alert弹出对话框并处理无弹窗判断