UI自动化要做的就是模拟鼠标和键盘对元素进行操作,单击、输入或鼠标悬停等操作,所有的这些操作都建立在找到元素的基础上,下面说一下,selenium的八大元素定位,重点说一下xpath元素定位。
二、selenium的八大元素定位
以百度的输入框元素为例子:
2.1 id定位
find_element_by_id("kw") # 通过id属性来定位元素
2.2 name定位
find_element_by_name("wd") # 通过name 属性来定位元素
2.3 class定位
find_element_by_class_name("s_ipt") # 通过class属性来定位元素
2.4 tag定位
#根据标签名称来定位使用较少基本不用同一个标签重复太多
find_element_by_tag_name("input") # 通过表tag name定位元素
以百度首页的【登录】为例子
2.5 link定位
# 根据文本名称定位确定只有这一个文本不然会报错
find_element_by_link_text("登录") # 通过元素标签之间的文本信息来定位元素
2.6 partial link定位
#根据模糊匹配匹配文本定位
find_element_partial_by_link_text() # 通过元素标签对之间的部分文本信息来定位元素
2.7 xpath定位
xpath时一种XML文档中定位元素的语言,因为HTML可以看做XML的一种实现,所以selenium用户可以使用这种强大的语言在web应用中定位元素。
find_element_by_xpath("//*[@id='kw']") # 通过xpath路径进行定位元素
2.8 CSS定位
CSS(Cascading Style Sheets)是一种语言,他用来描述HTML和XML文档的表现。CCS使用选择器来为页面绑定元素,这些选择器可以使用被selenium用作另外的定位策略。
find_element_by_css_selector("input#kw") # 通过ccs选择器来定位元素
CCS选择器的常用语法:
| 选择器 | 例子 | 描述 |
|
.class |
.intor | class选择器,选择class="intro"的所有元素 |
| #id | #firstname | id选择器,选择的所有元素 |
| * | * | 选择所有元素 |
| element | p | 元素所有<p>元素 |
| element > element | div>input | 选择父级元素为<div>的所有<input>元素 |
| element + element | div+input | 选择同一级中紧接在<div>元素之后的所有<input>元素 |
| [arttribute=value] | [taget=_blank] | 选择target="_blank"的所有元素 |
定位页面如下:
如图:使用CSS进行元素定位
# 演示代码如下
from selenium import webdriver import time driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(20) # 元素定位测试 # 以百度搜索输入框元素为例 driver.get(r"http://www.baidu.com/") # 元素ID定位 # driver.find_element_by_id('kw').send_keys("丰巢科技") # 元素name属性定位 # driver.find_element_by_name('wd').send_keys("丰巢科技") # 元素class属性定位 # driver.find_element_by_class_name("s_ipt").send_keys("丰巢科技") # 元素的tag名称定位,这个不常用,无法唯一定位 # driver.find_element_by_tag_name('input').send_keys("丰巢科技") # link定位 # driver.find_element_by_link_text("登录").click() # partial link定位 # driver.find_element_by_partial_link_text("录").click() # xpath定位 # driver.find_element_by_xpath('//input[@) # ccs进行元素定位 # driver.find_element_by_css_selector('input#kw').send_keys("丰巢科技") time.sleep(5) driver.close()