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

UI自动化测试--02(Xpath与CSS定位全攻略)

1.Xpath定位xpath和css定位可以利用以下元素的信息来完成定位层级结构元素自身的所有信息什么是Xpath是一种专门在xml文档中找元素的公式表达式而HTML刚好和XML结构很类似所以XPATH的表达 式也可以用于在HTML中找元素Xpath的定位方法:使用xpath的公式找指定元素driver.find_element_by_xpath(xpath的表达式)1.1路径定位绝对路径从最顶级标签到指定所要定位的元素所经过的所有层级-- /html/body/div/div/div/form/input注意:绝对路径在实际工作中用的比较少,对于页面的结构过于依赖一般不用相对路径从目标元素的任意祖辈元素开始查找缩小查找范围//form表示找到页面中所有标签名为form的元素//form/input表示找到页面中标签名为form且该form标签元素有一个input标签儿子元素案例# 1.绝对路径:用户名输入框输入admin driver.find_element_by_xpath(/html/body/div/fieldset/form/p[1]/input).send_keys(admin) time.sleep(3) # 2.相对路径:密码输入框输入123 driver.find_element_by_xpath(//form/p[2]/input).send_keys(123)1.2属性定位策略概念利用所要定位的元素自身任意的属性信息来进行定位任意元素定位都有可能定位到多个符合条件的元素对象所以在挑选属性时一般挑选特有的怎么知道是特有的id-name-class-value-其他一个个试可以支持使用id、class、name表达式a namezsid123456classt1typepasswordstyle123//*[id123456]//*匹配界面上所有元素,条件该元素必须有id属性且id的属性值必须为123456//a[classt1]//a匹配界面上所有的a标签元素条件该a标签必须有class属性且class属性值必须为t1//*[style123]案例# 1.属性定位:用户名输入框输入admin driver.find_element_by_xpath(//*[placeholder请输入用户名]).send_keys(admin)1.3属性与逻辑结合概念当元素自身的一个属性无法精准定位时可以同时使用多个属性来进行限制一般最多挑选2个超过2个想其他办法表达式//*[属性名1属性值1and属性名2属性值2]案例# 1.属性与逻辑结合定位:test1输入框输入admin driver.find_element_by_xpath(//*[classlogin and nameuser]).send_keys(admin)1.4属性与层级结合概念元素自身属性无法精准定位时可以先定位其父级元素再定位子元素案例# 1.属性与层级结合定位:test1输入框输入admin driver.find_element_by_xpath(//p[idp1]/input).send_keys(admin)1.5 XPATH延伸文本定位//*[text()元素的全部文本信息]局部属性值//*[contains(属性名,局部属性值)]局部文本//*[contains(text(),局部文本)]案例# 1.局部属性定位:用户名输入框输入admin driver.find_element_by_xpath(//*[contains(placeholder,用户)]).send_keys(admin) time.sleep(2) # 2.文本定位:定位百度超链接,并点击 driver.find_element_by_xpath(//*[text()百度]).click() time.sleep(2) # 3.局部文本定位:定位hao123,并点击 driver.find_element_by_xpath(//*[contains(text(),hao)]).click()第一阶段有id-name-class-其他属性-层级-copy第二阶段语法都清楚先copy分析是否是最优定位方式不优则优化2、CSS定位什么是CSS给HTML元素添加样式的一种语言。通过选择器的表达式可以找到对应的标签。selenium提供的具体方法driver.find_element_by_css_selector(选择器的表达式)CSS选择器:1.ID选择器: #id的属性值 2.class选择器类选择器: .class其中一个属性值 3、元素定位的另外一种写法 8种元素定位的另外一种实现方式也是selenium提供的固定方法。 注意:在最新版本selenium 4.1 只有下面的写法了 8种元素定位方式底层都是调用driver.find_element(by通过By来指定定位方式,value选中的定位所对应的 值) 3.属性选择器: [属性名属性值] 标签名[属性名属性值] 4.元素选择器: 标签名 # 1).使用CSS定位方式中id选择器定位用户名输入框并输入admin driver.find_element_by_css_selector(#userA).send_keys(admin) time.sleep(2) # 2).使用CSS定位方式中属性选择器定位密码输入框并输入123456 driver.find_element_by_css_selector(input[placeholder请输入密码]).send_keys(123456) time.sleep(2) # 3).使用CSS定位方式中class选择器定位电话号码输入框并输入18600000000 driver.find_element_by_css_selector(.telA).send_keys(18600000000) time.sleep(2) # 4).使用CSS定位方式中元素选择器定位注册按钮并点击 driver.find_element_by_css_selector(button).click() 5.层级选择器 5.1 父子关系: 定位父级元素子元素 5.2 后代关系: 定位祖辈元素 后代元素 # 1).父子关系:定位用户名输入框,输入admin driver.find_element_by_css_selector(#painput).send_keys(admin) time.sleep(2) # 1).后代关系:定位用户名输入框,输入admin driver.find_element_by_css_selector(#pa input).send_keys(admin) //*[idpa]input ---- 错误写法CSS选择器表达式 和 XPATH表达式不能混用 6.局部属性值: 标签名[属性名*局部属性值] 属性与逻辑结合:[属性名1属性值1][属性名2属性值2] # 1).局部属性定位:定位用户名输入框并输入admin driver.find_element_by_css_selector([placeholder*名]).send_keys(admin)3、元素定位的另外一种写法8种元素定位的另外一种实现方式也是selenium提供的固定方法。注意:在最新版本selenium 4.1只有下面的写法了8种元素定位方式底层都是调用driver.find_element(by通过By来指定定位方式,value选中的定位所对应的值)# ④ 执行测试步骤 # 1).id定位:定位用户名输入框并输入admin driver.find_element(By.ID, userA).send_keys(admin) time.sleep(2) # 2).XPATH属性定位:密码输入框并输入123456 driver.find_element(By.XPATH, //*[placeholder请输入密码]).send_keys(123456) time.sleep(2) # 3).使用CSS定位方式中class选择器定位电话号码输入框并输入18600000000 driver.find_element(By.CSS_SELECTOR, .telA).send_keys(18600000000) time.sleep(2) # 4).标签名定位注册按钮并点击 driver.find_element(By.TAG_NAME, button).click()By需要导包快捷导包方式,ALTENTER回车快捷导包:① 写好类名千万别写错② 光标放置到类名后按alt回车-选择import包4、元素定位方式的选择有ID优先使用ID定位,无ID-看Name属性-无Name属性-看Class属性无CLASS属性-看其他属性单个属性不行-使用多个属性属性都不能精准定位-层级看文本定位一组元素通过下标来选择copy表达式注意:分析copy出来的表达式为什么可以找到对应的原因建议:如果记忆有一些混淆的情况,降低记忆的工作量,可以直接全部都使用XPATH定位5、获取元素信息# 1).获取用户名输入框的大小 print(用户名输入框的大小, driver.find_element(By.ID, userA).size) # 2).获取页面上第一个超链接的文本内容 print(第一个超链接的文本内容, driver.find_element(By.TAG_NAME, a).text) # 3).获取页面上第一个超链接的地址 print(第一个超链接的地址, driver.find_element(By.TAG_NAME, a).get_attribute(href)) # 4).判断页面中的span标签是否可见 print(span标签可见的实际状态为, driver.find_element(By.TAG_NAME, span).is_displayed()) # 5).判断页面中取消按钮是否可用 print(取消按钮实际可用状态为, driver.find_element(By.ID, cancelA).is_enabled()) # 6).判断页面中旅游对应的复选框是否为选中的状态 print(旅游的勾选状态为, driver.find_element(By.ID, lyA).is_selected())6、常用的浏览器操作方法窗口最大化: driver.maximize_window()页面刷新: driver.refresh()当前窗口:运行代码时webdriver.Chrome(),第一次打开的窗口为当前窗口无论后续弹出多少个新的窗口 当前窗口始终为第一个所有的元素定位、关闭当前窗口都只能对于当前窗口中内容进行操作。如想对于新弹出来的窗口元素进行定 位和操作必须学习切换窗口的方法。# ④ 执行测试步骤 time.sleep(3) # 2).打印当前窗口的标题和地址 print(点击访问 百度 网站 超链接之前当前窗口的标题, driver.title) print(点击访问 百度 网站 超链接之前当前窗口的地址, driver.current_url) # 3).暂停3s,点击界面 访问 百度 网站 超链接 time.sleep(3) driver.find_element(By.ID,fw).click() # 4).暂停3s,再次打印当前窗口的标题和地址 time.sleep(3) # 点击之后当前窗口依然为注册A页面,当前窗口是指浏览器打开时的第一个窗口,除非使用窗口切换才会变更当前窗口 print(点击访问 百度 网站 超链接之后当前窗口的标题, driver.title) print(点击访问 百度 网站 超链接之后当前窗口的地址, driver.current_url) # 5).暂停3s,关闭当前窗口 time.sleep(3) driver.close()

