所有的UI层的自动化都是基于元素定位来实现的,所有的被操作的元素,都是WebElement元素,而WebElement元素都是通过HTML标签来体现的。
(一)HTML标签的基本格式
<tagName attribute1=”” attribute2>text</tagName>
<tagName attribute1=”” attribute2 /tagName>
标签:
a:超链接
img:图片
input:输入框文件上传
button:按钮
通用:div,li,span
实际系统中,元素的标签类型不是由表象来决定的,是通过CSS样式表来决定的。
而自动化时,就是基于标签的属性来定位标签
如何定位精准你需要操作的元素:
(二)八种元素定位
- Id(基于元素属性中id属性来定位的)
- name
- link text
- partial link text
- classname
- tagname
- cssselector
- xpath
1.id(基于元素属性中id属性来定位的)
id类似于人们的身份证上的身份证号码,不出意外都不会出现重复
2.name
name类似于身份证上的姓名,可能会出现重复
需检查一下:ctrl+F,输入框中输入name值,回车
3.link text
主要用于超链接进行定位
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>
find_element_by_link_text('新闻')
4.partial link text:link text的模糊查询版本,类似于数据库中的like%
当模糊查询匹配到多条元素,自动选取第一条
find_elements_by_partial_link_text--结果是一个list,[]这个标数字,找对应的元素
5.classname:基于元素样式进行定位,非常容易遇到重复的
复杂的class属性,一个空格就表示一个class,classname值加空格会报错,不加空格,会出现很多重复
所以非常不推荐用classname定位
6.tagname:标签名进行定位,
7.cssselector
选中-右键-Copy-Copy selector
8.xpath
目前应用最多的一种行为,基于页面结构来进行的定位
1)绝对路径:从html根路径下一层一层往下数,找到对应的层级,从而找到元素
2)相对路径:基于匹配制度来查找元素,依据xpath语法结构来走
选中-右键-Copy-Cppy XPath
例如:绝对路径:/html/body/script[4]---script从1开始
相对路径://*[@id="su"],
//--从根路径下开始查找元素
* --任意元素
[]--表示筛选条件(查找函数)
@ --表示基于属性来筛选,例如:@id="kw"表示基于id属性值为kw的条件来进行筛选
自己写xpath相对路径:
//--根目录查找
input--查找的是input标签
[]--表示筛选条件(查找函数)
@ --表示基于属性来筛选,@name=“account"
完整://input[@name="ie"]
//div[@]
确认xpath路径是否正确:
1.在Chrome开发者工具Elements界面使用ctrl+f查找进行校验
2.在Chrome开发者工具Console界面输入 $x()进行校验,如: $x('//input[@name="ie"]')
(三)PyCharme中实现语句
(1) 基于id的定位
driver.find_element_by_id('id)
(2)基于name属性定位
driver.find_element_by_name('name')
(3)基于link text
driver.get('http://www.baidu.com')
lk = driver.find_element_by_link_text('新闻')
lk.click()
(4)基于partial_link_text,获取多元素时的操作
dr = driver.find_elements_by_partial_link_text('百度')
for d in dr:
print(d.text)
(5) 基于classname定位
dr = driver.find_element_by_class_name('wrapper_new')
print(dr.text)
(6)基于tagname定位
dr = driver.find_elements_by_tag_name('input')
for d in dr:
print(d)
(7)基于 cssselector
driver.find_element_by_css_selector('#kw').send_keys('Python')
(8)基于xpath定位 driver.find_element_by_xpath('//*[@id="kw"]').send_keys('python')