当前位置: 首页 > news >正文

UI自动化教程 —— 元素定位技巧:精确找到你需要的页面元素

引言

在UI自动化测试中,准确地定位页面元素是至关重要的。无论是点击按钮、填写表单还是验证页面内容,都需要首先找到相应的页面元素。Playwright 提供了多种方法来实现这一点,包括使用CSS选择器和XPath进行元素定位,以及利用文本内容、属性值等高级策略。本文将详细介绍这些技术,并分享一些动态等待元素加载的最佳实践。

图片

一、使用CSS选择器和XPath进行元素定位

CSS选择器和XPath是两种最常见的元素定位方式。它们允许你根据HTML结构中的标签名、类名、ID以及其他属性来精确定位元素。

CSS选择器示例:

from playwright.sync_api import sync_playwrightdef run(playwright):    browser = playwright.chromium.launch(headless=False)    page = browser.new_page()    page.goto("http://example.com")    # 使用CSS选择器定位并点击一个按钮    page.click("button.submit-button")    browser.close()with sync_playwright() as playwright:    run(playwright)

在这个例子中,我们使用了一个简单的CSS选择器"button.submit-button"来定位具有submit-button类的按钮元素。

XPath示例:

# 使用XPath定位并点击一个按钮page.click("//button[@class='submit-button']")

XPath提供了比CSS选择器更强大的查询能力,特别是当你需要基于复杂的条件来查找元素时。

图片

二、利用文本内容、属性值等高级定位策略

除了基本的选择器外,Playwright还支持通过元素的文本内容或特定属性来进行定位。

按文本内容定位:

# 定位包含特定文本的链接并点击page.click('text="Click Me"')

这种方法非常适合用于那些没有独特ID或类名的元素。

按属性值定位:

# 定位具有特定属性值的输入框并填充数据page.fill("input[name='email']", "test@example.com")

这里,我们通过name属性找到了对应的输入框,并向其中输入了电子邮件地址。

图片

三、动态等待元素加载的最佳实践

在实际应用中,页面元素可能不会立即可用,尤其是在动态加载的内容中。为了确保脚本的稳定性,我们需要动态地等待元素出现。

显式等待示例:

# 等待某个特定元素变得可见后再进行操作page.wait_for_selector("input[name='username']")page.fill("input[name='username']", "myUsername")

这种方法可以避免由于元素尚未加载而导致的错误。

隐式等待(自动等待):

Playwright 默认会自动等待网络响应、DOM变化等,这意味着你通常不需要手动设置显式的等待时间。但是,在某些情况下,如处理AJAX请求或动画效果时,仍然建议使用显式等待以确保更高的可靠性。

图片

四、处理动态变化的页面元素

有些页面元素可能会根据用户交互或其他因素而动态变化。在这种情况下,传统的静态定位方法可能不再适用。为此,Playwright 提供了一些高级功能来应对这种情况。

动态内容示例:

假设有一个下拉菜单,其选项列表是通过AJAX请求动态生成的:

# 动态等待下拉菜单加载完毕page.wait_for_selector("select#dynamicOptions")# 选择下拉菜单中的第一个选项page.select_option("select#dynamicOptions", index=0)

在这个例子中,我们首先等待下拉菜单完全加载,然后选择其中一个选项。这种方法确保了即使元素是动态生成的,我们的脚本也能正常工作。

处理重叠元素:

有时,页面上的元素可能会被其他元素遮挡,导致无法直接点击。为了解决这个问题,你可以使用JavaScript来执行点击操作:

# 使用JavaScript点击被遮挡的元素page.evaluate("document.querySelector('button.hidden').click()")

这种方法绕过了Playwright默认的行为模型,直接在浏览器环境中执行JavaScript代码。

图片

结语

通过本文的学习,你应该掌握了如何使用CSS选择器和XPath精准定位页面元素,以及如何利用文本内容和属性值进行高级定位。同时,你也了解了动态等待元素加载的重要性及其最佳实践,以及处理动态变化页面元素的方法。

接下来的文章中,我们将深入探讨如何处理表单和用户输入,展示更多实用的自动化测试技巧。如果你有任何问题或想要了解更多,请随时留言交流!

希望这篇文章能帮助你在UI自动化测试的道路上更加得心应手!

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

UI自动化教程 —— 元素定位技巧:精确找到你需要的页面元素

