UI自动化常用的定位方式(包含xpath和css对比)
(1) id说明:基于元素的id属性定位前提:元素必须有id属性方法:driver.find_element_by_id()特性:一般情况下,在一个页面中,id属性值是唯一(2)name说明:基于元素的name属性定位前提:元素必须有name属性方法:driver.find_element_by_name()特性:一般情况下,在一个页面中,name属性值是可以重复的(3) class说明:基于元素
·
(1) id
- 说明:基于元素的id属性定位
- 前提:元素必须有id属性
- 方法:
driver.find_element_by_id() - 特性:一般情况下,在一个页面中,id属性值是唯一
(2)name
- 说明:基于元素的name属性定位
- 前提:元素必须有name属性
- 方法:
driver.find_element_by_name() - 特性:一般情况下,在一个页面中,name属性值是可以重复的
(3) class
- 说明:基于元素的class属性定位
- 前提:元素必须有class属性
- 方法:
driver.find_element_by_class_name() - 特性:一般情况下,在一个页面中,class可以有多个值,定位时,使用1个值
(4) tag_name:(基本用不上)
- 说明:基于元素的标签名定位
- 前提:标签名在页面中是唯一1个,或者有多个但就找第1个
- 方法:
driver.find_element_by_tag_name() - 特性:如果页面存在多个相同元素,默认返回符合条件的第一个元素
(5)link
- 说明:链接的定位
- 方法:
driver.find_element_by_partial_link_text()只要包含链接文字就行
driver.find_element_by_link_text()必须跟链接的文字一模一样 - 特性:针对跳转链接,即属性href

(6)xpath
- 说明:路径定位
- 方法:
driver.find_element_by_xpath() - 绝对路径(不要使用,除非已经使用了所有方式仍然无法定位)
方法:以单斜杠/开头,根据实际目录,逐层输写。
例如:find_element_by_xpath("/html/body/div[2]/form/span/input")#div[2]指第2个元素 - 相对路径(建议使用)
- 方法:以双斜杠//开头,首先找目录元素是否有”精准元素“即唯一能标识的属性,找到,则用此属性定位
- / 开头表示从文档的开始查找
- // 开头表示从文档的任意位置查找,用的最多,//元素名[@属性=值]
- . 开头表示选取当前节点
- … 开头表示选取当前节点的父节点
- 定位原则:
(1)选取具有唯一性的属性进行定位
(2)本身的属性无法定位自己,借助父级、祖父级来缩小定位
| 定位 | 说明 |
|---|---|
| //ul/* | ul的所有子元素 |
| //input[2] | 第2个input元素 |
| //input[last() | 最后一个input元素 |
| input[position()< 3] | 前2个input元素 |
| //input[@value] | 有value属性的input元素 |
| //input[@name=‘password’ and @pwd=‘123456’] | 属性name的值等于password并且属性pwd的值等于123456的input元素 |
| //ul/*[5] | ul的第五个子元素 |
| //*[text()=‘Heading’ | 任意包含Heading文本的元素 |
| //input[@*=‘SYS123456’] | 任意属性的值为SYS123456 |

(7)css
- 说明:标签定位
- 方法:
driver.find_element_by_css_selector()
| 定位 | 说明 |
|---|---|
| E | 标签选择器,匹配所有使用E标签的元素 |
| E F | 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 |
| E > F | 子元素选择器,匹配所有E元素的子元素F |
| E + F | 毗邻元素选择器,匹配紧随E元素之后的同级元素F(只匹配第一个) |
| E ~ F | 同级元素选择器,匹配所有在E元素之后的同级元素F |
| .info | class选择器,匹配所有class属性中包含info的元素 |
| #footer | id选择器,匹配所有id属性等于footer的元素 |
| E[att=‘val’] | 属性att的值为val的E元素(区分大小写) |
| E[att^=‘val’] | 属性att的值以val开头的E元素(区分大小写) |
| E[att$=‘val’] | 属性att的值以val结尾的E元素(区分大小写) |
| E[att*=‘val’] | 属性att的值包含val的E元素(区分大小写) |
| E[att1=‘v1’][att2*=‘v2’] | 属性att1的值为1,att2的值包含v2的E元素(区分大小写) |

(8)xpath定位与css定位的区别
- css用的是标签匹配来定位
- xpath使用路径来定位
- 举例:湖南省
css的定位标签是长江以南,鱼米之乡
xpath定位则是经纬度
(9)元素定位规则
- 当页面元素有id或者name属性时,用id或者name来定位
- 当有链接需要定位时,建议用linkText或partialLinkText方式
- 当要定位多个相同类型的元素,建议用tagName
- 当要定位多个样式相同的元素,建议用css
- 普通定位无法找到元素,建议使用xpath, css 实现层级定位
更多推荐




所有评论(0)