About

 

重新认识alert
首先,不是所有的alert都能叫做alert框。
JavaScript中,关于消息提示框的方法有三个(虽然都跟alert差不多):

  • alert(message)方法用于显示带有一条指定消息和一个 OK 按钮的警告框。
  • confirm(message)方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。如果用户点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false。
  • prompt(text,defaultText)方法用于显示可提示用户进行输入的对话框。如果用户单击提示框的取消按钮,则返回 null。如果用户单击确认按钮,则返回输入字段当前显示的文本。

来看个示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>alert</title>
</head>
<body> <input type="button" id="alertButton" value="alert" onclick="alertButton()">
<input type="button" id="confirmButton" value="confirm" onclick="confirmButton()">
<input type="button" id="promptButton" value="prompt" onclick="promptButton()">
<script> function alertButton() {
alert('我是普通的alert提示框');
}; function confirmButton() {
var msg = confirm('点击[确定]或者[取消]按钮');
if (msg) {
alert('你点击的是[确定按钮]');
} else {
alert('你点击的是[取消按钮]');
}
}; function promptButton() {
var msg = prompt('输入一个值:', '我是默认值');
if (msg) {
alert('输入的值为:\n' + msg);
} else {
alert('输入值为空');
}
};
</script>
</body>
</html>

selenium如何处理?
selenium操作上面三种提示框有以下几种方法:

  • alertObject.text:获取提示的文本值。
  • alertObject.accept():点击『确认』按钮。
  • alertObject.dismiss():点击『取消』或者叉掉对话框。
  • alertObject.send_keys(message):输入文本,仅适用于prompt方法,因为alert和confirm的提示框没有输入框!!!并且,如果在非prompt类型的提示框使用alertObject.send_keys(message),会报错!

whatever,因为这些消息提示框的特性,我们『检查 or F12』都无法选中提示框。所以,selenium在处理起来,首先要经过一个switch_to的过程。
另外,当你看到提示框只有提示信息和一个确定按钮时,它就是alert提示框;当你看到提示框中有提示信息和确定/取消按钮都在时,它就是confirm提示框;当你看到提示信息和input框,并且确定和取消按钮都在时,它就是prompt提示框。
至于,为什么不提提示框中右上角的叉掉图标,这是根据浏览器的不同,有的有这个图标,有的没有,比如Chrome和Firefox就没有,而IE就有。

selenium处理alert提示框

回到顶部

selenium在处理alert时,要经过:

  1. switch_to.alert方法将webdriver作用域切换到alert提示框上。
  2. 现在,我们可以使用text获取提示文本信息、accept()点击确认按钮、dismiss()点击取消或者叉掉提示框。