引言 在UI自动化测试中,准确地定位页面元素是至关重要的。无论是点击按钮、填写表单还是验证页面内容,都需要首先找到相应的页面元素。Playwright 提供了多种方法来实现这一点,包括使用CSS选择器和XPath进行元素定位,以及利用文本…...

MySQL六大日志的功能介绍。

前言 首先,MySQL的日志应该包括二进制日志(Binary Log)、错误日志(Error Log)、查询日志(General Query Log)、慢查询日志(Slow Query Log)、重做日志(Redo …...

二级指针略解【C语言】

以int** a为例 1.二级指针的声明 a 是一个指向 int*(指向整型的指针)的指针,即二级指针。 通俗的讲,a是一个指向指针的指针,对a解引用会是一个指针。 它可以用于操作动态分配的二维数组、指针数组或需要间接修改指针…...

鸿蒙状态管理概述

状态管理 状态管理之v1LocalStorageLocalStorageLink的框架行为LocalStorageProp的框架行为LocalStorage使用场景 AppStorageStorageLink的框架行为StorageProp的框架行为AppStorage的使用场景 PersistentStorageEnvironmentEnvironment内置参数 WatchWatch的使用场景 $$语法$$…...

【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》

引言:为什么自监督学习成为AI新宠? 在传统监督学习需要海量标注数据的困境下,自监督学习(Self-Supervised Learning)凭借无需人工标注的特性异军突起。想象一下,如果AI能像人类一样通过观察世界自我学习——这正是DeepSeek图像补全方案的技术哲学。根据,自监督学习通过…...

由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)

最近,随着DeepSeek的爆火,GRPO也走进了视野中。为了更好的学习GRPO,需要对PPO的强化学习有一个深入的理解,那么写一篇文章加深理解吧。纵观网上的文章,要么说PPO原理,各种复杂的公式看了就晕,要…...

网络安全三件套

一、在线安全的四个误解     Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在机器和系统中留下了“…...

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

目录 1 环境搭建 2 交叉编译opencv 3 模型训练 4 模型转换 4.1 pt模型转onnx模型 4.2 onnx模型转rknn模型 4.2.1 安装rknn-toolkit 4.2.2 onn转成rknn模型 5 升级npu驱动 6 C++推理源码demo 6.1 原版demo 6.2 增加opencv读取图片的代码 7 交叉编译x264 ffmepg和op…...

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-005测试用例 用例ID测试场景验证要点参考条款预期…...

python-leetcode 35.二叉树的中序遍历

给定一个二叉树的根节点root,返回它的中序遍历。 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过…...

glob 用法技巧

目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...

CodeGPT 使用教程(适用于 VSCode)

CodeGPT 使用教程(适用于 VSCode) CodeGPT 是一个 VSCode 插件,可以让你在代码编辑器中直接调用 GPT 进行代码补全、优化、调试等操作。以下是详细的安装和使用步骤: 1. 安装 CodeGPT 方式 1:从 VSCode 插件市场安装…...

以下是MySQL中常见的增删改查语句

以下是MySQL中常见的增删改查语句: 增加数据(INSERT) 基本语法: INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...); 示例:向名为 students 的表中插入一条学生记录, id 为1&am…...

Vue3 与 TypeScript 实战:核心细节与最佳实践

引言 Vue3 的 Composition API 与 TypeScript 的强类型支持完美契合,极大提升了代码的可维护性和开发体验。本文将深入探讨 Vue3 TypeScript 的关键细节,并通过实际代码示例展示如何高效结合二者。 一、组合式 API 与类型推导 Vue3 的 setup 函数与 T…...

23种设计模式 - 解释器模式

模式定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言(如数控系统的G代码)定义文法规则,并构建解释器来解析和执行该语言的语句。它通过将语法规则分解为多个类,实现…...

常用的 React Hooks 的介绍和示例

目录 1. useState2. useEffect3. useContext4. useReducer5. useCallback6. useMemo7. useRef8. useImperativeHandle9. useLayoutEffect10. useDebugValue 常用的 React Hooks 的介绍和示例: 1. useState useState 是一个用于在函数组件中添加状态的 Hook。 impo…...

ChatGLM-6B模型

ChatGLM-6B 是由 清华大学人工智能研究院(THU AI) 和 智源研究院(BAAI) 开发的一款中文对话生成大语言模型。它是ChatGLM系列的一个版本,其核心特点是基于GLM(General Language Model)架构&…...

编译安装php

前置准备 这里的可能不全,每个人安装的模块不一致,依赖也不不相同,按实际情况调整 yum install libxml2 -y yum install libxml2-devel -y yum install openssl-devel -y yum install sqlite-devel -y yum install libcurl-devel -yyum ins…...

