页面元素定位 XPath 简介
页面元素定位 XPath 简介
本文所说的 Xpath 是用于 Selenium 自动化测试所使用到的,是针对XHTML网页而言的一种页面元素的定位表示法。
XPath 背景
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。
若感兴趣,可参考:https://zh.wikipedia.org/wiki/XPath ; 若不用 XML,仅需了解页面元素 XPath,下文已足够。
XPath 表示
在说明XPath元素表示法之前,需要对 HTML 语言有一定的了解,需了解 HTML的层级嵌套,html标签,Tag Id 及 属性值 等。
层级定位
若对HTML代码较熟悉,则可猜测到上图中该XPath是如何一层层定位下来的,其中如 div[2] 中 [2] 表示该层级结构下的第2个div
如果XPath的开头是一个斜线(/)代表绝对路径,元素存在一个或者不存在; 如果开头是两个斜线(//)代表相对路径,表示文件中所有符合模式的元素都会被选出来,所以可能会有多个。
如下方示例, XPath2 的元素 包括 XPath1的元素(若存在),但不一定仅仅表示XPath1(可能会有多个符合);
XPath3 为表格元素,若该页面仅存在一个 table,该层级表示法就比较直观,第1行第3列
XPath1: /html/body/div[1]/div[2]/div[1]/div[2]/div[1]/a
XPath2: //div[2]/div[1]/a
XPath3: //tr[1]/td[3]
若页面较复杂,显然取绝对路径会很长,而且若其中任一层级改动就会导致该XPath失效,/(ㄒoㄒ)/ ; 取相对路径可以减少 XPath 失效可能性,但可能产生多个元素匹配以致元素取错,这就需要判断该XPath是否可用了(下面会介绍使用浏览器插件来验证XPath)。
属性描述
XPath 语法支持节点描述,节点描述为一个逻辑真假表达式,任何真假判断表达式都可在节点后方括号里表示,这条件必须在XPath处理这个节点前先被满足。在某一步骤可有多少个描述并没有限制。
对于页面元素, 可用XPath 表示为 html l标签的属性值来定位,以百度首页为例,查看如下几个 XPath的表示法:
XPath1: //*[@id="su"]
XPath2: //*[@value="百度一下"]
XPath3: //input[@class="bg s_btn"]
XPath4: //*[@id="lg"]/img
XPath5: //a[@class="mnav"]
XPath6: //a[@class="mnav"][2]
XPath1、2、3 实际上表示的均为“百度一下” 元素,只是选取的属性值的不同; 另,这边使用了通用符 * 表示匹配任意
XPath4 表示符合[@id="lg"]元素的下层img标签,即下图中百度的图片
XPath5 表示为 class="mnav" (样式)的标签,下图可见多个链接都符合该表示法; XPath6 定位了第2个符合该条件的元素,即下图的 hao123 链接
XPath 选取策略
最理想的情况莫过于Id,唯一且开发一般不会做改动(上述例子XPath1)
其次是某Id层级下的元素(较简单的层级)(上述例子XPath4)
再次为,可确保该页面下属性值唯一且一般不做改动的,如 value="百度一下"(上述例子XPath2)
若是表格或者表单,//tr[1]/td[3] 、 //form/button 类似的表示方式也是比较可取的,但须注意页面标签的唯一性
XPath 相关插件
Selenium IDE (FireFox 插件)
其中 Target 输入框,可显示对应元素的 XPath 表示;可使用 Select 及 find
优点:1. 可自动化录制回放,显示直观,且 易用; 2. 多种可选 (属性及层级); 3. 唯一性保证
缺点:1. 仅支持FireFox; 2. div[1] 类似 [1] 不显示,显示为 div (chrome webdriver 缺失[1]可能会定位不到); 3. 多元素定位不可
Chrome 插件 XPather
优点:1. 使用直观,易用; 2. 可显示出所有满足该XPath表达式的所有元素;
缺点:1. 仅支持Chrome; 2. 需已知XPath; 3. 页面部分遮盖
优点:1. 使用直观,易用; 2. 可显示出所有满足该XPath表达式的所有元素; 3. 置于F12工具; 4. 有历史记录
缺点:1. 仅支持Chrome; 2. 需已知XPath;
页面元素定位 XPath 简介的更多相关文章
- 页面元素定位 - XPath
1. XPath 简介 2. 选取节点 2.1 选取节点表达式 2.2 XPath 运算符 2.3 XPath 常用函数 2.4 亲属关系匹配 2.5 *综合示例 1. XPath 简介 什么是 XP ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- selenium之元素定位-xpath
被测试网页的HTML代码 <html> <body> <div id="div1" style="text-align:center&quo ...
- 元素定位-XPATH定位方法总结
1.Xpath定位方法探讨 xpath是比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能.如果Xpath使用的比较好,几乎可以定位到任何页面元素,而且受页面变化影响较小. 1.1.什么 ...
- Robot Framework 教程 (2) - 页面元素定位
上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Li ...
- Python3.x:Selenium中的webdriver进行页面元素定位
Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...
- java selenium webdriver第二讲 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- 5、通过Appium Desktop实现页面元素定位
之前我们已经安装了Appium Desktop,下面就让我们使用Appium Desktop实现页面元素定位 1.首先我们打开Appium Desktop,进入如下界面,点击Start Server ...
- 定位页面元素之xpath详解以及定位不到测试元素的常见问题
一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...
随机推荐
- USACO 5.1 Musical Themes(哈希+二分)
Musical ThemesBrian Dean A musical melody is represented as a sequence of N (1 <= N <= 5000) n ...
- Codeforces Round #323 (Div. 2) E - Superior Periodic Subarrays
E - Superior Periodic Subarrays 好难的一题啊... 这个博客讲的很好,搬运一下. https://blog.csdn.net/thy_asdf/article/deta ...
- ref:如何将自定义异常的信息显示在jsp页面上
ref:https://blog.csdn.net/tao_ssh/article/details/53486449 在项目中,经常会抛出异常,输出比较友好的信息来提示用户,并指导用户行为.大体思路: ...
- 【原创】获取MySQL crash 时的core file
最近有台服务器的MySQL经常crash,为了进一步定位问题,开启了mysql core file功能,开启步骤如下,供参考 [开启步骤] 1. my.cnf文件中增加2个配置选项 [mysqld] ...
- 大数据技术之_13_Azkaban学习_Azkaban(阿兹卡班)介绍 + Azkaban 安装部署 + Azkaban 实战
一 概述1.1 为什么需要工作流调度系统1.2 常见工作流调度系统1.3 各种调度工具特性对比1.4 Azkaban 与 Oozie 对比二 Azkaban(阿兹卡班) 介绍三 Azkaban 安装部 ...
- python使用web.py开发httpserver,解决post请求跨域问题
使用web.py做http server开发时,遇到postman能够正常请求到数据,但是浏览器无法请求到数据,查原因之后发现是跨域请求的问题. 跨域请求,就是在浏览器窗口中,和某个服务端通过某个 “ ...
- map赋值前要先初始化:assignment to entry in nil map
注意这种map的嵌套的形式,make只初始化了map[string]T部分(T为map[int]int),所以下面的赋值会出现错误: test := make(map[string]map[int]i ...
- 深入理解mysql的自连接和join关联
一.mysql自连接 mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名.我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息. 一般情况我们看到这张表 ...
- 百度乐播音乐真实地址查找api接口
1.百度乐播官网:http://lebo.baidu.com: 随便点击进去一个音乐界面,如:http://lebo.baidu.com/album/9036366 2.chrome浏览器右击'检查' ...
- Hibernate之Hibernate环境搭建
Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...