前言
我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。
弹框通常分为3种,分别为alert,confirm,promot。
- alert弹框:只有信息和确定按键
- confirm弹框:在alert弹窗基础上增加了取消按钮
- prompt弹框:在confirm的基础上增加了可输入文本内容的功能
图像分别如下:
出现弹框时,我们需要点击确定,弹框才会消失,当我们使用selenium处理弹框时,通常是使用switch_to.alert来进行处理,具体代码如下:
from selenium import webdriver
driver = webdriver.Chrome()
driver.switch_to.alert.accept() #确定、同意;三种弹窗都可使用
driver.switch_to.alert.dismiss() #取消、不同意;confirm和prompt弹窗中使用
title = driver.switch_to.alert.text #打印弹窗信息
alert = driver.switch_to.alert #获取alert对象
alert.send_keys() #Prompt弹窗中输入内容
那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?下面我们就来介绍一下playwright对于弹框的处理。
dialog 事件监听
playwright 框架可以监听dialog事件,不管你alert 什么时候弹出来,监听到事件就自动处理了。
当出现 JavaScript 对话框时发出,例如alert、prompt。侦听器必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。
page.on("dialog", lambda dialog: dialog.accept())
注:当没有page.on("dialog")侦听器存在时,所有对话框都会自动关闭。
语法如下:
page.on("dialog", handler)
使用示例
如果我们遇到如下页面,处理弹框的示例
代码如下:
from playwright.sync_api import sync_playwright
def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
# 没监听时,它自动会关闭
page.evaluate("alert('霍格沃兹测试开发学社')")
browser.close()
with sync_playwright() as playwright:
run(playwright)
当监听器存在时,它必须dialog.accept()或dialog.dismiss()对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。
from playwright.sync_api import sync_playwright
def handle_dialog(dialog):
"""监听后处理"""
print(dialog.message)
dialog.dismiss()
def run(playwright):
chromium = playwright.chromium
browser = chromium.launch(headless=False, slow_mo=3000)
page = browser.new_page()
page.on("dialog", handle_dialog)
page.evaluate("alert('霍格沃兹测试开发学社')")
browser.close()
with sync_playwright() as playwright:
run(playwright)
通过page.on("dialog", handler) 监听到dialog 事件,可以获取到dialog.message内容。
dialog 属性和方法
accept()当对话框被接受时返回。
dialog.accept()
dialog.accept(**kwargs)
参数 prompt_text(可选), 要在提示中输入的文本。如果对话框 type 没有提示,则不会产生任何影响.
default_value, 如果对话框是提示的,则返回默认提示值。否则,返回空字符串。
dialog.default_value
dismiss 关闭对话框
dialog.dismiss()
message 获取对话框中显示的消息
dialog.message
type返回对话框的类型,可以是alert, beforeunload, confirm或 prompt其中一个
dialog.type
总结
本文主要讲解了playwright对页面弹框的处理,后续我们将介绍playwright上传文件的处理。