上一篇我们讲了id,name, class, tag, link_text及partial_link_text 6种定位方法,其中id、name最常用。
有时候我们发现网站并没有id、name等属性,那么我们可以用更高级的定位方法xpath来定位元素。
什么是xpath:
XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可是使用这种强大语言在web应用中定位元素,xpath是一种路径定位的方式。
XPath扩展了上面id和name等定位方式,提供了很多种可能性
语法格式:find_element_by_xpath()
我们会介绍两种定位方式,工具定位和手写xpath
用工具xpath定位元素
1.打开Chrome浏览器开发者模式,然后定位到百度搜索框。
2.定位到元素后,鼠标移至标签元素,右键后选择copy,最后选择Copy Xpath,就复制了xpath路径了
3.复制了xpath后,就可以用xpath定位百度搜索框了
运行之后,百度搜索框输入了小胖虎,用xpath定位成功
下面介绍怎么手写xpath
xpath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:
xpath绝对路径:
以百度搜索框为例,绝对路径如下所示
那么我们可以这样写:find_element_by_xpath("/html/body/div/div/div/div/div/from/span/input")
运行之后,打开百度页面,输入小胖虎,xpath绝对路径定位成功。
但是绝对路径定位,只要页面元素稍微改动,就会定位失败,维护成本比较高,所以并不建议使用xpath绝对定位的方式。
xpath相对定位
1.利用属性定位
通过元素的属性定位,比如id、name、class等属性,属性匹配定位语法:“//标签名[@属性='属性值'] ",
//表示当前节点, @表示选取属性 ,标签名比如div, span等,也可用 * 表示任意标签。
以百度搜索框为例:
我们用id属性,xpath定位代码如下:
其他属性如name、class等,也是相同的定位写法
2.利用层级加属性定位
比如我找不到小胖虎,我可以通过先找到小胖虎的爸爸,然后找到小胖虎
以百度搜索框为例, 我们可以找到搜索框input标签的上级标签span, 上上级标签form
我们通过上级标签span,及上上级标签form分别进行定位
运行之后,发现通过上级标签span并不能定位到搜索框,而通过上上级标签form可以定位到,所以
实战要灵活运用,直到定位到元素
3.利用逻辑运算符定位
逻辑运算符比如and ,or ,not ,多种条件组合定位
用百度搜索框为例,使用id加name两种属性组合定位
运行之后,打开百度,输入小胖虎,id加name属性组合定位成功
总结:节点元素无id或name属性时,可以用xpath。觉得麻烦的话可以用开发者工具直接copy,
copy的xpath定位不到的,再手写xpath。xpath是定位神器,多练习, 可以解决绝大部分定位问题。
下一篇我们将介绍css,语法简洁、灵活性更好。
如果学习中有什么疑问,欢迎留言或qq群:701841415 ,一起交流学习