使用Playwright的selector方法快速定位网页元素(CSS选择器)

pytest-playwright 是一个用于在 Python 中使用 Playwright 进行自动化测试的工具。它结合了 Pytest 测试框架和 Playwright 浏览器自动化工具,为您提供了在编写和执行自动化测试时的便利性和灵活性。

通过 pytest-playwright,您可以编写基于 Pytest 的测试用例,使用 Playwright 提供的功能来进行浏览器自动化测试。这样可以让您利用 Pytest 的丰富功能和易用性,结合 Playwright 的强大自动化能力,来进行端到端的网页自动化测试。

一般来说,使用 pytest-playwright 进行测试的流程如下:

  1. 安装 pytest-playwright 和 Playwright 相关的依赖。pip install pytest-playwright 
    playwright install 安装浏览器
  2. 编写基于 Pytest 的测试用例,利用 pytest-playwright 提供的功能来进行浏览器自动化测试。
  3. 运行测试用例,观察测试结果并进行必要的调试和修复。

以下是 pytest-playwright 提供的一些特性:

  • Fixture 支持:pytest-playwright 提供了一些 Pytest fixture,以便在测试用例中使用 Playwright 实例。
  • 参数化测试:可以方便地使用 Pytest 的参数化功能结合 Playwright 进行测试。
  • 截图和视频录制:可以方便地使用 Playwright 提供的截图和视频录制功能来辅助测试。

# 当使用 Playwright 中的 selector() 方法执行 CSS 选择器查询时,可以传递特定的 CSS 选择器作为参数,
# 该选择器将用于在页面上选择符合条件的元素以下是对 selector() 方法用于执行 CSS 选择器查询的总结归纳:
# 基本选择器:
# 选择所有段落元素:selector('p')
# 选择具有 "example" 类的元素:selector('.example')
# 选择 id 为 "header" 的元素:selector('#header')

# 组合选择器:
# 选择所有 <div> 元素且具有 "container" 类的元素:selector('div.container')
# 选择所有 <a> 和 <button> 元素:selector('a, button')
# 选择类为 "list" 的元素内部的所有 <li> 元素:selector('.list > li')

# 属性选择器:
# selector('tagname[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的指定标签元素。
# 您可以将 tagname 替换为实际的标签名称,将 attribute 替换为要匹配的属性名称,将 value 替换为要匹配的属性值。
# selector('input[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的 <input> 元素
# selector('input[type="text"]'), 选择具有 type="text" 属性的 <input> 元素 

# 选择所有 href 属性值以 "https" 开头的链接元素:selector('a[href^="https"]')
# 选择所有 data-custom 属性值为 "value" 的元素:selector('[data-custom="value"]')

# 选择属性值以特定字符串开头的元素:selector('[attribute^="value"]')
# 例如:选择所有 href 属性值以 "https" 开头的链接元素:selector('a[href^="https"]')

# 选择属性值以特定字符串结尾的元素:selector('[attribute$="value"]')
# 例如:选择所有 src 属性值以 ".jpg" 结尾的图片元素:selector('img[src$=".jpg"]')

# 选择属性值包含特定字符串的元素:selector('[attribute*="value"]')
# 例如:选择所有 class 属性值包含 "active" 的元素:selector('.active')

# selector('[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的任何元素。
# <button data-testid="submit-button">Submit</button>
# selector('[data-testid="submit-button"]') 

# 通过传递适当的 CSS 选择器给 selector() 方法,可以在页面上准确定位到所需的元素,并进一步操作这些元素。
# 这种灵活性使得在使用 Playwright 进行 Web 自动化时能够更加高效地操作页面上的元素。

