【playwright】新一代自动化测试神器playwright+python系列课程39_playwright_弹窗处理

playwright_弹窗处理

目前的系统中,在应用错误或修改数据、删除数据时都会弹出提示信息窗口,弹出的警告窗口有的是可以直接定位窗口上的元素的,有的是不能定位的。接下来我们来看下这种不能定位的弹窗playwright如何处理。
我们先来了解一下弹窗的分类,弹窗通常分为3种,分别为alert,confirm,promot。
alert弹框:只有信息和确定按键
confirm弹框:在alert弹窗基础上增加了取消按钮
prompt弹框:在confirm的基础上增加了可输入文本内容的功能
出现弹框时,我们需要点击确定或取消,或者获取弹窗上的提示信息,在playwright下就需要使用on()来监听弹窗的dialog事件,语法如下:

page.on(‘dialog’,lambda dialog: dialog.accept())

dialog 对象有属性和方法来实现点击弹窗中的确定、取消或者获取弹窗上的提示信息/;
dialog.accept():点击弹窗上的确定
dialog.dismiss():点击弹窗上的取消
dialog.message: 获取对话框中显示的消息
dialog.type:返回对话框的类型,可以是alert, beforeunload, confirm或 prompt其中一个
我们以禅道中删除用例时的弹窗(confirm类型)为例,看一下具体的应用过程。
在这里插入图片描述

实践代码:

'''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
'''

from playwright.sync_api import Playwright, sync_playwright, expect
import re

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://127.0.0.1/zentao/user-login.html")
    page.locator("#account").fill("admin")
    page.locator("input[name=\"password\"]").click()
    page.locator("input[name=\"password\"]").fill("Deshifuzhi01")
    page.get_by_role("button", name="登录").click()
    page.wait_for_timeout(2000)
    page.goto('http://127.0.0.1/zentao/testcase-browse-1.html')
    page.wait_for_timeout(1000)
    
    page.frame_locator("iframe[name=\"app-qa\"]").locator("text=111").first.click()
    page.wait_for_timeout(1000)
    page.frame_locator("iframe[name=\"app-qa\"]").get_by_title('删除').click()
    
    page.on('dialog',lambda dialog: dialog.accept()) # 点击弹出窗口上的确定
    # page.on('dialog',lambda dialog: dialog.dismiss()) # 点击弹出窗口上的取消
    #page.on('dialog',lambda dialog: print(dialog.message)) # 打印提示信息
    # page.on('dialog',lambda dialog: print(dialog.type)) # 打印窗口类型
    page.wait_for_timeout(10000)

    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

如果需要以提示信息来断言的话,直接在on()方法的lambda函数中使用assert断言会报错,可以单独定义一个函数,在函数内获取提示信息并断言,再把函数对象传入on()方法中。
实践代码:

'''
# author: 测试-老姜   交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
'''

from playwright.sync_api import Playwright, sync_playwright, expect
import re
import pytest

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("http://127.0.0.1/zentao/user-login.html")
    page.locator("#account").fill("admin")
    page.locator("input[name=\"password\"]").click()
    page.locator("input[name=\"password\"]").fill("Deshifuzhi01")
    page.get_by_role("button", name="登录").click()
    page.wait_for_timeout(2000)
    page.goto('http://127.0.0.1/zentao/testcase-browse-1.html')
    page.wait_for_timeout(1000)
    page.frame_locator("iframe[name=\"app-qa\"]").locator("text=123456").first.click()
    page.wait_for_timeout(1000)
    page.frame_locator("iframe[name=\"app-qa\"]").get_by_title('删除').click()
   

    def handler(dialog): #断言的函数
        m = dialog.message # 获取提示信息
        assert m=='您确认要删除 该测试用例吗?' # 断言

    page.on('dialog',handler) # 监听弹窗,并调用handler函数断言
    page.wait_for_timeout(10000)

    # ---------------------
    context.close()
    browser.close()
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值