UI自动化 Selenium元素定位与元素操作

元素定位

使用步骤

  1. 打开⾕歌浏览器
  2. 输⼊url
  3. 找元素及操作
  4. 关闭浏览器

八大定位方法

1、id
2、name
3、class
4、tag_name
5、link_text  <a> 标签文本精准匹配
6、partial_link_text   <a>标签文本模糊匹配
7、xpath
8、css

3.1 id定位

  1. ⽅法: driver.find_element_by_id("id值")
  2. 前置: 标签必须有id属性
  3. 输⼊⽅法: 元素.send_keys("内容"

3.2 name定位

  1. ⽅法: driver.find_element_by_name("name属性值")
  2. 前置: 标签必须name属性
  3. 特点: 当前⻚⾯可以重复
  4. 提示: 由于name属性值可以重复,所以使⽤时需要查看是否为唯⼀。

3.3 class定位

  1. ⽅法: driver.find_element_by_class_name("class属性值")
  2. 前置: 标签必须有class属性
  3. 特点: class属性值可以有多个值
  4. 说明:如果标签有多个class值,使⽤任何⼀个都可以。如:c1

3.4 tag_name定位

  1. 说明:根据的标签名进⾏定位
  2. ⽅法: driver.find_elemet_by_tag_name("标签名")
  3. 提示: 如果⻚⾯存在多个相同标签,默认返回第⼀个。
  1. 说明: 根据链接⽂本(a标签)定位
  2. ⽅法: driver.find_element_by_link_text("链接⽂本")
  3. 特点: 传⼊的链接⽂本,必须全部匹配,不能模糊
  1. 说明: 根据链接⽂本(a标签)定位
  2. ⽅法: driver.find_element_by_partial_link_text("链接⽂本")
  3. 特点: 传⼊的链接⽂本,⽀持模糊匹配(传⼊局部⽂字)

3.7 扩展-查找⼀组元素

  1. 说明:返回列表格式,要使⽤需要添加下标或遍历。
  2. ⽅法: driver.find_elements_by_xxxx(),
  3. 提示: ⼋⼤元素定位⽅法,都可以使⽤⼀组元素定位,如果没有搜索到符合标签,返回空 列表。

总结

alt

3.8 Xpath

3.8.1 使用场景

  1. 如果标签没有(id\name\class)3个属性,也不是链接标签,只能使⽤tag_name定位,⽐较麻 烦。
  2. ⽅便在⼯作⽤中查找元素,使⽤xpath和css⽐较⽅便(⽀持任意属性、层级)来找元素

3.8.2 基本介绍

  1. 说明:xpath是xml path简称,使⽤标签路径来定位。
  2. 绝对路径:从根⽬录开始,逐级查找标签。
  3. 相对路径:从任意层级开始,查找标签。

3.8.3 使用策略

⽅法: driver.find_element_by_xpaht("表达式")

1、路径
2、属性
3、属性与逻辑(多个属性)
4、属性与层级(路径)

属性

  • 单属性: //*[@属性名='属性值']
  • 多属性: //*[@属性名='属性值' and @属性名='属性值']
  • 提示:可以使⽤任何属性。

层级与属性

  • 说明: 如果元素现有的属性不能唯⼀匹配,需要结合层级使⽤
    语法:
  • //⽗标签/⼦标签 必须为直属⼦级
  • //⽗标签[@属性='值']
  • //后代标签 ⽗和后代之间可以跨越元素

扩展

  • 根据显示⽂本定位: //*[text()='⽂本值']
  • 属性值模糊匹配: //*[contains(@属性名,'属性部分值')]

css选择器

策略

1、id选择器
2、类选择器
3、标签选择器
4、属性选择器
5、层级选择器

id选择器

  • 语法: #id属性值
  • 前置: 标签必须id属性

类选择器

  • 语法: .class属性值
  • 前置: 标签必须class属性

标签选择器

  • 语法: 标签名
  • 提示: 注意标签是否在⻚⾯中唯⼀,否则返回单个或所有

属性选择器

  • 语法: [属性名='属性值']
  • 说明: 标签任意属性都可以
  • 案例 alt
# ⽤户名 id选择->#id属性值
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 密码 属性选择器->[属性名='属性值']
driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456")
# 电话 类选择器->.class属性值
driver.find_element_by_css_selector(".telA").send_keys("18600000000")
# 确定 标签选择器-标签名
sleep(2)
driver.find_element_by_css_selector("button").click()

层级选择器

  • ⽗⼦关系: 选择器>选择器 如: #p1>input
  • 后代关系: 选择器 选择器 如: #p1 input
  • 提示: 选择器使⽤任何⼀种css选择器(id选择器、类选择器、属性选择器、标签选 择器)都可以

find_element

说明: ⼋种元素定位⽅法底层使⽤的查找元素⽅法都是find_element,通过By不同的值区 分定位⽅式 实例:

"""
 ⽬标:讲解find_element使⽤
 场景:后期项⽬封装中,使⽤元素查找⽅法
 ⽬的:对后期封装元素查找⽅法
"""
driver.find_element(By.ID,"userA").send_keys("admin")
driver.find_element(By.NAME,"passwordA").send_keys("123456")
driver.find_element(By.CLASS_NAME,"telA").send_keys("18600000000")
sleep(2)
driver.find_element(By.TAG_NAME,"button").click()

元素定位总结

alt

结论:
 1、⾸推css定位,原因执⾏速度快。
 ①如果有ID属性,使⽤#id
 ②没有id属性,使⽤其他有的属性(能代表唯⼀的属性)
 ③如果属性都带不了唯⼀,使⽤层级
 2、如果css解决不了,使⽤xpath。

常⽤操作⽅法

元素=driver.find_element()

  1. 点击:元素.click()
  2. 输⼊:元素.send_keys(内容)
  3. 清空:元素.clear()

获取元素信息

  1. 获取⼤⼩: 元素.size
  2. 获取⽂本: 元素.text
  3. 获取属性: 元素.get_attribute('属性名')
  4. 元素是否可⻅: 元素.is_displayed()
  5. 元素是否可⽤: 元素.is_enabled()
  6. 元素是否选中: 元素.is_selected()
  • 案例
# 获取⼤⼩ 元素.size
user = driver.find_element(By.CSS_SELECTOR,"#userA").size
print("⽤户名输⼊框的⼤⼩:",user)
# 获取内容 元素.text
a_text = driver.find_element(By.TAG_NAME,"a").text
print("第⼀个a标签的⽂本:",a_text)
# 获取属性 超连接地址
a_href = driver.find_element(By.TAG_NAME,"a").get_attribute("href")
print("第⼀个a标签的链接:",a_href)
# 判断span标签是否可⻅ 元素.is_displayed
span = driver.find_element(By.TAG_NAME,"span").is_displayed()
print("span是否可⻅:",span)
# 判断取消按钮是否可⽤ is_enabled
btn_is_enabled = driver.find_element(By.CSS_SELECTOR,"#cancelA").is_enabled()
print("取消按钮是否可⽤:",btn_is_enabled)
# 旅游是否选中 is_selected
is_selected = driver.find_element(By.CSS_SELECTOR,"#lyA").is_selected()
print("旅游是否被选中:",is_selected)
全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务