【JavaEE进阶】Spring MVC(3)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...

30 款 Windows 和 Mac 下的复制粘贴软件对比

在日常电脑操作中,复制粘贴是极为高频的操作,一款好用的复制粘贴软件能极大提升工作效率。以下为你详细介绍 30 款 Windows 和 Mac 下的复制粘贴软件,并对比它们的优缺点,同时附上官网下载地址,方便大家获取软件。 Pa…...

Portarium:轻量级本地服务可视化管理的Go语言实现

1. 项目概述:一个轻量级、可视化的端口管理工具最近在折腾一些本地开发环境,经常需要同时运行好几个后端服务、数据库和前端项目。每次启动项目,都得手动记下哪个服务跑在哪个端口上,或者去翻看一堆启动日志,效率低下不…...

Bapaco机械键盘PC:x86计算平台与超宽触摸屏的创新融合

1. Bapaco机械键盘PC概述Bapaco是一款由深圳SIDIQIAO科技公司开发的创新型机械键盘PC设备,它将完整的x86计算平台与机械键盘和12.3英寸超宽触摸屏整合在一个紧凑的机身中。这款设备采用了Intel第12代Alder Lake架构的Core i5-1235U处理器,配备10核12线程…...

一键部署Phi-3.5-mini-instruct:支持中英双语的代码辅助助手

一键部署Phi-3.5-mini-instruct:支持中英双语的代码辅助助手 1. 引言:轻量级多语言模型新选择 Phi-3.5-mini-instruct是微软最新推出的轻量级指令微调大语言模型,专为多语言对话和代码辅助任务优化。作为仅有3.8B参数的紧凑模型&#xff0c…...

从开机到满格信号:你的手机是如何“认路”和“选家”的?深入浅出解析PLMN选择全流程

从开机到满格信号:你的手机是如何“认路”和“选家”的?深入浅出解析PLMN选择全流程 想象一下,当你按下手机电源键的瞬间,一场精密的城市探险正在你的掌中悄然展开。这部智能终端如同一位初到陌生城市的旅人,需要在错综…...

MirrorCaster:三分钟掌握毫秒级延迟的安卓投屏黑科技

MirrorCaster:三分钟掌握毫秒级延迟的安卓投屏黑科技 【免费下载链接】MirrorCaster 开源、高效、低延迟的Android投屏工具 项目地址: https://gitcode.com/gh_mirrors/mi/MirrorCaster 还在为手机游戏直播卡顿而烦恼吗?还在为商务演示时手机画面…...

8400万骑手的好消息:中央出手,平台不能再随意压薪、卡算法了

大家好,我是LeafStay。职场 今天(4月27日)的头条,不是大模型,是这个:中共中央办公厅、国务院办公厅正式发布《关于加强新就业群体服务管理的意见》,人民日报今日头版刊发。这份文件,…...

数据库慢查询日志分析实战

数据库慢查询日志分析实战:提升性能的关键利器 在数据库运维中,慢查询日志是定位性能瓶颈的重要工具。当应用响应变慢时,慢查询日志能帮助开发者快速发现执行效率低下的SQL语句,从而优化数据库性能。本文将围绕慢查询日志分析的核…...

AffordBot框架:3D功能感知与多模态大语言模型融合

1. AffordBot框架概述:当3D场景理解遇上多模态大语言模型在机器人抓取一个门把手时,它需要的不仅仅是识别"门"这个物体,更要理解"把手可以旋转"这一隐含功能。这正是3D细粒度功能感知(Fine-grained Affordanc…...

面试官问我C++的const和虚函数,我这样回答让他当场给了offer

征服C面试:从const到虚函数的深度解析与实战技巧 1. 面试中的C核心概念解析 在技术面试中,C的基础概念往往是考察的重点。面试官通常会从最基础的const关键字开始,逐步深入到虚函数、模板等高级特性。掌握这些核心概念不仅能帮助你在面试中脱…...

STC8H的EEPROM,用IAP还是MOVC读?两种方式详细对比与选择指南

STC8H EEPROM读取策略深度解析:IAP与MOVC的实战抉择 1. 理解STC8H EEPROM的架构特性 STC8H系列单片机内置的EEPROM存储空间是其区别于传统51架构的重要标志。以STC8H8K64U为例,64KB的存储空间被划分为程序存储区和用户数据区,这种设计消除了外…...