什么是Prompt框?
prompt是 javascript语言中的一个方法,主要用处是显示提示对话框。
什么是Alert框?
alert()方法用于显示带有一条指定消息和一个 OK 按钮的警告框。 语法 alert(message) 参数描述 message 要在window 上弹出的对话框中显示的纯文本。
这篇文章的目的:
在做自动化的时候,在不知道什么情况下会突然弹出一个alert框,他们也可能是Prompt框。他们会严重阻断你程序的运行,为了解决这个问题,就需要Selenium的驱动能自动同意对话框。
实现这一行为则需要了解一个参数,unhandledPromptBehavior。
这一参数的用途是去处理那些以外的警报问题,当然了,这一定包括了alert与prompt。
它的取值有哪些呢?
accept=同意任何弹框,且不提示用户
accept and notify=同意弹框并且通知用户,这里需要注意,通知的方法是直接抛出异常,如果代码没有做捕捉处理,就会因此中断。
default=默认的
dismiss=解除掉意外警报
dismiss and notify=解除掉意外警报并且抛出一个异常,异常行为同上述。
ignore=如同字面上的意思,直接忽略掉这个警报,因此它必须得由用户来亲自处理。
我们怎么来使用这个参数,在我们的项目中发挥作用?
在这里,我会举出2个例子的使用方式
第一种:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities
import DesiredCapabilities
caps = DesiredCapabilities().CHROME
caps["unhandledPromptBehavior"] = "dismiss and notify"
driver = webdriver.Chrome(desired_capabilities=caps)
driver.get("http://google.com")
第二种:
chrome_options = Options()
chrome_options.set_capability('unhandledPromptBehavior', "accept")
driver = webdriver.Chrome(options=chrome_options)
driver.execute_script('alert(\"正在测试弹框是否被自动确定\");')
print(driver.title)
time.sleep(2000)
这里需要说明一下,如果你只弹框,而没有使用driver进行其他代码操作,那么这个弹框并不会被自动确定,一定要执行一句有用的代码,比如说driver.title 或者 driver.findElement
当然,如果你发现你的弹框依然没有按上文所说的"正确被处理",那可能是你关闭了w3c引擎,这个功能必须得基于它,如果你为了使用TouchActions.tap,你一定会关闭w3c。
关闭的方法是:
chrome_options.add_experimental_option('w3c', False)
所以你应该把这个值设置为True