UI自动化测试|XPath元素定位实践

devtools/2024/11/17 7:24:17/

前言

自动化测试元素定位是指在自动化测试过程中,通过特定的方法或策略来准确识别和定位页面上的元素,以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。

在自动化测试中,元素定位是至关重要的一步,因为测试脚本需要准确地与页面上的元素进行交互,以模拟用户的实际操作或验证页面的状态。如果元素定位不准确或失败,测试脚本将无法正确执行,导致测试失败或结果不准确。

这里分享XPath自动化测试元素定位方法

XPath 是一种在 XML 文档中查找数据的语言。它可以帮助我们快速地找到我们需要的信息。在编程中,我们可能需要从 XML 文件中提取数据,或者在网页上查找特定的元素。在这些情况下, XPath 可以帮助我们更快地找到我们需要的信息。

图片

01XPath定位策略

1)路径定位:

通过指定元素在文档树中的位置来查找元素。例如,"/html/body"可以定位到 HTML 文档中的 body 元素。

2)属性定位:

通过元素的属性值来查找元素。例如,"//div[@class='my-class']"可以定位到所有具有"class"属性且值为"my-class"的 div 元素。

3)名称定位:

通过元素的名称来查找元素。例如,"//div"可以定位到所有 div 元素。

4)索引定位:

通过元素在文档中的索引位置来查找元素。例如,"/html[1]/body"可以定位到 HTML 文档中的第一个 body 元素。

5)属性与逻辑结合:

属性与逻辑结合进行定位是指在XPath中使用属性定位和逻辑运算符(如"and"、"or"等)来查找元素。例如,"//div[@class='my-class' and @id='my-id']"可以定位到所有具有"class"属性且值为"my-class",并且同时具有"id"属性且值为"my-id"的 div 元素。

6)属性与层级结合:

属性与层级结合进行定位是指在XPath中使用属性定位和层级定位相结合的方式来查找元素。例如,"//div[@class='my-class' and parent::body]"可以定位到所有具有"class"属性且值为"my-class",并且是 body 元素的子元素的 div 元素。

02XPath表达式

python语法: find_element_by_xpath(xpath) #

# 通过元素的属性信息定位到输入框并输入"百度一下,"driver.find_element_by_xpath("//*[@autocomplete ='off']").send_keys("百度一下,")

可以在搜索框对XPath表达式进行校验

图片

图片

03定位方法实践

1)绝对路径定位

是指使用完整的元素路径来定位元素。例如,"/html/body/div"可以定位到 HTML 文档中 body 元素下的第一个 div 元素。

  • 表达式是以 /html开头,元素的层级之间是以 / 分隔

  • 相同层级的元素可以使用下标,下标是从1开始。

  • 需要列出元素所经过的所有层级元素 (工作当中, 一般不建议使用绝对路径)。

  • 示例:/html/body/div/div/div/div/div/form/span[1]/input

图片

2)相对路径定位

是指使用相对于当前元素的路径来定位元素。例如,".//div"可以定位到当前元素下的所有 div 元素。

  • 匹配任意层级的元素, 是以 // 开头。

  • 也可以使用下标,下标是从1开始。

  • 示例://span/input

图片

代码示例:​​​​​​​

# 导包import timefrom selenium import webdriver# 创建浏览器驱动对象driver = webdriver.Chrome()# 打开百度网站driver.get("https://www.baidu.com")# 通过xpath的绝对路径定位到输入框并输入"百度一下,"driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/span[1]/input").send_keys("百度一下,")# 等待2Stime.sleep(2)# 通过xpath的相对路径定位到输入框并输入"你就知道!"driver.find_element_by_xpath("//span/input").send_keys("你就知道!")# 等待3Stime.sleep(3)# 退出driver.quit()

3)元素熟悉定位

表达式格式 //*[@attribute='value'] # attribute表示的是元素的属性名,value表示的是元素对应属性值

示例(可以通过元素的任一属性进行定位):

  • //*[@autocomplete ='off']

  • //*[@class ='s_ipt']

  • ……

图片

代码示例:​​​​​​​

