python playwright 自动等待和断言详解

目录
  • 自动等待及元素执行方法
    • 鼠标双击
    • 获取元素焦点
    • 鼠标悬停
    • 鼠标点击
    • 设置复选框取消或选中
    • 取消已选中复选框取
    • 输入参数
    • 获取元素属性值
    • 获取内部文本
    • 获取内部HTML
    • 获取文本内容
    • 截图
    • 填写文本并触发键盘事件
    • 输入键盘操作
    • 设置select下拉选项
    • 调度事件
  • 检查点(断言)
    • 文字内容断言
    • 内部文字断言
    • 属性断言
    • 复选框断言
    • js表达式断言
    • 内部HTML断言
    • 元素可见断言
    • 启动状态断言
    • 直接对比断言
  • 总结

自动等待及元素执行方法

操作元素的一系列方法,只要调用了测试夹函数page,就能引出操作元素的方法:

import pytest
from playwright.sync_api import Page
def test_example(page: Page):
    page.goto("https://www.baidu.com")
    page.hover('//*[@id="u1"]/*[text()="设置"]')
    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')
    page.set_checked('//*[text()="全部语言"]', False)
    assert page.title() == "百度一下,你就知道"
    page.close()
if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

playwright对元素执行前,会进行一系列可操作性检查,以确保这些行动按预期运行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果所需的检查未在给定的范围内通过则抛出timeout,操作将失败并显示TimeoutError。

  • 执行方法如下:

鼠标双击

    page.dblclick()

获取元素焦点

    # 获取元素并聚焦它。 如果没有匹配的元素,则方法等待匹配元素出现在 DOM 中。
    page.focus('#su')

鼠标悬停

    # 就是鼠标放在按钮上,此方法针对那种浮框操作
    page.hover('//*[@id="u1"]/*[text()="设置"]')

鼠标点击

    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

设置复选框取消或选中

    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')

取消已选中复选框取

    # 确保元素是复选框或单选框。如果该元素已取消选中,则此方法立即返回
    page.uncheck('//*[text()="仅简体中文"]')

输入参数

    # 此方法是聚焦元素,input输入值后触发事件。您也可以传递一个空字符串来清除输入字段。
    page.fill("#kw", "秦时明月")

获取元素属性值

    # 返回元素属性值
    page.get_attribute('#kw', 'name')

获取内部文本

    page.inner_text('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]//*[@class="title-content-title"]')

