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弹出对话框并处理无弹窗判断

Selenium+python3 应对多个弹出框存在(alert_is_present)判断和处理

弹出框处理

selenium对于弹窗的处理

selenium处理alert弹出框

selenium自动化实施中对windows弹出框是怎样处理的?