一、By类单一属性定位
- id定位
- 特点:
id
定位 是通过元素的id
属性来定位元素的;在整个HTML文档中id
属性必须是唯一的。(APP中id
属性不唯一) - 前提:元素有
id
属性 - 说明:当目标元素存在
id
属性值时,优先使用id
方法定位元素,前提id
不是动态变化的。
- name定位
- 特点:
name
定位是根据元素name属性
来定位的;在HTML文档中name
的属性值是可以重复的
- class name 定位
- 特点:
class_name
定位是根据元素class属性值
来定位元素;HTML通过使用class
来定义元素的样式,class
属性值可以有多个。 - 前提:元素有
class
属性
- 注意:在使用
class name
方法时,如果**class
**有多个属性值,只能使用其中的一个。
比如:class="panel-body has-table scrollbar-hover"
,只能使用其中一个值panel-body
或者has-table
或者scrollbar-hover
,中间的空格代表间隔符,表示class有多个属性。
- tag name 定位
- 特点:
tag_name定位
是通过**标签名
**来定位的;HTML本质就是由不同的tag
组成,每一种标签一般在页面中存在多个,所以不方便进行精确定位,一般很少使用。 - 说明:如果存在多个相同的标签,则返回符合条件的 第一个标签 。
- 由于标签名的重复性过高,一般做精确定位时,都不会选择
tag_name
- link test 定位
- 特点:
link_text定位
是只针对超链接元素(< a>标签</a >
,精确匹配),通过超链接的文本内容来定位元素的(超链接文本必须是唯一,不能有空格),并且需要输入超链接的全部文本信息。 - 案例:
element = driver.find_elementt("link test", '访问新浪网站')
- partial link text定位
- 特点:只针对超链接元素,需要输入超链接的部分文本信息。
- 案例:
element = driver.find_element("partial link text", '访问新浪')
- 说明:
partial link text
:a标签通过【模糊匹配】超链接文本,定位元素超链接文本必须是唯一。
二、xpath定位表达式汇总
2.1 xpath术语
2.1.1 节点
- XPath中的节点主要有以下几种类型:
- 元素节点 - 表示XML或HTML中的一个元素(也就是标签),如
<book>
。 - 属性节点 - 表示元素的一个属性,如
<book category="computer">
中的category
属性。 - 文本节点 - 表示元素或属性中的文本内容,如
<book>Java</book>
中的Java
。 - 文档节点 - 表示整个文档,作为文档树的根节点。
- 命名空间节点 - 表示XML命名空间,通常是文档的子节点。
- 元素节点 - 表示XML或HTML中的一个元素(也就是标签),如
- 定位节点的方式:
- 通过路径表达式,如
book
节点://book
- 通过节点关系,如
parent、child
等 - 通过顺序关系,如
following-sibling
等
- 通过路径表达式,如
2.1.2 基本值
基本值(Atomic Value)指的是不能再分解的单个值,XML中的一些基本值包括:
- 字符串(String)
- 整数(Integer)
- 小数(Decimal)
- 布尔值(Boolean)
- 日期时间(Date/Time)
基本值就是XML文档中的终端节点,不再包含子元素。
例如:
<person> <name>John</name> <age>30</age> </person>
上述XML中:
- name和age元素中的"John"和"30"就是基本值
- 而person不是基本值,因为它还包含子元素
基本值有以下特点:
- 不可再分解为更小单元
- 没有属性或子元素
- 包含实际数据
2.2 节点关系
2.2.1 父(Parent)
每个元素以及属性都有一个父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
2.2.2 子(Children)
元素节点可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
2.2.3 同胞(Sibling)
拥有相同的父的节点
在下面的例子中,title、author、year 以及 price 元素都是同胞:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
2.2.4 先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
2.2.5 后代(Descendant)
某个节点的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
2.3 xpath定位表达式汇总
三、CSS选择器策略汇总
基本介绍:
- CSS(Cascading Style Sheets)是一种语言,它用来描述HTML元素的显示样式;
- 在CSS中,选择器是一种模式,用于选择需要添加样式的元素;
- 在Selenium中也可以使用这种选择器来定位元素。
- 在Selenium中推荐使用CSS定位(前提得会😂),因为它比XPath定位速度要快。
四、元素定位策略总结
- 如果元素有明确
id
,name
,class
属性时,使用对应的基本定位方法。 - 如果没有
id
,name
,class
属性时,或id
,name
,class
属性是动态/不唯一的时候,使用XPath
和css_selector
定位。 - 定位页面超链接使用
link_text
和partial_link_text
定位 - 可使用
XPath
和css_selector
定位的时候,优先使用css_selector
。css_selector
定位的速度和效率比Xpath
高。 - 没有最好的,只有最精简的,怎么简单怎么来。
五、selenium相关总结脑图大全
附带捎上一份selenium相关总结脑图