Python+Selenium学习笔记之元素定位
书籍学习:《Selenium2 自动化测试实战——基于Python语言》P69-P83
定位方法 | 类型 | 释义 | 格式与实例 | 优缺点 |
id定位 | 属性 | HTML规定Id属性在HTML文档中必须是唯一的,但是可能存在页面上的多个元素的id相同 | 格式:find_element_by_id("") find_element_by_id("kw") | 定位不到唯一的元素 |
name定位 | 属性 | HTML规定name来指定元素的名称,name的属性值可以不唯一 | 格式:find_element_by_name("") find_element_by_name("wd") | 定位不到唯一的元素;不唯一,不必要 |
class定位 | 属性 | HTML规定class来指定元素的类名 | 格式:find_element_by_class_name("") find_element_by_class_name("s_ipt") | 定位不到唯一的元素 |
tag定位 | 属性 | tag不唯一,一个tag用来定义一类功能,因此重复性强 | 格式:find_element_by_tag_name("") find_element_by_tag_name("input") | 定位不到唯一的元素,重复性强 |
link定位 | 属性 | 定位文本链接 | 格式:find_element_by_link_name("") find_element_by_link_name("新闻") | 定位不到唯一的元素 |
partial link定位 | 属性 | 模糊定位,对于文本较长的链接,可选取一部分文本进行定位 | 格式:find_element_by_partial_link_text("") find_element_by_partial_link_text("很长") | 定位不到唯一的元素 |
Xpath定位 | 绝对路径 | Xpath用标签名的层级关系来定位元素的绝对路径:最外层是html->body->标签 | 格式:find_element_by_xpath("") div[2]:当前层级下的第二个div find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input") | 繁琐 |
利用元素属性 | //:当前页面的某个目录下 input:定位元素的标签名 [@id='kw']:元素id等于kw *:不想制定标签名 | 格式:1.find_element_by_xpath("//*[@属性='']") 2.find_element_by_xpath("//input[@属性='']") 实例:find_element_by_xpath("//input[@id='kw']") find_element_by_xpath("//*[@class='bg s_btn']") | xpath不局限于id、name、class,元素的任意属性值都可以 | |
层级与属性 | 某一个元素没有可利用的属性值,可查找上一级属性 | 格式:find_element_by_xpath("//爷爷/父亲/儿子") 实例:find_element_by_xpath("//form[@id='form']/span/input")等价于 find_element_by_id("kw") find_element_by_xpath("//form[@id='form']/span[2]/input")等价于 find_element_by_id("su") | 是绝对路径的一种写法 | |
逻辑运算符 | 如果属性不能唯一地区分一个元素,可以使用逻辑运算符连接多个属性来查找元素 | find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") | ||
CSS定位 | 通过Class属性 | 点号(.)表示通过class属性定位元素 | 格式:find_element_by_css_selector(".") 实例:find_element_by_css_selector(".s_ipt")
| |
通过id属性 | 井号(#)表示通过id属性定位元素 | 格式:find_element_by_css_selector("#") 实例:find_element_by_css_selector("#kw") | ||
通过标签名 | 格式:find_element_by_css_selector("") 实例:find_element_by_css_selector("input") |
| ||
通过父子关系 | find_element_by_css_selector("span>input") 父元素为span,子元素为input | |||
通过属性 | find_element_by_css_selector("[autocomplete=off]") find_element_by_css_selector("[name='kw']") find_element_by_css_selector('[type="submit"]') | |||
组合定位 | find_element_by_css_selector("form.fm>span>input.s_ipt") 说明:标签form的class属性值fm下面的span标签下面的Input标签的class属性值s_ipt find_element_by_css_selector("form#form>span>input#kw") 说明:标签form下的id值为form下面的span标签下面的Input标签的id值为kw |