XPath编写规则学习
辅助工具:firefox安装findbugs,view Xpath
firefox :Xpath验证方式:$x("xpath"); 粘贴xpath语句回车即可
定位:
1、依靠自己属性,文本定位:
//td[text()='test']
//div[contains(@class,'test')]
//input[@type='radio' and @value='1']
//span[@name='bruce' and text()='bruce2'] 或 //span[@name='bruce'][ text()='bruce2'] --and关键字
//span[@name='bruce' or text()='bruce2'] --or关键字
2、依靠父节点定位:
//div[@class='test mytest']/div
//div[@id='test']/div
3、依靠子节点定位
//div[div[@id='test']] --寻找含有id=test的div的div
//div[div[@name='test']]
//div[p[@id='test']]
4、混合型定位
//div[div[@name='test']]/img
//td[a//font[contains(text(),'test')]]//input[@type='checkbox']
5、高级方法
(1)following-sibling ---寻找紧跟定位到的元素的下一个元素
例子://input[@id='1234']/following-sibling=input --定位紧跟id=1234的下一个的input元素,同级有效
//input[@id='1234']/following-sibling::input ,input后可再跟条件
(2)preceding-sibling ---寻找紧跟定位到的元素的上一个元素
例子://input[@id='123']/preceding-sibling=span --定位紧跟id=123的上一个span元素
//input[@id='1234']/preceding-sibling::input ,input后可再跟条件
(3)starts-with --判断是否以某关键字开头
例子://input[starts-with(@id,'test')]
(4)contains -- 是否包含某关键字
例子: //td[a//font[contains(text(),'test')]]//input[@type='checkbox']
(5)not ---不包含某关键字
例子://input[not(@id='1234')]
//span[not(contaions(text(),'xpath'))]
6、索引关键字,position,last
(1)position()=2
position()>3
position()<5
例子://div[@id='test']/span[2]或
//div[@id='test']/span[position()=2] --正数第2个span
(2)last()-1
例子://div[@id='test']/span[last()-2] --倒数第2个span元素
7、根据属性定位
//div[@class] --查找含有class属性的div
//div[@class='test'] --查找含有class属性且class属性值为test的的div元素
8、不常用关键字
(1)substring,语法:substring(str,start_postion,length) ,从1开始计算
例子://div[@id='test']/span[substring(@name,3,5)='bruce'] --找name的第三位开始总共5位字母为bruce的span
(2)substring-before ,语法:substring-before(str,substr)
例子://div[@id='test']/span[substring-before(@class,'-')='spanclass'] --查找分割关键字前面的字符为spanclass的span
(3)substring-after,语法:substring-after(str,substr)
例子://div[@id='substring']/span[substring-after(@class,'-')='spanclass'] --查找分割关键字后面的字符为spanclass的span
9、通配符:*
//span[@*='bruce']
//*[@*='bruce']
//*[@name='bruce']
10、axes 轴
(1)parent 父节点
例子://div[span[text()='+++test']]/parent::div[contaions(text(),'test')] --查找含有span的text为+++test的的div的父节点
//div[span[text()='+++test']]/parent::div/span[contaions(text(),'test')]
(2)ancestor 祖先节点
例子://div[span[text()='+++test']]/ancestor::div
(3)descendant 孙子节点
例子://div[span[text()='+++test']]/descendant::div --会将该节点下的所有div打印出来
//div[span[text()='+++test']]/descendant::div/span[contaions(text(),'test')]
(4)following 将当前节点下后面所有的指定节点取出
例子://div[text()='current NodeA']/following::div --会将current NodeA后面的所有的div取出来,后续的div可再加条件判断
(5)preceding 将当前节点下前面所有的指定节点取出
例子://div[text()='current NodeA']/preceding::div --会将current NodeA前面的所有的div取出来,后续的div可再加条件判断
- XPath编写规则学习
XPath编写规则学习 辅助工具:firefox安装findbugs,view Xpath firefox :Xpath验证方式:$x("xpath"); 粘贴xpath语句回 ...
- modSecurity规则学习(四)——规则指令编写
规则语言是使用9个指令实现: 语法:SecRule VARIABLES OPERATOR [TRANSFORMATION_FUNCTIONS, ACTIONS] Variables 以下几种: Reg ...
- Drools 规则学习
Drools 规则学习 在 Drools 当中,一个标准的规则文件就是一个以“.drl”结尾的文本文件,由于它是一个标准的文本文件,所以可以通过一些记事本工具对其进行打开.查看和编辑.规则是放在规则文 ...
- Angular2入门系列教程2-项目初体验-编写自己的第一个组件
上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...
- 从零开始编写自己的C#框架(28)——建模、架构与框架
文章写到这里,我一直在犹豫是继续写针对中小型框架的设计还是写些框架设计上的进阶方面的内容?对于中小型系统来说,只要将前面的内容进行一下细化,写上二三十章具体开发上的细节,来说明这个通用框架怎么开发的就 ...
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- 从零开始编写自己的C#框架(25)——网站部署
导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...
- 从零开始编写自己的C#框架(24)——测试
导航 1.前言 2.不堪回首的开发往事 3.测试推动开发的成长——将Bug消灭在自测中 4.关于软件测试 5.制定测试计划 6.编写测试用例 7.执行测试用例 8.发现并提交Bug 9.开发人员修复B ...
随机推荐
- [svc]为何linux ext4文件系统目录默认大小是4k?
linux ext4普通盘为什么目录大小是4k? Why does every directory have a size 4096 bytes (4 K)? To understand this, ...
- Replace 在动态sql中的实现
set @stsqlReplace=' update ChgCfm set cfmdate=replace(cfmdate,'''''''',''''), cfmstatu=replace(cfmst ...
- javascript基础拾遗(十一)
1.DOM操作 1)查找 //根据id查找 document.getElementById() //根据html标签查找 documnet.getElementByTagName() //根据样式cl ...
- python(49):把文件压缩成zip格式的文件
有时需要用到压缩文件,网上搜集了一段代码: 分享一下: import os import zipfile def make_zip(localPath, pname): zipf = zipfile. ...
- iOS开发之按钮的基本使用
实现功能: 点击向上的箭头,按钮图片向上,移动,点击向下的箭头,按钮图片向下移动 点击向左的箭头,按钮图片向左移动,点击向右的箭头,按钮图片向右移动, 点击加号图片放大,点击减号,图片缩小 第一步: ...
- 【DIOCP3-说明书】DIOCP3的输出日志
DIOCP3除了有详细的监控面板之外,还有详细的输出日志,当然需要打开日志编译开关! 在工程选项加入DEBUG编译指令,这样在运行中就可以看到DIOCP3的运行详细日志 日志输出在EXE相同目录的LO ...
- python 视频处理,提取视频相关帧,读取Excel
一共这几个模块: class videoReader 读取视频 class videoFramesExtractor(videoReader):继承了读取视频,主要是用来限制读取视频中的哪些帧,并保存 ...
- iOS 开发_..和self...的区别以及使用
相信很多初学者对_和self.之间的区别并没有一个大致的认识,那么下面对两者的区别做一个简单的介绍: 至于重写set和get方法,简要说明一下,当我们使用@property这用法之后,系统便会自动给我 ...
- 基于jQuery会员中心安全修改表单代码
基于jQuery会员中心安全修改表单代码.这是一款登录密码,交易密码,手机号码,实名认证,电子邮箱,安全设置表单,会员表单等设置代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: ...
- order by name 注入
order by name id id是一个注入点 可以利用if语句进行注入 order by name ,if(1=1,1,select 1 from information_schema.tabl ...