学习xpath元素定位的笔记
套用的公式://标签(也可以用*代替)[@属性="属性值"]
1、根据元素自身特征进行定位
1)id定位——如://form[@id="J_searchForm"]
2)class定位——如://form[@class="search-form clearfix"] 或者 //*[@ class="search-form clearfix"] # 没有用标签,用*代替
(注意:class有多个值时,值中的空格必须保留)
3)其他属性——如://a[@data-log_code="bpm=28.265.3682762.1&cdm=0.0.0.0"]
4)多个属性组合定位:
//标签(也可以用*代替)[@属性1="属性值1"][@属性2="属性值2"]
——如://form[@id="J_searchForm"][@action="//search.mi.com/search"]
//标签(也可以用*代替)[@属性1="属性值1" and @属性2="属性值2"]
——如://form[@id="J_searchForm" and @action="//search.mi.com/search"]
5)属性值部分比配://*[contains(@属性,"部分属性值")]
——如://*[contains(@class,"search-form")]
2、根据元素层级关系定位
1)后代关系(有跨代):祖先//后代
——如://ul[@id="J_categoryList"]//li 定位到后代的所有li元素
——如://ul[@id="J_categoryList"]//li[@class="category-item"] 定位到后代li中的属性是class="category-item"的元素
2)父子关系(直接上下级关系)
父元素/子元素们
——如://ul[@id="J_categoryList"]/li 定位到下级所有的li元素
父元素/子元素[n]
——如://ul[@id="J_categoryList"]/li[2] 定位到第2个子元素li , 下标是从1开始的
父元素/子元素[last()-2]
——如://ul[@id="J_categoryList"]/li[last()-2] 定位到倒数第3个弟弟,last()定位到倒数第1,通常用在元素个数是变动的
(注意:后代关系是 ”// “,父子关系是”/“)
3) 同级关系:
A: 哥哥定位弟弟:
哥哥/following-sibling::弟弟们 ——如://*[@id="J_navCategory"]/following-sibling::li 定位到所有的弟弟们
哥哥/following-sibling::弟弟[n] ——如://*[@id="J_navCategory"]/following-sibling::li[2] 定位到第2个弟弟, n是从1开始
哥哥/following-sibling::弟弟[last()-n] ——如://*[@id="J_navCategory"]/following-sibling::li[last()-2]
定位到倒数第3个弟弟,last()定位到倒数第1,通常用在元素个数是变动的
B: 弟弟定位哥哥:
弟弟//preceding-sibling::哥哥们——如://*[@data-index="4"]/preceding-sibling::li 定位到上面所有的哥哥们
弟弟//preceding-sibling::哥哥[n]——如://*[@data-index="4"]/preceding-sibling::li[1] 定位到最近的第1个哥哥,n是从1开始
弟弟//preceding-sibling::哥哥[last()-n]——如: //*[@data-index="4"]/preceding-sibling::li[last()-1]
定位到倒数第2远的哥哥,last()是定位到最远的哥哥,n是从1开始