# 导包import timefrom selenium import webdriver# 创建浏览器驱动对象driver = webdriver.Chrome()# 打开百度网站driver.get("https://www.baidu.com")# 通过元素的autocomplete属性信息定位到输入框并输入"百度一下,"driver.find_element_by_xpath("//*[@autocomplete ='off']").send_keys("百度一下,")# 等待2Stime.sleep(2)# 通过元素的class属性信息定位到输入框并输入"你就知道!"driver.find_element_by_xpath("//*[@class ='s_ipt']").send_keys("你就知道!")# 等待3Stime.sleep(3)# 退出driver.quit()

4)属性与逻辑组合定位

表达式格式

//[@attribute1='value1' and @attribute2='value2'] 

# attribute1,attribute2表示的是元素的属性名,

value1,value2表示的是元素对应的属性值

示例://input[@autocomplete ='off'and @class ='s_ipt' ]

图片

代码示例:​​​​​​​

# 导包import timefrom selenium import webdriver# 创建浏览器驱动对象driver = webdriver.Chrome()# 打开百度网站driver.get("https://www.baidu.com")# 通过元素的属性与逻辑信息定位到输入框并输入"百度一下,你就知道!"driver.find_element_by_xpath("//input[@autocomplete ='off'and @class ='s_ipt' ]").send_keys("百度一下,你就知道!")# 等待3Stime.sleep(3)# 退出driver.quit()

5)属性与层级组合定位

  • 表达式格式 //p[@id='pa']/input

    示例://span/input[@id='kw']

图片

代码示例:​​​​​​​

# 导包import timefrom selenium import webdriver# 创建浏览器驱动对象driver = webdriver.Chrome()# 打开百度网站driver.get("https://www.baidu.com")# 通过元素的属性与层级结合定位到输入框并输入"百度一下,你就知道!"driver.find_element_by_xpath("//span/input[@id='kw']").send_keys("百度一下,你就知道!")# 等待3Stime.sleep(3)# 退出driver.quit()

http://www.ppmy.cn/devtools/134648.html

相关文章

开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-串行调用多个tools(三)

一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将介绍如何…

细粒度集群

直觉是 贡献相同频率的标记的日志消息 更有可能有相同的模版, 具体来说,我们首先对每条日志消息进行标记, 然后计算所有标记的评率。 期间上述过程中, 在 Scipy库里 stop 单词是被排除在外以消除不相关的标记。 对于每条日志,选择使用top-K频率标记, 分类到不同的 粗粒度集群。…

速通前端篇 —— HTML

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:速通前端 目录 HTML的介绍 如何创建HTML文件 HTML 文件基本结构 HTML常用标签 title标签 标题标签 h1-h6 段落标签 p 换行标签 b…

Spring boot + Vue2小项目基本模板

Spring boot Vue2小项目基本模板 基本介绍基本环境安装项目搭建最终效果展示 基本介绍 项目来源哔哩哔哩的青戈,跟着学习搭建自己的简单vue小项目;看别人的项目总觉得看不懂,需要慢慢打磨 这里目前只简单的搭建了菜单导航和表格页面&#x…

vue2和vue3:diff算法的区别?

Vue 2 和 Vue 3 在 diff 算法方面的主要区别是: Vue 2 使用普通的 diff 算法,它会遍历所有的节点进行比对。 Vue 3 引入了 patch flag 的概念,并且对 diff 算法进行了优化,比如在相同层级的节点间不会去递归比对已经被移除的节点…

服务器数据恢复——Ext4文件系统使用fsck后mount不上的数据恢复案例

关于Ext4文件系统的几个概念: 块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组结构基本上相同。 块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述…

使用阿里云远程访问 Synology Web Station 的指南

使用阿里云远程访问 Synology Web Station 的指南 本文将指导如何通过阿里云服务器配置 Nginx 和 FRP,远程访问部署在 Synology NAS 上的 Web Station 服务,同时支持 HTTPS 安全访问。 背景 通过 Synology NAS 的 Web Station,可以部署 Wor…

企业网络链路聚合、数据抓包、远程连接访问实验

前言: 随着信息技术的飞速发展和企业业务的不断扩大,企业网络面临着越来越多的挑战。其中,网络带宽、数据安全和远程访问等问题尤为突出。为了解决这些问题,我们进行了本次企业网络链路聚合、数据抓包和远程连接访问的实验。 链路…