【playwright】新一代自动化测试神器playwright+python系列课程60_获取toast信息

Playwright 获取toast信息

前言
在使用app的时候,经常会遇到一些提示信息,出现之后一闪而过,不需要手动操作就会自动关闭,不留下一点点痕迹,这种提示信息就是toast信息。现在在web系统中这种toast信息也应用的越来越多,那么我们在做web自动化的时候就可能需要获取这些toast信息,例如用于断言。那么我们就需要定位toast信息所在的元素,虽然toast信息所在的元素看起来也是个提示窗口,但是它不是标准的alert,和Dialog不一样,它永远不会获得焦点,无法被点击,所以不能用 dialog 事件监听。那么这个toast我们这边如何使用playwright进行定位并获取toast信息呢?今天老姜就介绍一下。
这种toast信息能够流行主要是可以提升用户的体验,Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,让用户可以看到。所以Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。在Web中和在Android差不多一样。toast属于一种轻量级的反馈,常常以小弹框的形式出现,一般出现1到3秒会自动消失,可以出现在屏幕上中下任意位置,由于出现的时间非常短,这类元素的html源码还没打开呢可能就消失了,这种情况下怎么定位呢?这里我们可以使用浏览器的调试暂停功能。
F12后点开Source,触发toast信息弹出后,立刻点暂停按钮,这个时候toast信息就不会消失了。
在这里插入图片描述

这时候页面处于调试暂停状态了,再回到检测元素,鼠标指上去,就能看到元素属性了

在这里插入图片描述

我们以安居客的登录功能为例看一下toast信息如何获取。
实践代码:

# '''
# 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("https://login.anjuke.com/login/form?history=aHR0cHM6Ly94YS5hbmp1a2UuY29tLz9waT1QWi1iYWlkdS1wYy1hbGwtYmlhb3Rp")
    frame = page.frame_locator('#iframeLoginIfm')
    frame.locator('#phoneIpt').fill('18612345678')
    frame.locator('#smsIpt').fill('12234')
    frame.locator('[id="checkagree"]').click()
    frame.locator('[id="smsSubmitBtn"]').click()
    t = frame.locator('.toast').inner_text() # 获取toast信息
    print(t)
    page.wait_for_timeout(10000)
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
 

在这里插入图片描述

获取toast信息,并使用assert断言

# '''
# 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("https://login.anjuke.com/login/form?history=aHR0cHM6Ly94YS5hbmp1a2UuY29tLz9waT1QWi1iYWlkdS1wYy1hbGwtYmlhb3Rp")
    frame = page.frame_locator('#iframeLoginIfm')
    frame.locator('#phoneIpt').fill('18612345678')
    frame.locator('#smsIpt').fill('12234')
    frame.locator('[id="checkagree"]').click()
    frame.locator('[id="smsSubmitBtn"]').click()
    t = frame.locator('.toast').inner_text() # 获取toast信息
    assert t == '请获取验证码' # assert断言提示信息
    page.wait_for_timeout(10000)
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

断言消息框内容,也可以直接用expect 断言

# '''
# 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("https://login.anjuke.com/login/form?history=aHR0cHM6Ly94YS5hbmp1a2UuY29tLz9waT1QWi1iYWlkdS1wYy1hbGwtYmlhb3Rp")
    frame = page.frame_locator('#iframeLoginIfm')
    frame.locator('#phoneIpt').fill('18612345678')
    frame.locator('#smsIpt').fill('12234')
    frame.locator('[id="checkagree"]').click()
    frame.locator('[id="smsSubmitBtn"]').click()
    #直接断言toast信息
    expect(frame.locator('.toast')).to_have_text('请获取验证码')
    page.wait_for_timeout(10000)
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

还可以使用is_visible() 用if判断元素是否出现

# '''
# 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("https://login.anjuke.com/login/form?history=aHR0cHM6Ly94YS5hbmp1a2UuY29tLz9waT1QWi1iYWlkdS1wYy1hbGwtYmlhb3Rp")
    frame = page.frame_locator('#iframeLoginIfm')
    frame.locator('#phoneIpt').fill('18612345678')
    frame.locator('#smsIpt').fill('12234')
    frame.locator('[id="checkagree"]').click()
    frame.locator('[id="smsSubmitBtn"]').click()
    if frame.locator('.toast').is_visible(): # 判断toast信息所在元素是否出现
            t = frame.locator('.toast').inner_text() # 获取toast信息
            print(f'toast信息是:{t}')
    page.wait_for_timeout(10000)
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值