WebDriver是通过页面元素的标签名和属性值来定位元素的
定位方式:
- 根据元素本身属性
- 根据元素所在位置
- 根据与元素相关的其他元素的属性
八种元素定位方法:
序号 | 定位依据 | python函数 | 说明 | 备注 |
1 | id | find_element_by_id() | 标签的id属性 | 唯一 |
2 | name | find_element_by_name() | 标签的name属性 |
|
3 | class name | find_element_by_class_name() | 标签的class属性 |
|
4 | tag name | find_element_by_tag_name() | 标签名 |
|
5 | link text | find_element_by_link_text() | 标签对之间的文本数据 | 专门用来定位文本链接 |
6 | partial link text | find_element_by_partial_link_text() | 标签对之间的部分文本数据 |
|
7 | xpath | find_element_by_xpath() | 标签的层级关系 | 提供灵活的定位策略 |
8 | css selector | find_element_by_css_selector() | 标签的层级关系 |
XPath 是一种在xml文档中定位元素的语言
· 绝对路径定位
find_element_by_xpath('/html/body/div/div[2]/div/div/div/from/span/input')
即:用标签名的层级关系来定位元素的绝对路径
div[2]表示当前层级下的第二个div标签
· 利用元素属性定位
find_element_by_xpath('//input[@id="kw"]')
即://表示当前页面某个目录下,input表示定位元素的标签名,[@id=’kw’]表示这个元素的id属性值等于kw.
find_element_by_xpath('//*[@id="kw"]')
不想指定标签名,可用*代替.
· 层级与属性结合
find_element_by_xpath('//form[@id="form"]/span/input')
即:找到有唯一属性的父级,结合层级定位元素.
· 使用逻辑运算符
find_element_by_xpath('//input[@id="kw" and @class="su"]')
即:使用逻辑运算符 and连接多个属性来查找元素
CSS是一种用来描述HTML和XML文档的表现的语言
它使用选择器来为页面元素绑定属性;Selenium可用这些选择器来定位。
CSS定位速度比XPath快,且更简洁;但理解和使用的难度更大一点。
常用选择器如下:
序号 | 选择器 | 例子 | 描述 |
1 | .class | .intro | 选择class="intro"的所有元素 |
2 | #id | #firstname | 选择id="firstname"的所有元素 |
3 | * | * | 选择所有元素 |
4 | element | p | 选择所有<p>元素 |
5 | element>element | div>input | 选择父元素为<div>的所有<input>元素 |
6 | element+element | div+input | 选择同一级别中紧接在<div>元素之后的所有<input>元素 |
7 | [attribute=value] | [target=_blank] | 选择target="_blank"的所有元素 |
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector("#kw")
find_element_by_css_selector("input")
find_element_by_css_selector("span>input")
find_element_by_css_selector("[name='username']") # 属性值可加引号也可不加
find_element_by_css_selector("form.fm>span>input#kw")
用By定位元素
上述8种定位方式的本质就是find_element(定位类型, 定位方式)
定位一组元素
应用场景:
- 批量操作元素
- 先获取一组元素再从这组对象中过滤出需要操作的元素 .pop()获取最后一个元素,pop(0)获取第一个元素