当前位置:网站首页>selenium 元素定位
selenium 元素定位
2022-07-05 07:18:00 【不负韶华ღ】
概述
一个页面最基本组成单元是元素,想要定位一个元素,我们需要特定的信息来说明这个元素的唯一特征。在selenium中,有8种定位到具体元素的方法。如下表所示:
定位器 Locator | 描述 |
---|---|
class | 定位class属性与搜索值匹配的元素(不允许使用复合类名) |
css selector | 定位 CSS 选择器匹配的元素 |
id | 定位 id 属性与搜索值匹配的元素 |
name | 定位 name 属性与搜索值匹配的元素 |
link text | 定位link text可视文本与搜索值完全匹配的锚元素 |
partial link text | 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。 |
tag name | 定位标签名称与搜索值匹配的元素 |
xpath | 定位与 XPath 表达式匹配的元素 |
方法
假设我们的网页由以下部分组成,这里尽可能使网页内容简单,来具体的介绍各个方法的不同。
<ol id="vegetables">
<li class="onions"><span>Onion is a Vegetable</span></li>
<li class="tomatoes"><span>Tomato is a Vegetable</span></li>
</ol>
<ul id="fruits">
<li class="apples"><span>Apple is a Fruit</span></li>
<li class="tomatoes"><span>Tomato is a Fruit</span></li>
</ul>
根据class属性定位
# 定位网页中class为tomatoes的元素,网页中符合条件的有两个,但是该方法只返回第一个
driver.find_element(By.CLASS_NAME, "tomatoes")
# 如果需要返回所有的元素,则需要使用find_elements方法
driver.find_elements(By.CLASS_NAME, "tomatoes")
根据id属性定位
# 在HTML种,由于id相同的两个元素不存在,故不需要find_elements方法
driver.find_element(By.ID, "fruits")
根据css选择器定位
# 在这种定位方式中,功能更加强大,定位更加灵活,但需要掌握css语法
driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
根据tag name定位
# 根据标签的名字,这里是根据<li></li>标签来定位的
driver.find_elements(By.TAG_NAME, "li")
根据name属性定位
name属性一般用于表单中,服务器通过name属性来获取具体元素的值。
# 查找name属性为inp的表单
driver.find_elements(By.NAME, "inp")
根据link text定位
该种定位方式需要元素的内容与输入的内容完全匹配。
# 定位文本为Tomato is a Vegetable的所有元素
driver.find_elements(By.LINK_TEXT, "Tomato is a Vegetable")
根据partial link text定位
该种定位方式只需要元素的内容与输入的内容部分匹配即可定位到相应元素。
# 定位文本中含有Tomato的所有元素
driver.find_elements(By.PARTIAL_LINK_TEXT, "Tomato")
根据xpath定位
# 根据xpath表达式来定位元素
driver.find_elements(By.XPATH, "/ol/li")
边栏推荐
- 氫氧化鈉是什麼?
- What does soda ash do?
- Using GEE plug-in in QGIS
- IPage能正常显示数据,但是total一直等于0
- 【无标题】
- And play the little chestnut of dynamic agent
- 二分查找(折半查找)
- Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘
- Hdu1232 unimpeded project (and collection)
- 你心目中的数据分析 Top 1 选 Pandas 还是选 SQL?
猜你喜欢
SD_CMD_SEND_SHIFT_REGISTER
C#学习笔记
Ros2 - ros2 vs. ros1 (II)
docker安装mysql并使用navicat连接
window navicat连接阿里云服务器mysql步骤及常见问题
Rough notes of C language (2) -- constants
剑指 Offer 56 数组中数字出现的次数(异或)
Import CV2 prompt importerror: libgl so. 1: Cannot open shared object file: no such file or directory
Ethtool principle introduction and troubleshooting ideas for network card packet loss (with ethtool source code download)
Concurrent programming - how to interrupt / stop a running thread?
随机推荐
Negative number storage and type conversion in programs
基于Cortex-M3、M4的GPIO口位带操作宏定义(可总线输入输出,可用于STM32、ADuCM4050等)
Ros2 - ros2 vs. ros1 (II)
Import CV2, prompt importerror: libcblas so. 3: cannot open shared object file: No such file or directory
并查集理论讲解和代码实现
postmessage通信
【Node】nvm 版本管理工具
Implementation of one-dimensional convolutional neural network CNN based on FPGA (VIII) implementation of activation layer
Light up the running light, rough notes for beginners (1)
Do you choose pandas or SQL for the top 1 of data analysis in your mind?
M2DGR 多源多场景 地面机器人SLAM数据集
玩转gRPC—深入概念与原理
Reading literature sorting 20220104
The difference between NPM install -g/-save/-save-dev
[vscode] recommended plug-ins
Ros2 topic (VIII)
Import CV2 prompt importerror: libgl so. 1: Cannot open shared object file: no such file or directory
Altimeter data knowledge point 2
Chapter 2: try to implement a simple bean container
【软件测试】06 -- 软件测试的基本流程