xpath定位根据的是路径来定位,位置是唯一确定的
css是根据元素的样式定位的相对来说
css为样式选择器
xpath为路径选择器
xpath可以根据子类定位父类,css目前不可以(有个has但是在实验阶段)
通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
(核心思想,根据层级定位,确保被定位的标签唯一性)
dr.find_element_by_xpath("//[@id=‘kw’]") #通过所有id=kw定位
dr.find_element_by_xpath("//[@name=‘wd’]") #通过所有name=wd定位
dr.find_element_by_xpath("//input[@class=‘s_ipt’]") # 通过input标签 然后class=s_ipt定位
dr.find_element_by_xpath("/html/body/form/span/input") #通过标签层级选择input标签
dr.find_element_by_xpath("//span[@class=‘soutu-btn’]/input") #通过父级标签定位,
先定位父级标签 span与class属性(用法与直接定位一样),然后定位子类input标签
dr.find_element_by_xpath("//form[@id=‘form’]/span/input") #通过父级的父级定位
(循环父类父类知道能定位为止,)
dr.find_element_by_xpath("//input[@id=‘kw’ and @name=‘wd’]") #通过input标签定位,
增加对标签的限制条件
通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw") # #id kw代表id值 #代表取id
dr.find_element_by_css_selector("[name=wd]") [attribute=value]表示[属性=值]取所有元素
dr.find_element_by_css_selector(".s_ipt") # .class 取class所有元素 .代表取class
dr.find_element_by_css_selector(“html > body > form > span > input”) 根据层级选择,
表达方式与xpath不一样 (层级与xpath同,class_selector有着更加简洁的写法,
那么是否class可以与xpath融合,即采用xpath的定位限制思想,写法采用class_selector的写法)
dr.find_element_by_css_selector(“span.soutu-btn> input#kw”)
OK,下面这种方法实现了上面的思想,先定位span标签,然后取class元素,用的是class_selector的.class写法,然后根据层级定位
input标签,然后用#id的写法实现了对input标签的限制
dr.find_element_by_css_selector(“form#form > span > input”)
form表单,#form然后span,input标签(如标签中有多个相同标签,可以继续用属性显示定位)
模糊定位
contains:
driver.find_element_by_xpath("//div/a[contains(text(), 匹配text)]")
css_selector:
https://blog.csdn.net/u012941152/article/details/82982287
start-with:
用start-with,寻找style属性以position开头的div元素,其中@后面可以跟该元素任意的属性名。
self.driver.find_element_by_xpath(’//div[start-with(@style,“position”)]’).click()
父兄节点定位:
https://blog.csdn.net/xiaochendefendoushi/article/details/81321159
https://blog.csdn.net/hb5cn/article/details/84937449
xpath、css比较
1.通过id定位:
xpath定位-------: dr.find_element_by_xpath("//*[@id=‘kw’]")
css_selector定位: dr.find_element_by_css_selector("#kw")
2.通过name定位:
xpath定位-------: dr.find_element_by_xpath("//*[@name=‘wd’]")
css_selector定位:
3.通过标签&限制定位:
xpath定位-------: dr.find_element_by_xpath("//input[@class=‘s_ipt’]")
css_selector定位: dr.find_element_by_css_selector(“input.s_ipt”)
4.通过层级选择定位:
xpath定位-------: dr.find_element_by_xpath("/html/body/form/span/input")
css_selector定位: dr.find_element_by_css_selector("html>body>form>span>input)
5.通过父类标签&限制定位子类标签的定位:
xpath定位-------: dr.find_element_by_xpath("//span[@class=‘soutu-btn’]/input[@name=‘kw’]")
css_selector定位: dr.find_element_by_css_selector(“span.soutu-btn>input#kw”)
6.通过父层级定位子层级的定位:
xpath定位-------: dr.find_element_by_xpath("//form[@id=‘form’]/span/input")
css_selector定位: dr.find_element_by_css_selector(“form#form>span>input”)
7.通过对标签的多重限制定位:
xpath定位-------: dr.find_element_by_xpath("//input[@id=‘kw’ and @name=‘wd’]")
css_selector定位: dr.find_element_by_xpath(“input#kw and [@name=‘wd’]”)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。