import time
from selenium import webdriver driver = webdriver.Chrome()
try: driver.get(url='file:///M:/tests.html')
time.sleep(2)
driver.find_element_by_id('alertButton').click()
time.sleep(1)
# alertObject = driver.switch_to_alert() # 不要使用这个方法了,因为该方法即将被弃用,当然,暂时还是可以使用,或者selenium版本较低也可以使用。
alertObject = driver.switch_to.alert # 这里,alert方法不加括号,以为该方法被 @property 伪装成属性了,具体参考源码
print(alertObject.text) # text方法也被 @property 伪装成属性了
alertObject.accept() # 点击确定按钮 time.sleep(2)
driver.find_element_by_id('alertButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
time.sleep(2)
alertObject.dismiss() # 叉掉提示框 time.sleep(2)
driver.find_element_by_id('alertButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
alertObject.send_keys('这一行会报错') # selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: User dialog does not have a text box input field. finally:
time.sleep(10)
driver.quit()

由最后的报错可以看到,alert提示框中不能使用alertObject.send_keys(message)方法。

selenium处理confirm提示框

回到顶部

selenium在处理confirm时,与处理alert一样:

  1. switch_to.alert方法将webdriver作用域切换到alert提示框上。
  2. 现在,我们可以使用text获取提示文本信息、accept()点击确认按钮、dismiss()点击取消或者叉掉提示框。
import time
from selenium import webdriver driver = webdriver.Chrome()
try: driver.get(url='file:///M:/tests.html')
time.sleep(2)
driver.find_element_by_id('confirmButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
print(alertObject.text) # 打印提示信息
time.sleep(1)
alertObject.accept() # 点击确定按钮
time.sleep(1)
alertObject.accept() # 根据前端js代码逻辑,当点击确定按钮后会再弹出一个提示框,我们再次点击确定
time.sleep(2)
driver.find_element_by_id('confirmButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
alertObject.send_keys('这一行会报错') # selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: User dialog does not have a text box input field. finally:
time.sleep(10)
driver.quit()

同样的,confirm提示框中也不能使用alertObject.send_keys(message)方法。

selenium处理prompt提示框

回到顶部

selenium在处理prompt时,与处理alert/confirm一样:

  1. switch_to.alert方法将webdriver作用域切换到alert提示框上。
  2. 现在,我们可以使用text获取提示文本信息、accept()点击确认按钮、dismiss()点击取消或者叉掉提示框。
  3. 现在可以使用alertObject.send_keys(message)方法了。
import time
from selenium import webdriver driver = webdriver.Chrome()
try: driver.get(url='file:///M:/tests.html')
time.sleep(2)
driver.find_element_by_id('promptButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
print(alertObject.text) # 打印提示信息
time.sleep(1)
alertObject.send_keys('send keys msg')
print(alertObject.text) # 打印提示信息
alertObject.accept() # 点击确定按钮
print(alertObject.text) # 打印提示信息
time.sleep(1)
alertObject.accept() # 根据前端js代码,当点击确定按钮后会再弹出一个提示框,我们再次点击确定
time.sleep(2)
driver.find_element_by_id('promptButton').click()
time.sleep(1)
alertObject = driver.switch_to.alert
alertObject.send_keys('')
time.sleep(1)
alertObject.dismiss() # 什么都不管,直接点击取消,会在弹出一个提示框
time.sleep(1)
# 现在弹出的是一个普通的提示框,点击确定和取消都无所谓,具体根据业务场景来决定
# alertObject.accept()
alertObject.dismiss() finally: time.sleep(10)
driver.quit()

在prompt提示框中,要看到input框才能send keys!

Selenium处理alert/confirm/prompt提示框的更多相关文章

  1. Python+Selenium学习--alert/confirm/prompt 处理

    场景 webdriver 中处理JavaScript 所生成的alert.confirm 以及prompt 是很简单的.具体思路是使用switch_to.alert()方法定位到alert/confi ...

  2. javascript alert,confirm,prompt弹框用法

    1. alert是弹出警告框,在文本里面加入\n就可以换行. 2. confirm弹出确认框,会返回布尔值,通过这个值可以判断点击时确认还是取消.true表示点击了确认,false表示点击了取消. 3 ...

  3. selenium python (十一)alert/confirm/prompt的处理(js中的弹出框)

    webdriver中处理js所生成的alert.confirm以及prompt,采用switch_to_alert()方法定位到alert/confirm/prompt.然后使用text/accept ...

  4. selenium自动化测试入门 Alert/Confirm/Prompt 弹出窗口处理

    一.Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口: 提示用户信息只有确认按钮,无法通过页面元素定位,不关闭窗口无法在页面上做其他操作. Confirm 弹出窗口: 有确 ...

  5. Java Selenium - 几种对话框处理Alert\confirm\prompt

    1. Alert , 先用常规办法定位到能触发alert的按钮 , 然后 Alert alert = driver.switchTo().alert(); alert.accept(); 如果aler ...

  6. alert/confirm/prompt 处理

    webdriver 中处理JavaScript 所生成的alert.confirm 以及prompt 是很简单的.具体思路是使用switch_to_alert()方法定位到alert/confirm/ ...

  7. 转:python webdriver API 之alert/confirm/prompt 处理

    webdriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体思路是使用switch_to.alert()方法定位到 alert/conf ...

  8. 2.11 alert\confirm\prompt

    2.11 alert\confirm\prompt 前言   不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用 ...

  9. Selenium2学习(十二)-- alert\confirm\prompt

    前言 不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决. alert\confirm\prompt ...

随机推荐

  1. CI中site_url()和base_url()的区别

    CI中site_url()和base_url()的区别 来源:未知    时间:2014-10-20 11:38   阅读数:150   作者:xbdadmin [导读] 在使用CI框架的使用经常碰到 ...

  2. VUE- 解决插件报错问题

    VUE- 解决插件报错问题 解决办法:先删除node_modules整个文件夹,然后cnpm cache clean,然后cnpm install. cnpm  cache clean时可能会提示 这 ...

  3. Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 解决过程

    原因:log4j-over-slf4j和slf4j-log4j12是跟Java日志系统相关的两个jar包,如果同时出现,就可能会引起堆栈异常 解决:找到依赖冲突发生位置,排除一个即可. 问题是 如何找 ...

  4. python:创建文件夹:写入文本1:读取txt:读取Excel文件遍历文件夹:

    https://blog.csdn.net/u011956147/article/details/80369731 创建文件夹: import osimport shutil def buildfil ...

  5. JAVA初学者——DOS命令及基本数据类型

    Hello!大家好!我是浩宇大熊猫~ 昨天看了韩顺平老师第二节视频的课,记忆尤新的是那个数据类型那一块,可是昨天感觉没掌握就没有发博客. 今天,又看了一遍,加上看了一些其他老师的,有所收获,所以分享给 ...

  6. java学习——内部类(二)

    使用内部类 内部类一共有三种使用方法: 1.在外部类中使用内部类 在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例. 唯一的 ...

  7. jsp动作标签学习

    <jsp:useBean> <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实 ...

  8. 离群点检测(Novelty Detection, Outlier Detenction)

    适合问题: 对于无标签的数据, 又想找出坏用户,完成业务目标. 参考: https://scikit-learn.org/stable/modules/outlier_detection.html 算 ...

  9. 转发和重定向简介及与之相关的(URL)参数(parameter)、属性(attribute)问题探讨

    1.引子 转发和重定向是我们在做web项目中常用到的两个术语,有必要理清两者的区别和与之相关的参数.属性获取问题. 2.转发和重定向 1).转发 转发是服务器行为,将当前请求(Request)和响应( ...

  10. Ackermann函数

    Ackermann函数定义如下: 若m=0,返回n+1. 若m>0且n=0,返回Ackermann(m-1,1). 若m>0且n>0,返回Ackermann(m-1,Ackerman ...