相关文章:

UI自动化测试--02(Xpath与CSS定位全攻略)

1.Xpath定位xpath和css定位可以利用以下元素的信息来完成定位: 层级结构 元素自身的所有信息 什么是Xpath: 是一种专门在xml文档中找元素的公式(表达式),而HTML刚好和XML结构很类似,所以XPATH的表达 式也可…...

LFM2.5-1.2B-Thinking-GGUF入门指南:Web UI界面功能与Thinking后处理解读

LFM2.5-1.2B-Thinking-GGUF入门指南:Web UI界面功能与Thinking后处理解读 1. 模型与平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。该模型采用GGUF格式存储,配合llama.cpp运行时&#x…...

告别数据标注!用Dynablox+Voxblox在ROS2上实现实时动态物体检测(保姆级配置)

零标注动态感知革命:DynabloxVoxblox在ROS2中的实战部署指南 当机器人在商场扶梯间遇到滚动的玩具球,或在仓库中识别扛着纸箱的工人时,传统基于深度学习的检测方法往往需要大量场景特定的标注数据。ETH Zurich与MIT联合发布的Dynablox技术&am…...

LFM2.5-1.2B-Thinking-GGUF集成Python爬虫实战:智能数据采集与清洗

LFM2.5-1.2B-Thinking-GGUF集成Python爬虫实战:智能数据采集与清洗 1. 当爬虫遇上大模型:数据采集的新思路 传统爬虫开发就像在迷宫里摸索前行——你需要手动解析每个网站的HTML结构,针对不同反爬机制编写特定规则,还要处理杂乱…...

