xpath选择器介绍
xpath全名叫 xml path language (xml路径语言)
从xpath的视角来看,xml或html文档就是文件系统结构,元素节点可以看作其中某一个文件
在HTML文档中,以html标签作为根节点,整个文档的形式可以看作一个树形结构。
xpath比css多一点功能比如父元素选择器
移动应用自动化也同样支持xpath
xpath写法
绝对路径
以/开始,逐个增加节点名称用/分割
举例:
/html/body/div/p
相对路径:
写法很简单://
举例:
//div//p
表示footer元素中所有的后代p类型元素
-通配符
*表示所有节点,与css相同
根据属性选择:
属性用[]包裹,属性名加@,属性值加引号。
例:
//div[@style]
//div[@spec='t2']
//a[contains(@id,'haha')] a标签id包含haha
//a[starts-with(@id,'xixi')] a标签以xixi开头
//a[ends-with(@id,'hehe')] a标签以hehe结尾 目前浏览器还不支持这种写法
子元素选择器
//div[@id='haha']/p[2]
取最后一个:
//div[@id='haha']/p[last()]
倒数第二、第三用:
//div[@id='haha']/p[last()-1]
//div[@id='haha']/p[last()-2]
postion()的用法
表示第几个元素除了可以用[1]还可以
//div[@id='haha']/*[position()=1]
这里positon()就是代表元素的位置,这种写法也是xpath中的一部分
高级用法:
//div[@id='haha']/p[position() = last()] 表示最后一个元素
//div[@id='haha']/p[position()!=last()-1] 表示除了倒数第二个元素
//div[@id='haha']/p[position()>=last()-2] 表示最后三个元素
//div[@id='haha']/p[position()>1 and position()<=last()-2] 表示第二个到倒数第三个之间
//div[@id='haha']/p[position()=last()-2 or position()=2] 表示倒数第三个或者第二个
组选择器:
xpath中用 | 隔开
例:
//div[@id='haha'] | //div[@id='hehe']
相邻兄弟选择器
举例,xpath表示相邻兄弟的方法
//div[id='haha']/following-sibling::div
表示id为haha的div相邻兄弟节点(后)
向前兄弟选择:
//div[id='hehe']/preceding-sibiling::div
父元素选择器
在xpath里面还可以选择指定元素的父元素,css不支持这种方法
//div[id='haha']/..
可以获取父元素以此类推获取父元素的父元素
webelement相对定位法
比如我想获取id为food的元素,然后用获取到元素继续找他下面的子节点,比如我想获取p节点,然后通过xpath//p来获取
这里注意了,如果我这么写了,即使我用的是food元素来获取的,其实他获取的元素范围还是整个html页面的p元素,和用driver获取的效果是一样的如果我想获取的是food这个元素范围内的呢,大家就要在这个表达式前面加一个点,这个点表示在当前的元素范围内。
例:
food = driver.find_element_by_id('food')
food.find_elements_by_xpath('./p')
如果不加点:
food.find_elements_by_xpath('/p')
driver.find_elements_by_xpath('/p')
效果相同