有时候会遇到元素属性不带 id 和 name,或者遇到动态 id,且不能使用 link_text 进行元素定位时,使用 css_selector 定位或 xpath 定位就很适合。
虽然多数情况下,浏览器审查元素本身都支持直接提取 xpath 路径,但有时候也会出现提取出的 xpath 错误的情况,所以对 xpath 表达式稍微了解有益于对错误的 xpath 表达式的分辨,以及手动去更改。
当然,这里只列举一些简单的 xpath 路径表达式
/AAA #选择根节点 AAA
/AAA/BBB #根据绝对路径选择元素
/AAA/CCC/DDD/* #选择 /AAA/CCC/DDD/ 下所有元素
/*/*/*/BBB #选择有3个祖先元素的 BBB 元素
/AAA/BBB[1] #选择AAA的第一个BBB 子元素
/AAA/BBB[last()] #选择AAA的最后一个BBB 子元素
//* #选择所有元素
//AAA #扫描整个文档,找出所有 AAA 元素
//AAA/BBB #所有父元素为 AAA 的 BBB 元素
//AAA[@id] #所有有 id 属性的 AAA 元素
//AAA[@id=BBB] #所有有 id 属性为 BBB 的 AAA 元素
//BBB[@*] #选择有任意属性的 BBB 元素
//*[count(BBB)=2] #选择含有2个 BBB 子元素的元素
//*[count(*)=2] #选择含有2个子元素的元素
//BBB[not (@*)] #选择没有属性的 BBB 元素
//*[local-name()='AAA'] #找到 tag 为 AAA 的元素
//*[starts-with(local-name()), 'AAA'] #找到所有 tag 以 AAA 开头的元素
//*[contains(local-name(), 'AAA')] #找到所有 tag 包含 AAA 的元素
//*[string-length(local-name()) = 3] #找到所有 tag 长度为3的元素
| #多个路径合并在一起,其实就相当于“与或非”中的“或”。例:
//CCC|//BBB #选择所有的 CCC 和 BBB 元素
name() #返回元素名称
start-with(A, B) #接受两个参数,A 是以 B 为开始的
contains(A, B) #接受两个参数,A 是包含 B 的
//*[name()=’BBB’] # name 名称为 BBB 的元素
//*[starts-with(name(),’B’)] #所有 name 名称为以 B 起始的元素
//*[contains(name(),’C’)] #所有 name 名称包含 C 的元素