1.Xpath的路径的表现形式
1.1常用的路径表达方式是通过绝对路径或者相对路径+节点+运算符(通常一些boolean类型的表达式,一般都是节点的特定的标示)来定位的
eg //div[@class=’done’]
目前我们用到比较多的一些常用的表达式有(表格列出的是比较经常使用的)
经常使用的表达式或者运算符 |
|
/ |
从根节点选取 |
// |
从匹配的当前选择文本中的节点 |
.. |
选取当前节点的父节点 |
@ |
选取属性 |
Text() |
序曲文本内容 |
contains |
选取符合contains里面的节点 |
And or |
选取符合and和or的节点 |
1.2比较复杂点的位置路径表示法
一般路径的表达式是:轴名称::节点名称【谓语】
常见的轴名称有(表格列出的是比较经常使用的)
轴 |
结果 |
ancestor |
选取当前节点的所有父辈节点 |
child |
选取当前节点的所有子节点 |
following |
选取在当前节点的结束标签结束前的所有节点 |
preceding |
选取当前节点的所有同级节点 |
self |
选取当前节点 |
2.xpath使用总结
2.1尽量使用比较常见的表达式而不使用位置路径
2.2尽量使用相对路径
2.3节点不容易定位可以通过元素的上下级,先找到容易定位的元素再根据层级关系定位到所需的节点.
就像这次ivr tree里面的树结构的 可以先定位到入口节点//div[@class='tools-ivrEditor-column']/div[contains(@class,'tools-ivrEditor-treeNode') and @data-key='$DataKey']/div
再后面封装迭代的部分
2.4尽量把范围写的大点,使xpath健壮性更强。
比如在定位一个done button时候//div[text(),’done’],div就是text所在的属性,其实可以使范围更大点 有时候这个done本身就是一个table 可以直接使用table这个属性
2.5目前写的脚本定位来看text()contains, @使用的比较多//li[contains(@class,'tools-ivrEditor-menubar-matchedItem')]
2.6有时候为了准备需要多个表达式同时一起用 比如//div[@class='tools-ivrEditor-menubar-matchedItem-name'and text()='IVR 1001']
2.7在写的时候一般都以比较固定好找的属性来定位 比如id name class等
2.8在xpath定位出来的节点有多个一般通过参数来确定具体定位是那个节点 这个也是目前在脚本中比较常见的,webdriver默认是定位到第一个的
2.9 在脚本里定位组件的xpath范围也尽量大点