零基础吃透静态链表(数组模拟链表):从原理到代码,新手全疑问一次性解决

本文面向刚入门数据结构、已掌握动态链表但看不懂静态链表的新手,全程从已知到未知,循序渐进拆解所有核心知识点、代码逻辑和新手高频误区,看完就能彻底吃透静态链表。目录什么是静态链表?和动态链表的核心区别静态链表的核心规则…...

FireRedASR Pro应用案例:会议录音转文字,提升工作效率实测

FireRedASR Pro应用案例:会议录音转文字,提升工作效率实测 1. 会议记录痛点与解决方案 1.1 传统会议记录的效率瓶颈 在职场工作中,会议记录是一项耗时且容易出错的任务。根据调研数据显示: 普通员工平均每周花费4-6小时在会议…...

Pcap-Analyzer:Python可视化离线数据包分析工具全攻略

Pcap-Analyzer:Python可视化离线数据包分析工具全攻略 【免费下载链接】Pcap-Analyzer Python编写的可视化的离线数据包分析器 项目地址: https://gitcode.com/gh_mirrors/pc/Pcap-Analyzer 一、功能解析:数据包分析的瑞士军刀 1.1 核心功能图谱…...

大模型入门学习教程(非常详细)非常详细收藏我这一篇就够了!大模型教程

本文系统介绍了LLM(大型语言模型)的基础知识,包括机器学习的数学基础、Python编程及其在数据科学中的应用、神经网络原理等。文章深入剖析了LLM科学家和工程师的角色,涵盖了大型语言模型架构、指令数据集构建、预训练模型、监督微…...

二维码生成新体验:Amazing-QR核心功能与个性化应用指南

二维码生成新体验:Amazing-QR核心功能与个性化应用指南 【免费下载链接】amazing-qr 💮 amazing QRCode generator in Python (supporting animated gif) - Python amazing 二维码生成器(支持 gif 动态图片二维码) 项目地址: ht…...

HunyuanVideo-Foley环境音生成挑战赛:最佳提示词与生成作品赏析

HunyuanVideo-Foley环境音生成挑战赛:最佳提示词与生成作品赏析 1. 挑战赛背景与规则 最近,一场以"城市夜晚"为主题的HunyuanVideo-Foley环境音生成挑战赛吸引了众多音频创作者参与。这场赛事要求参赛者使用HunyuanVideo-Foley系统&#xff…...

3步实现专业级3D建模:突破性AI工具全解析

3步实现专业级3D建模:突破性AI工具全解析 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 在数字创作领域,AI 3D建模正在改变传统流程,而单图转3D…...

前后端框架模式对比(golang)

