⼋⼤元素定位介绍:
定位元素的⽅式:
1.id元素定位 :
基于元素属性中的id的值来进⾏定位,id是⼀个标签的唯⼀属性值,可以通过id属性来唯⼀定位⼀个元素,是⾸选的元素定位⽅式,动态ID不做考虑。
以下这种写法是Selenium2.0版本的写法,已经被3.0及以上的版本淘汰掉了:
示例:driver.find_element_by_id('id')
⽬前都采⽤这种最新的写法:
示例:driver.find_element(By.ID, 'id')
2.name元素定位 :
基于元素属性中的name的值来进⾏定位,但name并不是唯⼀的,很可能会出现重名。
示例:driver.find_element(By.NAME,'name')
3.class_name元素定位 :
基于元素class样式来定位,⾮常容易遇到重复的,这个⽅法的参数只能是⼀个class值,列如:class属性有空格隔开两个class的值时,只能选取其中⼀个进⾏定位。
示例:driver.find_element(By.CLASS_NAME,'class_name')
4.tag_name元素定位 :
通过元素的标签名来定位元素,如:input标签、span标签;标签名来进⾏定位元素,重复度最⾼,只有在需要定位后进⾏⼆次筛选的情况下使⽤。
示例:driver.find_element_by_tag_name('tag_name')driver.find_element(By.TAG_NAME, 'tag_name')
5.css_selector元素定位 :
css可以通过元素的id、class、属性、⼦元素、后代元素、index、兄弟元素等多种⽅式进⾏元素定位。CSS常⻅语法⼀览表:
5.1通过ID定位,如:input id="kw"
示例:driver.find_element(By.CSS_SELECTOR, 'div#kw')
5.2通过class定位,如:input class="is_put"
示例:driver.find_element(By.CSS_SELECTOR, 'input.is_put')
5.3通过属性定位,如:input name="kw"
示例:driver.find_element(By.CSS_SELECTOR, 'input[name=kw]')
5.4通过⼦元素定位
与xpath不同,css中⽤">"右箭头代表⼦元素,⽽xpath中⽤的"/"单斜杠表示
示例:driver.find_element(By.CSS_SELECTOR, 'div#kw>a')
5.5通过后代元素定位
示例:driver.find_element(By.CSS_SELECTOR, 'div#kw a')
5.6通过元素兄弟元素定位元素
示例:driver.find_element(By.CSS_SELECTOR, 'span#kw+input')
6.link_text元素定位 :
主要⽤于超链接进⾏定位,全部匹配⽂本值,使⽤在链接位置处,例如:a标签
示例:driver.find_element(By.LINK_TEXT, 'link_text')
7.partial_link_text元素定位:
基于链接的部分⽂字来定位,link text模糊匹配,模糊查询匹配到多个符合调节的元素,选取第⼀个,同样也只使⽤在链接位置处,例如:a标签
示例:driver.find_element(By.PARTIAL_LINK_TEXT, 'partial_link_text')
8. xpath元素定位:
xpath是⼀⻔在xml⽂档中查找信息的语⾔。xpath可⽤来在xml⽂档中对元素和属性进⾏遍历。由于html的层次结构与xml的层次结构天然⼀致,所以使⽤xpath也能够进⾏html元素的定位。xpath的功能⾮常强⼤,通过xpath的各种⽅式组合,能够解决selenium⾃动化测试中界⾯元素定位的绝⼤部分问题。
简单来说:通过元素的属性结合⻚⾯元素的结构(层级路径关系)来进⾏定位
xpath常⻅语法⼀览表:
8.1 xpath通过绝对路径定位元素
将Xpath表达式从html的最外层节点,逐层填写,最后定位到操作元素,这种⽅法,⼀旦路径有变化会导致定位失败,所以不推荐使⽤该⽅式。
示例:driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/a')
F12中,定位到元素,然后进⾏copy可以复制出绝对路径和相对路径(有的时候需要修改才会更稳定)
8.2 xpath通过相对路径定位元素
绝对路径与相对路径的差别与⽂件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在html的任意层次中寻找符合条件的元素,语句以//开始。
示例:driver.find_element(By.XPATH, '//form/span')
8.3 xpath通过元素属性定位元素
单属性定位://input[@name='pwd']表示name属性为pwd的input
示例:driver.find_element(By.XPATH, "//input[@name='pwd']")
多属性定位://a[@title="tutorial" and @rel="follow"]
示例:driver.find_element(By.XPATH, '//a[@title="tutorial" and @rel="follow"]')
8.4 xpath通过属性值模糊匹配定位元素
xpath模糊匹配的函数有两种:
starts-with://label[starts-with(@class,'btn')],class属性值以btn开头的label元素
示例:driver.find_element(By.XPATH, "//label[starts-with(@class,'btn')]")
contains://label[contains(@class,'btn')],通过属性值包含btn的label元素
示例:driver.find_element(By.XPATH, "//label[contains(@class,'btn')]")
8.5 xpath通过⽂本定位元素
⽂本内容的定位是利⽤html的text字段进⾏定位的⽅法,//span[text()='下⼀步'],由于“下⼀步”这⼏个字是浏览器界⾯就可以看到的,“所⻅即所得”,这种特征改的可能性⾮常⼩,优先推荐使⽤。与属性值类似,⽂本内容也⽀持starts-with和contains模糊匹配。
第⼀种,直接匹配符合⽂本的元素:
driver.find_element(By.XPATH, "//span[text()='下⼀步']")
第⼆种:以匹配⽂本开头的元素:
示例:driver.find_element(By.XPATH, "//span[starts-with(text(),'下⼀步')]")
第三种,包含匹配⽂本的元素:
示例:driver.find_element(By.XPATH, "//span[contains(text(),'下⼀步')]")
9. XPATH和CSS基本语法对比