场景

使用Selenium进行自动化测试,一大难题就是元素定位。虽然Selenium支持使用ID、name、Class、链接文字等多种方式进行元素识别,但对于复杂的网页,采用富客户端框架的前台界面,部分界面元素特征的稳定性无法保证,导致识别失败。如果生搬硬套使用ID、name等方式,会导致自动化脚本可用率降低,增加了投入成本。

通常情况下, 我们可以浏览器自带的定位方式, Firefox的F12, Chrome的开发者工具, 找到元素右键copy-copy xpath即可.

本文推荐使用手写定位方式,它不会局限于工具, 如果你写的相对定位, 维护成本会较低. 以下介绍XPath定位的几种方式:绝对路径、相对路径、索引号、属性值、文本内容,其中属性值和文本内容说明模糊匹配的使用。在多种XPath定位方式中,推荐使用相对路径、属性值、文本内容和Axis组合的方式,并给出界面识别的推荐规则。

通过XPath的组合,让你的自动化测试不再担心元素定位问题。

基本语法

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

定位方式

html代码如下:

<html><body link="#0000cc"><div id="wrapper" style="display: block;"><div id="content" style="display: block;"><p>请输入内容:</p><div id="u1" style="display: block;"><div id="m"><p id="lg"><p id="nv"><div id="fm"><a href="http://www.baidu.com">百度一下</a><form id="form" class="fm" action="/s" name="f1"><span class="s_ipt_wr"><input id="kw" type="text" name="wd"></body>
</html>

1.绝对路径定位

使用绝对路径的方式定位除非是其父级元素都没有一个唯一识别的元素才使用该方式;假如要定位到输入框,那么使用绝对路径的方式为:

xpath= /html/body/div/div/div/div/div/form/span/input

就是从根部开始找,一级一级往下走,如果有同级别的需要用[]标明序号,从1开始

2. 通过属性查找

  • xapth = //*[@id="kw"]
  • xpath = //input[@id="kw]
  • xpath = //input[@type="text"]
  • xpth = //input[@name="wd"]

//input表示匹配input标签的所有元素, //*表示匹配所有元素的标签
注意:要保证这些元素可以唯一的识别一个元素

3.组合定位

如果input标签中 id不是唯一的,type也不是唯一的,但在该页面中包含该id和type的只有这个元素时,那么我们可以用组合的方式定位

xpath = //input[@id="kw and @name="wd"]

当然还有or, 但是慎用

4.找父级属性

如果自己没有唯一的标志,那么就找自己的上级(父级),或者上级的上级,以此类推。

找父级:xpath=//span[@class="s_ipt_wr"]/input

找父级的父级:xpath=//form[@id="form"]/span[1]/input

5.跳级

如果需要定位的元素在该页面不是唯一,但在某个容器内是唯一的,当然那个容器必须要有唯一的标志; 跳级的话要用两个//

xpath = //div[@id="wrapper"]//input[@id="kw"]

6. 其它

  • contains: xpath =//input[contains(@id,"w")], 表示选择id中包含"w"的input节点
  • text(): xpath= //a[text()="地图"]. 由于一个节点的文本值不属于属性, ,所以,用text()函数来匹配节点

除了上述xpath定位方式以外, 还可以通过轴和步这些高阶写法来完成. 对于测试的同学来讲, 以上已经够用, 有兴趣的同学可以自行研究.

温馨提示: 大家如果觉得这个专栏还不错, 一定记得点赞收藏哟!如果学习中遇到困难, 可以发私信进行交流~

xpath获取标签的属性值_[Selenium]12.加餐: 如何手写xpath相关推荐

  1. xpath获取标签的属性值_论xpath与css定位方式

    例1:<input id="kw" name="wd" class="s_ipt" value="" maxlen ...

  2. JQuery 获取 标签中属性值

    /获取属性值 1 <div id="text" value="黑哒哒的盟友"><div> jQuery取值: $("#text ...

  3. extjs获取元素name属性值_【ExtJS】各种获取元素组件方法

    1.get().getDom().getCmp().getBody().getDoc(): get(id/obj): get方法用来得到一个Ext元素,也就是类型为Ext.Element的对象, Ex ...

  4. java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性

    目标:通过自定义注解 @Ignore 注解,觉得是否读取指定类的属性. 运行结果: [main] INFO util.FruitInfoUtil -水果的名字为:entity.Apple [main] ...

  5. python爬虫获取元素的属性值_趣说Python爬虫05--获取基金实时净值

    上一回,Python大星展示了他的独门秘籍<BS4心法> 秘籍一经面世,竟遭到大批爬者哄抢,场面不可控制... 为了防止世界被破坏,为了守护世界的和平. 该秘籍已被尘封在锁妖塔下,待有缘人 ...

  6. C#用正则表达式 获取标签的属性或值

    整理两个 在C#中,用正则表达式 获取网页源代码标签的属性或值的方法 : 1.获取标签中的值: string str="<a href=\"www.csdn.net\&quo ...

  7. python网络爬虫系列(七)——selenium的介绍 selenium定位获取标签对象并提取数据 selenium的其它使用方法

    一.selenium的介绍 知识点: 了解 selenium的工作原理 了解 selenium以及chromedriver的安装 掌握 标签对象click点击以及send_keys输入 1. sele ...

  8. html匹配属性正则表达式,正则表达式匹配html标签的属性值

    html">正则表达式是做文本解析工作必不可少的技能.如Web服务器日志分析,网页前端开发等.很多高级文本编辑器都支持正则表达式的一个子集,熟练掌握正则表达式,经常能够使你的一些工作事 ...

  9. matplotlib之pyplot模块——获取/设置对象属性值(setp()、getp/get())

    当前有效matplotlib版本为:3.4.1. 概述 pyplot模块提供了获取/设置对象属性值的接口.功能类似于Python内置函数getattr和setattr.从源码上来看,get()是get ...

最新文章

  1. 查看sqlserver被锁的表以及如何解锁
  2. android BluetoothAdapter无法搜索到蓝牙问题
  3. ActiveMQ专题
  4. Python urllib2和urllib的使用
  5. 03-15 截图、日志与录屏
  6. Myeclipse包变成文件夹
  7. 结构型模式:Decorator 装饰模式
  8. CSS引用LCD 字体 简单倒计时功能
  9. 2021年还有人用.net吗
  10. 网站被国外IP攻击 禁止海外IP访问网站的解决办法
  11. 机器非正常关机 出现ora-01033 oracle,oracle ORA-01033问题的解决办法
  12. 支付宝-沙箱环境配置和使用
  13. 一款经典的 jQuery Lightbox 灯箱效果
  14. 案牍写作中要留意的问题
  15. 迷宫算法(JAVA实现)
  16. Android TV系列 TV APP分析(一)
  17. 使文本框永远失去焦点并且去掉边框
  18. UVA10881 Piotr‘s Ants
  19. 习题 8.21 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。
  20. 2012 ACM 亚洲区总结帖

热门文章

  1. unix学习笔记1 read () write()
  2. C# 5.0将带来的五大新特性
  3. mug网络用语_各种游戏术语
  4. 拿到200万offer的钟钊带领团队将AutoML算法商用
  5. Android start stop命令使用
  6. python内置函数__init__及__str__的区别
  7. Android things:你应该了解的Android Things知识
  8. C++之基类构造函数初始化
  9. python代码命令行tab补齐_超简python命令行tab一键补全方法
  10. diff命令两个服务器文件,LINUX命令diff-文件管理-比较给定的两个文件的不同