前后端架构模式对比:分离与不分离 现代Web开发中,前后端架构的选择直接影响开发效率、维护成本和系统性能。结合Golang的实现,可以更清晰地分析前后端分离(如REST API 前端框架)与不分离(如服务端渲染&…...

SQLiteGo:国产 ARM (aarch64) 银河麒麟 SQLite 数据库管理和数据分析工具分享

SourceURL:file:///home/Quincy/桌面/国产ARM环境 SQLite 管理实践:SQLiteGo 工具适配与数据分析优势分享.docx 在银河麒麟(aarch64架构)等国产ARM环境下,无论是开发者的日常数据库运维,还是数据分析师的高频数据处理…...

【Python 教程】如何将 JSON 数据转换为 Excel 工作表

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

python中的枚举类

一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。 针对这种特殊的类,Python 3.4 中新…...

Copilot 命令行使用方式介绍(npm)

1. 什么是 Apache SeaTunnel? Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题,如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…...

AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案

AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trendi…...

如何高效获取六大网盘直链下载地址:开源工具的实用指南

如何高效获取六大网盘直链下载地址:开源工具的实用指南 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 在当今数字时代,网盘已成为我们日常工作和学习中不可或缺的工具…...

字节MidScene 手机自动化

1 框架介绍 Midscene 是一个可通过自然语言描述目标和步骤,自动规划并操作用户界面、执行自动化的框架。 框架地址:https://midscenejs.com/zh/支持端:Android、iOS、鸿蒙、桌面、浏览器核心特性 自然语言控制跨平台自动化同时支持智能执行…...

ESXI系统安装全攻略:从U盘启动到网络配置

1. ESXI系统安装前的准备工作 第一次接触ESXI系统的朋友可能会觉得有点懵,其实它就是一个专门用于虚拟化的操作系统。简单来说,它能让一台物理服务器变成多台虚拟服务器,特别适合用来搭建测试环境或者部署云服务。我自己在数据中心工作时&…...

遥感图像小目标检测实战:手把手教你用FFCA-YOLO在AI-TOD数据集上复现论文结果

遥感图像小目标检测实战:手把手教你用FFCA-YOLO在AI-TOD数据集上复现论文结果 当你在处理遥感图像时,是否经常遇到那些小到几乎看不清的目标?这些目标可能只有十几个像素大小,却承载着重要的信息。FFCA-YOLO作为TGRS 2024的最新研…...

Materialize:智能PBR材质转化引擎赋能3D创作流程重构

Materialize:智能PBR材质转化引擎赋能3D创作流程重构 【免费下载链接】Materialize Materialize is a program for converting images to materials for use in video games and whatnot 项目地址: https://gitcode.com/gh_mirrors/mate/Materialize 在3D内容…...

Go语言中的工具链:从go build到go generate

Go语言中的工具链:从go build到go generate 前言 作为一个在小厂挣扎的Go后端老兵,我对工具链的理解就一句话:能自动化的绝不手动。 想当年在大厂时,工具链那叫一个完善,从代码编译到部署上线,全程自动化。…...

Java毕业设计基于springboot+vue的校内兼职信息管理系统

前言 Spring Boot 校内兼职信息管理系统是以 Spring Boot 框架为核心搭建的,专门用于高效管理校园内各类 兼职信息的平台。随着校园生活的多元化发展,学生对兼职机会的需求日益增长,传统的兼职信息发布与管理方式杂乱无章,存在信息…...

Catime终极指南:3个技巧让你成为Windows番茄时钟大师

Catime终极指南:3个技巧让你成为Windows番茄时钟大师 【免费下载链接】Catime A very useful timer (Pomodoro Clock).[一款非常好用的计时器(番茄时钟)] 项目地址: https://gitcode.com/gh_mirrors/ca/Catime Windows番茄时钟、桌面倒计时工具和时间管理软件…...

Go语言中的跨平台开发:从Windows到Linux

Go语言中的跨平台开发:从Windows到Linux 前言 作为一个在小厂挣扎的Go后端老兵,我对跨平台开发的理解就一句话:能跨平台的绝不局限。 想当年在大厂时,开发环境和生产环境都是Linux,跨平台开发的需求不大。现在到了小厂…...

Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环

Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环 整体概述 多工具分发核心实现是基础智能体循环的直接扩展,核心思想就是: “加一个工具, 只加一个 handler” – 循环不用动, 新工具注册进 dispatch map 就行。 …...

DHA之后,大脑营养进入GPC时代?

近年来,青少年脑健康逐渐成为家庭关注的重要议题。随着学习节奏加快、信息环境复杂,家长对于孩子专注力、记忆力以及学习效率的关注度不断提升。行业报告显示,国内DHA藻油相关产品市场规模持续扩大,预计2026年市场规模将达到超320…...

关于我使用MinMix创建了一个Tailwindcss学习网站

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具

gitru 基于 Git 的 commit-msg Hook 实现,用于在提交阶段自动校验提交信息格式。 在团队协作开发中,规范的 Git 提交信息是代码追溯、版本管理、自动生成变更日志的基础。 但现实往往是: 人工约束容易遗漏手动配置 Hook 繁琐提交信息格式随心…...