import asyncio
from playwright.async_api import async_playwrightasync def main():async with async_playwright() as p:browser = await p.chromium.launch(headless=False)page = await browser.new_page()await page.goto('https://www.hao123.com/')# 等待搜索框元素可见search_input = await page.wait_for_selector('input[data-hook="searchInput"]')# 提取https://www.hao123.com/页面的搜索框input# <input data-hook="searchSubmit" alog-action="search" class="g-cp submitInput button-hook s_btn" type="submit" value="百度一下"></div># <input data-hook="searchInput" placeholder="" name="word" value="" class="textInput input-hook" type="text" autocomplete="off">if search_input:# 在搜索框中输入关键词await search_input.type('Playwright')# 查找并点击搜索按钮search_button = await page.query_selector('input[data-hook="searchSubmit"]')if search_button:await search_button.click()print('Clicked the search button!')else:print('Search button not found!')else:print('Search input element not found!')# 等待一段时间,以便查看搜索结果页面await asyncio.sleep(5)await browser.close()asyncio.run(main())# 当使用 Playwright 中的 selector() 方法执行 CSS 选择器查询时,可以传递特定的 CSS 选择器作为参数,
# 该选择器将用于在页面上选择符合条件的元素以下是对 selector() 方法用于执行 CSS 选择器查询的总结归纳:
# 基本选择器:
# 选择所有段落元素:selector('p')
# 选择具有 "example" 类的元素:selector('.example')
# 选择 id 为 "header" 的元素:selector('#header')# 组合选择器:
# 选择所有 <div> 元素且具有 "container" 类的元素:selector('div.container')
# 选择所有 <a> 和 <button> 元素:selector('a, button')
# 选择类为 "list" 的元素内部的所有 <li> 元素:selector('.list > li')# 属性选择器:
# selector('tagname[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的指定标签元素。
# 您可以将 tagname 替换为实际的标签名称,将 attribute 替换为要匹配的属性名称,将 value 替换为要匹配的属性值。
# 选择所有具有 type 属性的输入元素:selector('input[type]')
# selector('input[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的 <input> 元素
# selector('input[type="text"]'), 选择具有 type="text" 属性的 <input> 元素 # 选择所有 href 属性值以 "https" 开头的链接元素:selector('a[href^="https"]')
# 选择所有 data-custom 属性值为 "value" 的元素:selector('[data-custom="value"]')# 选择所有具有特定属性的元素:selector('[attribute]')
# 例如:选择所有具有 type 属性的输入元素:selector('input[type]')
# 选择属性值以特定字符串开头的元素:selector('[attribute^="value"]')
# 例如:选择所有 href 属性值以 "https" 开头的链接元素:selector('a[href^="https"]')# 选择属性值以特定字符串结尾的元素:selector('[attribute$="value"]')
# 例如:选择所有 src 属性值以 ".jpg" 结尾的图片元素:selector('img[src$=".jpg"]')# 选择属性值包含特定字符串的元素:selector('[attribute*="value"]')
# 例如:选择所有 class 属性值包含 "active" 的元素:selector('.active')# selector('[attribute="value"]') 这个选择器的意思是选择具有特定属性和值的任何元素。
# <button data-testid="submit-button">Submit</button>
# selector('[data-testid="submit-button"]') # 通过传递适当的 CSS 选择器给 selector() 方法,可以在页面上准确定位到所需的元素,并进一步操作这些元素。
# 这种灵活性使得在使用 Playwright 进行 Web 自动化时能够更加高效地操作页面上的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

向日葵、Todesk、teamviewer等工具远程连接电脑时第三方应用显示白屏

问题描述&#xff1a;用向日葵远程等桌面时&#xff0c;当把显示器断电或者就没有显示器时或者笔记本盖子合住时&#xff0c;第三方软件显示白屏或显示不出来的问题。 原因&#xff1a;某些显卡在断开屏幕时自动降为低功耗模式。 解决 1、下载工具 https://www.amyuni.com/d…

NoSQL--虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先&#xff0c;导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作&#xff1a; 1.1.2.1 点击开启虚拟机&#xff1a; 1.1.2.2 默认选择回车CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …

企业品牌宣传活动或发布会如何做官方媒体直播

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师. 企业活动进行媒体直播可以扩大活动的影响力&#xff0c;增强品牌的曝光度&#xff0c;并实时与目标观众互动。以下是一些步骤和建议来帮助您有效地实施企业活动的媒体直播&#xff1a; 明确…

Kotlin中的安全导航操作符?.、空合并运算符?:以及let函数的实践与理解

在Kotlin编程语言中&#xff0c;为了更好地处理可能为null的对象引用&#xff0c;引入了一系列优雅且实用的操作符和函数。本文将深入探讨其中三个关键工具&#xff1a;安全导航操作符?.、空合并运算符?:以及let函数&#xff0c;并通过示例代码展示其应用场景。 安全导航操作…

动态规划之使用最小花费爬楼梯【LeetCode】

动态规划之使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯解法1解法2 LCR 088. 使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯 解法1 状态表示&#xff08;这是最重要的&#xff09;&#xff1a;dp[i]表示以第i级台阶为楼层顶部&#xff0c;到达第i层台阶的最低花费。 状…

【VSCode】解决VSCode远程连接问题:远程主机可能不符合 glibc 和 libstdc++

今天用VSCode进行ssh连接时&#xff0c;提示“远程主机可能不符合 glibc 和 libstdc VSCode 服务器的先决条件”。查了一下发现这个问题主要是由于VSCode在一月份发布的最新版本v1.86中要求远程主机 glibc>2.28导致的&#xff0c;所以ssh连接Ubuntu 18.04的时候就会提示这个…

详解 Rope (Opal-03a) 的变化

文章目录 &#xff08;一&#xff09;特点&#xff08;二&#xff09;使用流程&#xff08;三&#xff09;界面&#xff08;四&#xff09;详解&#xff08;4.1&#xff09;目录区域⭐Start Rope⭐Video Folder⭐Output Folder⭐Faces Folder &#xff08;4.2&#xff09;预览控…

