概述
八种元素定位详解
# 创建浏览器驱动对象, 使用谷歌浏览器
driver = webdriver.Chrome()
1.id定位:
- 特色: HTML元素id在HTML页面内是唯一的
- 说明: 根据HTML元素id属性来定位
- 前提: HTML元素必须有id属性
- 方法: driver.find_element_by_id()
2.name定位:
- 特色: HTML元素name属性值可以重复
- 说明: 根据元素name属性来定位
- 前提: 元素必须有name属性
- 方法: driver.find_element_by_name()
3.class定位
- 特色: HTML元素class属性可以多个命名
- 说明: 根据元素的class属性来定位
- 前提: 元素必须有class属性
- 方法: driver.find_element_class_name()
4.tag_name定位
-
特色: 适合定位页面中唯一标签名(eg: title)
-
说明: 根据元素的标签名称来定位
-
方法: driver.find_element_by_tag_name()
如果页面中有多个相同标签名, 默认返回符合条件的第一个元素
5.link_text
-
特色: 精准定位a标签
-
方法: driver.find_element_by_link_text()
只能传入全部匹配文本(精准定位)
6.partial_link_text:
-
特色: 模糊和全部定位a标签
-
方法: driver.find_element_by_partial_link_text():
使用模糊匹配时, 最好选择代表唯一性的词
7.xpath定位
为什么使用xpath定位?
因为之前学习的定位方法, 使用场景非常单一, 稍微特殊场景, 无法使用;
什么是xpath:
xml path: 简称
xml: 一种标记语言, 用于数据存储和传递;
xpath常用策略:
1. 路径定位
1). 相对路径: 以双斜杠开头, 层级之间使用单斜杠分隔, 层级各级都可以结合属性使用
2). 绝对路径: 以单斜杠开始, 从根元素开始逐级往下写(不可跳跃元素),层级之间用单斜杠(/)分隔;
2. 相对路径 + 属性 eg: //*[@id='id_value']
3. 相对路径 + 逻辑属性 eg: //*[@id="id_value" and @name="name_value"]
4. 相对路径 + 层级 eg: //p[@id='id_value']/input[@id='id_value']
提示:
1). 能指定标签名,就指定,否则使用*号代替;
2). //或/后只能跟标签名或*
3). 在xpath中所有元素属性必须使用@修饰
xpath语法扩展:
1. //*[text()='xxx'] # 查找文本值等于xxx的元素,注意: 此处text()非属性,所以不使用@
2. //*[contains(@id,'A')] # 查找id属性包含A的元素 注意: contains为关键字, 不可改变, 传值的时候不能越字母; 如: userA 写成 uA
3. //*[starts-with(@id,'u')] # 查找id属性以u字母开的元素 注意: 只能顺着写, 不能倒着写;
8.css定位
说明:
css, 主要控制元素的样式; (css语言中有非常强大的选择器, 利用选择器查找元素, 速度快)
为什么使用css选择器?
xpath运行速度慢, css运行速度快, 语法更加强大, 更加简单
css选择器:
1. id选择器
前提: 元素必须有id属性
语法: #id_value
2. class选择器
前提: 元素必须有calss属性
语法: .class_value
3. 元素选择器
语法: element 如: input
4. 属性选择器
语法:
1. [id='id_value'] # 查找id值为id_value的元素
2. [id] # 查找元素中有id属性所有元素
5.层级选择器
语法:
1. p input # p标签的后代所有input元素(后代选择器)
2. p>input # p标签下的直属input元素(子类选择器)
css选择器扩展
css延伸
[id^='u'] # 查找id属性并且以字母u开头的元素
[id$='r'] # 查找id属性并且以字母A结尾的元素
[id*='user'] # 查找id属性并且包含字母user的元素
扩展:
li:first-child # 查找相同父类下的第一个li元素
li:nth-child(2) # 查找相同父类下的第二个li元素
li:last-child # 查找相同父类下的第最后1个li元素
八种元素使用优先级总结
1. 如果是链接文本, 推荐: link_text
2. 其他元素首选: css
3. css无法解决: xpath
实际工作很少手写元素定位
主要元素定位方式:
火狐: 老版本(FirePath, FireBug), 新版本(Chropath, Try XPath, xPath Finder) | 审查元素>选中元素>右键菜单
谷歌: Chropath, XPathHelper(应用商店插件) | 审查元素>选中元素>右键菜单
三种元素定位方法
1. find_element_by_xxx()
说明: 定位单个元素,返回值为元素, 如果未找到元素, 会报错
2. find_elements_by_xxx()
说明: 定位一组元素,返回的格式为列表;如果没找到,返回空列表;
应用:
1. 通过下标访问,下标从0开始
2. 遍历访问
3. find_element()
1. 导包
from selenium.webdriver.common.by import By
2. 调用方法[driver.find_element(类型,值)]
类型:By.XXX(By.CSS_SELECTOR/By.XPATH/...)
值:根据不同的类型编写不同的语法
提示:本方法是工作中最常使用的方法, 可以通过PO模式进行封装使用(请关注后续文章)
最后
以上就是单身高山为你收集整理的Selenium之元素定位详解与进阶(二)的全部内容,希望文章能够帮你解决Selenium之元素定位详解与进阶(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复