获取内部HTML

    page.inner_html('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

获取文本内容

    page.text_content('//*[@id="s-hotsearch-wrapper"]//*[@data-index="2"]')

截图

    # baidu.png存放至当前文件夹下的cases文件夹种
    page.screenshot(path='./cases/baidu.png')

填写文本并触发键盘事件

    # 为文本中的每个字符发送一个keydown、keypress/input和keyup事件。
    page.type("#kw", "hello")

输入键盘操作

    # 获取按钮元素,输入键盘操作
    page.press('#su', 'Enter')

设置select下拉选项

    # 与值匹配的单个选择
    page.select_option(\"select#colors\", \"blue\")
    # 与标签匹配的单个选择
    page.select_option(\"select#colors\", label=\"blue\")
    # 多项选择
    page.select_option(\"select#colors\", value=[\"red\", \"green\", \"blue\"])

调度事件

   # type可传:"click", "dragstart"
    page.dispatch_event('#su', 'click')

检查点(断言)

文字内容断言

    # 获取文本内容,进行断言
    content = page.text_content('[target="_blank"]:first-child')
    assert content == "新闻"

内部文字断言

    # 获取内部文字,进行断言
    text = page.inner_text('[target="_blank"]:first-child')
    assert text == "新闻"

属性断言

    # 获取属性值,进行断言
    attribute = page.get_attribute('#su', 'value')
    assert attribute == "百度一下"

复选框断言

    page.hover('//*[@id="u1"]/*[text()="设置"]')
    page.click('//*[@id="s-user-setting-menu"]//*[text()="搜索设置"]')
    # 复选框状态,进行断言
    checked = page.is_checked('//*[text()="全部语言"]')
    assert checked

js表达式断言

    # JS表达式,进行断言
    js_content = page.locator('[data-index="4"]>a>[class="title-content-title"]').text_content()
    assert js_content == "长津湖超战狼2成中国影史票房冠军"

内部HTML断言

    # 内部 HTML ,进行断言
    html = page.inner_html('[class="hot-title"]')
    assert "百度热搜" in html

元素可见断言

    # 元素可见性 ,进行断言
    visible = page.is_visible('#su')
    assert visible

启动状态断言

    # 启用状态(元素存在可点击) ,进行断言
    enabled = page.is_enabled('#su')
    assert enabled

直接对比断言

    assert page.title() == "百度一下,你就知道"

playwright还提供了自定义断言,这一块我还没有实操过,有兴趣可的可继续研究下:

# 断言本地存储值
user_id = page.evaluate("() => window.localStorage.getItem('user_id')")
assert user_id
# 断言输入元素的值
value = page.locator('#search').input_value()
assert value == 'query'
# 断言计算样式
font_size = page.locator('div').evaluate('el => window.getComputedStyle(el).fontSize')
assert font_size == '16px'
# 断言列表长度
length = page.locator('li.selected').count()
assert length == 3

总结

playwright增加了自动等待,这样就能把用例批量运行的稳定性提升上去了,对断言的操作相比selenium来说也比较容易上手一些。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python+playwright微软自动化工具的使用

    它支持主流的浏览器,包含:Chrome.Firefox.Safari.Microsoft Edge 等,同时支持以无头模式.有头模式运行 playwright-python 提供了同步.异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制 项目地址:https://github.com/microsoft/playwright-python 安装playwright-python,执行命令:pip install playwright 安装成功之后,执行命令:p

  • 如何使用Playwright对Java API实现自动视觉测试

    微软新的端到端浏览器自动化框架Playwright引起了轰动!仅在几个月前,我才试玩了Playwright,当时它是一个仅JavaScript的框架,当得知语言支持已经扩展到我心爱的Java以及Python和C#时,我感到非常惊喜. 借助额外的语言支持以及跨现代浏览器引擎Chromium,Firefox和WebKit执行的能力,这使Playwright与Selenium WebDriver处于同一类别,成为所有需要交叉测试的Web测试人员(不仅是JS)的可行测试解决方案浏览器测试功能,适用于复杂

  • 微软开源最强Python自动化神器Playwright(不用写一行代码)

    相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具.写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就用自动化测试凑一凑. 虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的. 最近,微软开源了一个项目叫「playwright-python」,简直碉堡了!这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能. 可能你会觉得有点不可思议,但它就是这么厉害.下面我们一起看下这个神器. 1. Pl

  • python playwright 自动等待和断言详解

    目录 自动等待及元素执行方法 鼠标双击 获取元素焦点 鼠标悬停 鼠标点击 设置复选框取消或选中 取消已选中复选框取 输入参数 获取元素属性值 获取内部文本 获取内部HTML 获取文本内容 截图 填写文本并触发键盘事件 输入键盘操作 设置select下拉选项 调度事件 检查点(断言) 文字内容断言 内部文字断言 属性断言 复选框断言 js表达式断言 内部HTML断言 元素可见断言 启动状态断言 直接对比断言 总结 自动等待及元素执行方法 操作元素的一系列方法,只要调用了测试夹函数page,就能引出

  • python playwright之元素定位示例详解

    目录 定位篇 定位的详细介绍 文本选择器定位 CSS 选择器定位 布局定位结合 CSS,也是我最喜欢的 根据元素可用 继续说说属性 定位篇 UI 自动化很多时候的苦恼都是定位不到,其实说实话我到现在有时候也是莫名其妙的定位到或者定位不到.好在这个框架定位方式的上限非常以及特别的高,这就像人有钱和没钱的区别主要在于选择权一样,有选择的人生才是幸福的.出门想开法拉利就开法拉利,想开拖拉机就开拖拉机. 定位的详细介绍 1.官方是不推荐 xpath 和 css 的,原话意思是 CSS 和 XPATH 是

  • Python实现自动填写脚本流程详解

    目录 前言 环境使用 模块使用 本次案例代码实现思路 最终效果 代码实现 前言 环境使用 Python 3.8 Pycharm 模块使用 import requests —> 数据请求模块 pip install requests import parsel —> 数据解析模块 pip install parsel from selenium import webdriver —> 自动测试模块 pip install selenium==3.141.0 本次案例代码实现思路 打开考试网

  • python+selenium 脚本实现每天自动登记的思路详解

    最近受疫情影响,学校要求每天必须进行健康登记,而我身处大山深处,身体健康,足不出户,奈何总是容易忘记,遂决定手撸一个自动登记的小程序,仅供学习交流之用,话不多说,直接上代码. 配置:Chrom python3.7 selenium库,webdriver等 基本思路,使用selenium模拟浏览器自动登录,需要解决验证码的提取,嵌套表单的提取,弹窗处理,异常处理. 为了防止大家用此网站测试,搞垮服务器,关键网址我已隐藏. import selenium.webdriver import time

  • python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境

    python的pip是其包管理工具,相当方便好用.本文只介绍pip 如何通过其freeze命令打离线包,及其离线包的安装脚本.这个知识点,特别适用于不适合连通互联网,设备需要物理隔绝,保密要求严格的客户环境. 环境 操作系统: Centos 7.7 python 版本: 2.7 客户网络环境: 离线 研发网络环境:联网 pip 安装 (1)下载rpm包 首先研发环境(联网),去 https://pkgs.org/download/python-pip选择合适的pip rpm离线包下载,如下图:

  • Python学习之异常断言详解

    该章节我们来学习 异常的最后一个知识点 - 断言 ,断言是判断一个表达式,在表达式为 False 的时候触发异常.表达式我们可以对号入座,可以是条件语句中的声明,也可以是是 while 循环中的声明. 它们都是对一件事情进行 True 或者 False 的判断, 断言 也是如此,断言发现后面的表达式为 False 的时候 就会主动抛出异常. 在 Python 中 assert 就是断言的关键字,乍一听起来 似乎和 raise 关键字 的功能一样.其实 assert 断言的使用要比 raise 更

  • Python实现邮件自动下载的示例详解

    开始码代码之前,我们先来了解一下三种邮件服务协议: 1.SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. 2.POP3协议 POP3(Post Office Protocol 3),即邮局协议的第3个版本,是电子邮件的第一个离线协议标准.该协议把邮件下载到本地计算机,不与服务器同步,缺点是更易丢失邮件或多次下载相同的邮件. 3.IMAP协议 IMAP(Internet Mail Access Protoc

  • Python Flask前端自动登录功能实现详解

    目录 引言 1. 登录时 2. 定义全局拦截器 引言 在已有的网站中,几乎所有的网站都已经实现了 自动登录 所谓自动登录,其实就是在你登录后,然后关闭浏览器,接着再启动浏览器重新进入刚刚的网站时,无需自己再次登录.更准确的说,在一段时间内,无需自己再次登录 思路:其实所谓的自动登录,到最后的后端逻辑,和你正常的登录逻辑是一样的,也是判断用户名和密码是否正确.只是我们要省略让用户再次输入用户名和密码的步骤,那么肯定就要将用户名和密码存储在一个地方.当检测到用户再次进入时,看看是否满足可以自动登录的

  • Python中Selenium模块的使用详解

    Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等.这个工具的主要功能包括:测试浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上.测试系统功能--创建回归测试检验软件功能和用户需求.支持自动录制动作和自动生成 .

  • Python爬虫爬验证码实现功能详解

    主要实现功能: - 登陆网页 - 动态等待网页加载 - 验证码下载 很早就有一个想法,就是自动按照脚本执行一个功能,节省大量的人力--个人比较懒.花了几天写了写,本着想完成验证码的识别,从根本上解决问题,只是难度太高,识别的准确率又太低,计划再次告一段落. 希望这次经历可以与大家进行分享和交流. Python打开浏览器 相比与自带的urllib2模块,操作比较麻烦,针对于一部分网页还需要对cookie进行保存,很不方便.于是,我这里使用的是Python2.7下的selenium模块进行网页上的操

随机推荐