Python爬虫项目实战案例-批量下载网易云榜单音乐保存至本地

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

汽车后视镜反射率检测仪厂家

随着汽车工业的快速发展&#xff0c;汽车后视镜作为驾驶员观察车辆周围环境的重要工具&#xff0c;其性能和质量对于交通安全至关重要。汽车后视镜的反射率检测仪是一种用于检测汽车后视镜反射性能的专业设备&#xff0c;其重要性不言而喻。本文将重点介绍汽车后视镜反射率检测…

射频识别RFID

射频识别&#xff08;RFID&#xff09;是 Radio Frequency Identification 的缩写。 射频识别技术是自动识别技术的&#xff0c;通过无线射频方式进行非接触双向数据通信&#xff0c;利用无线射频方式对记录媒体&#xff08;电子标签或射频卡&#xff09;进行读写&#xff0c;…

【jest使用】

Quick Start 安装&#xff1a; npm install --save-dev jest让我们开始为一个假设函数编写测试&#xff0c;该函数将两个数字相加。 首先&#xff0c;创建一个 sum.js 文件&#xff1a; function sum(a, b) {return a b; } module.exports sum;然后&#xff0c;创建一个名…

Mallox勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 在当今数字化时代&#xff0c;网络安全威胁层出不穷&#xff0c;而勒索软件&#xff08;Ransomware&#xff09;是其中最为恶劣的一种形式之一。而.Mallox勒索病毒则是近期备受关注的一种勒索软件&#xff0c;其深受全球各地用户的困扰。那么&#xff0c;让我…

VMWare ESXi安装留档

缘起 由于手边的一台Dell R730是三块硬盘raid0 &#xff0c;把我惊出一身冷汗&#xff0c;准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 &#xff0c;在寻找能否把raid0改成raid1 还不掉WSXi的方法&#xff0c;很遗憾没有找到。 ESXi软件下载 这样就要重装E…

畅心付推出二维码收款分账,开启简单分账新篇章!

随着商业环境和消费需求的变化&#xff0c;新的商业模式不断涌现&#xff0c;加速产业转型和数字化进程&#xff0c;传统商业模式也在进行变革&#xff0c;比如以往的收租模式就是其中很典型场景之一&#xff0c;如今传统租金也将迎来全面革新。畅心付推出二维码收款分账&#…

『大模型笔记』检索增强生成(RAG):从理论到LangChain实践

检索增强生成(RAG):从理论到LangChain实践 文章目录 一. 什么是检索增强生成(Retrieval-Augmented Generation, RAG)1.1. 问题背景1.2. 解决方案二. 基于LangChain实现的检索增强生成方法2.1. 准备工作2.2. 准备步骤2.3. 第一步:检索2.4. 第二步:增强2.5. 第三步:生成三. 总…

面试中单例模式有几种写法?

“你知道茴香豆的‘茴’字有几种写法吗&#xff1f;” 纠结单例模式有几种写法有用吗&#xff1f;有点用&#xff0c;面试中经常选择其中一种或几种写法作为话头&#xff0c;考查设计模式和coding style的同时&#xff0c;还很容易扩展到其他问题。这里讲解几种猴子常用的写法&…

探讨:围绕 props 阐述 React 通信

在 ✓ &#x1f1e8;&#x1f1f3; 开篇&#xff1a;通过 state 阐述 React 渲染 中&#xff0c;以 setInterval 为例&#xff0c;梳理了 React 渲染的相关内容。 &#x1f4e2; 本篇会 ✓ &#x1f1e8;&#x1f1f3; 围绕 props 阐述 React 通信 props React 组件使用 pro…

docker安装单机版canal和使用

说明&#xff1a;我安装的组件架构如下&#xff1a; 1、准备一台虚拟机&#xff0c;192.168.2.223&#xff0c;我安装的时候&#xff0c;docker只支持canal1.1.6版本&#xff0c;1.1.7无法使用docker安装.还有一点要补充&#xff0c;就是1.1.6好像不支持es8.0以上版本&#x…

Appium手机Android自动化

目录 介绍 什么是APPium&#xff1f; APPium的特点 环境准备 adb(android调试桥)常用命令 appium图形化简单使用 连接手机模拟器 使用appium桌面端应用程序 ​编辑 整合java代码测试 环境准备 引入所需依赖 书写代码简单启动 ​编辑 Appium元素定位 id定位 介…

前端配置开发环境,新电脑配置前端开发环境,Vue开发环境配置的详细过程(前端开发环境配置,电脑重置后配置前端开发环境)

简介&#xff1a;有时候&#xff0c;我们需要在新电脑 或者 电脑重置后&#xff0c;配置前端开发环境&#xff0c;具体都需要安装什么软件和插件&#xff0c;这里来记录一下&#xff08;文章适合新手和小白&#xff0c;大佬可以带过&#xff09;。 ✨前端开发环境&#xff0c;需…