selenium(1)-详细解读元素定位的八种方式
安装selenium和下载webdriver
安装selenium
- pip install selenium
- pip install selenium -U (判断是否有最新版本)
下载driver
Google: http://npm.taobao.org/mirrors/chromedriver/ 或者是 https://chromedriver.storage.googleapis.com/index.html 打开找到对应的浏览器驱动下载
firefox:https://github.com/mozilla/geckodriver/releases打开找到对应的浏览器驱动下载

一个百度小demo
#!/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ =
__Time__ = 2020/6/17 13:48
__Author__ = xinhua
__Blog__ = https://www.cnblogs.com/xinhua/
"""
import time from selenium import webdriver # 加载浏览器驱动
driver = webdriver.Chrome(r"C:\python3.6\chromedriver.exe") # 访问网址
driver.get("http://www.baidu.com") # 找到搜索框
inputElement = driver.find_element_by_id("kw") # 输入搜索内容
inputElement.send_keys("xinhua19") # 找到搜索按钮
searchElement = driver.find_element_by_id("su") # 点击搜索按钮
searchElement.click() time.sleep(5) # 释放资源, 退出浏览器
driver.quit()
总结
可以看到,流水账式写Web自动化测试代码的顺序就是:加载驱动 - 访问链接 - 页面操作
元素定位八种方式
首先我们可以搭建1个禅道,后续演示可以使用禅道,禅道地址是IP:port/zentao,禅道搭建方法可以参考我的另外一篇博客https://www.cnblogs.com/xinhua19/p/13151296.html
方法一 :通过元素id定位
# 找到id=account的元素
username = driver.find_element_by_id("account")
# 输入值
username.send_keys("admin")
知识点:在前端,一般id是唯一的,只属于1个元素,通过id定位到的元素是唯一的
方法二:通过元素的class

# 通过 元素Class查找(仅返回匹配到的第一个)
username = driver.find_element_by_class_name("form-control")
username.send_keys("admin")
知识点
- 在前端,一般多个元素共用一个class
- 但 find_element_by_class_name 只返回第一个匹配到class的元素
- 坏处:当找不到元素则报错
- 如果想返回所有匹配到class的元素,可看下面代码
elements = driver.find_elements_by_class_name("form-control")
for i in elements:
print(i)
知识点
- 返回的是一个元素列表,若只匹配到一个也是列表
- 好处:当没有找到元素时不会报错,而是返回空列表 []
方法三:通过元素的name
# 通过 元素name查找元素(仅返回匹配到的第一个)
password = driver.find_element_by_name("password")
password.send_keys("")
知识点
- 和class一样,也有可能有多个元素共用一个name
- 但 find_element_by_name 只返回第一个匹配到name的元素
- 想返回多个的话,和class一样,需要调用 find_elements_by_name 方法,这里不再赘述,写法和上面一致
方法四:通过元素标签tag_name
# =====通过 元素标签(仅返回匹配到的第一个)=====
p = driver.find_element_by_tag_name("th")
# 打印元素的文本值
print(p.text) print("===分割线")
# =====通过 元素标签(返回匹配到的所有元素)=====
ps = driver.find_elements_by_tag_name("th")
for p in ps:
print(p.text)
执行结果
用户名
===分割线
用户名
密码
知识点
- 多个元素同种HTML标签见怪不怪了
- 同样的, find_element_by_tag_name 返回第一个匹配到标签的元素
- find_elements_by_tag_name 可以返回所有匹配到标签的元素
方法五:通过超链接文本link_text(精确匹配)
atext = driver.find_element_by_link_text("创建账号")
- find_element_by_link_text 是精确匹配,需要文本完全相同才能匹配
- 若需要返回全部匹配到的元素,也需要用 find_elements_by_link_text
方法六:通过超链接文本(模糊匹配)
# =====通过 超链接的文本查找元素(支持模糊匹配)
atext = driver.find_element_by_partial_link_text("肺炎")
- find_element_by_partial_link_text 支持模糊匹配,包含文本则匹配成功
- 若需要返回全部匹配到的元素,也需要用 find_elements_by_partial_link_text
方法七:通过xpath(万能,重点)
# 通过xpath
lis = driver.find_element_by_xpath('//ul[@class="timeline timeline-sm"]/li/a[@href="/zentao/tutorial-index--createAccount.html"]')
方法八:通过CSS选择器(万能,重点)
# 通过css
lis = driver.find_element_by_css_selector('a[href="/zentao/tutorial-index--createAccount.html"]')
print(lis.text)
其中Xpath,CSS包含的知识点很多,后续再讲
selenium(1)-详细解读元素定位的八种方式的更多相关文章
- Selenium Webdriver元素定位的八种常用方式
楼主原创,欢迎学习和交流,码字不容易,转载请注明出处,谢谢. 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素 ...
- Selenium Webdriver元素定位的八种常用方法
如果你只是想快速实现控件抓取,而不急于了解其原理,可直接看: http://blog.csdn.net/kaka1121/article/details/51878346 如果你想学习web端自动化, ...
- Selenium Webdriver元素定位的八种常用方式(转载)
转载自 https://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或 ...
- 爬虫-【selenium—Webdriver元素定位的八种常用方式
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
- Selenium Webdriver元素定位的八种常用方式【转】
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
- 史上最全!Selenium元素定位的30种方式
Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ...
- Selenium元素定位的几种方式
一.通过id查找 例:<input id="kw" name="wd" class="s_ipt" value="" ...
- [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位
无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
随机推荐
- MySQL知识-MySQL不同版本多实例
一.不同版本多实例 0.软连接不同版本软件,修改环境变量 [root@db01 database]# ln -s mysql-5.6.46-linux-glibc2.12-x86_64 mysql ...
- vue-cli3区分开发和生产环境
vue-cli3出来很久了,之前一直使用vue-cli2的配置,并且区分了生产和开发环境,自己的理解,环境分两大类,开发环境 和生产环境,最近升级到了vue-cli4当然改动并不大. 升级的主要原因嘛 ...
- G1 垃圾回收器简单调优
G1: Garbage First 低延迟.服务侧分代垃圾回收器. 详细介绍参见:JVM之G1收集器,这里不再赘述. 关于调优目标:延迟.吞吐量 一.延迟,单次的延迟 单次的延迟关系到服务的响应时延, ...
- [SD心灵鸡汤]002.每月一则 - 2015.06
1.用最多的梦面对未来 2.自己要先看得起自己,别人才会看得起你 3.一个今天胜过两个明天 4.要铭记在心:每天都是一年中最美好的日子 5.乐观者在灾祸中看到机会:悲观者在机会中看到灾祸 6.有勇气并 ...
- Cypress系列(4)- 解析 Cypress 的默认文件结构
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 默认文件结构 在使用 cypress o ...
- 快速复习C语言 - 1变量与运算符
变量与运算符 本篇以读者知道 int.char.float.double 等数据类型为前提条件. float 类型注意事项 float 类型数没有办法跟一个数真正比较是否相等,可以定义借助绝对值在一定 ...
- maven工程打胖瘦jar包插件
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <versio ...
- ASP.NET的Web网页如何进行分页操作(Demo举例)
大概说一下思路,可以利用sql的 Offset/Fetch Next分页,点击这里 这里的Demo利用LINQ的写好的方法 //这里是某个表的列表 skip是跳过前面的多少条数据 take这是跳过前面 ...
- Java实现 蓝桥杯 算法提高 GPA(暴力)
试题 算法提高 GPA 问题描述 输入A,B两人的学分获取情况,输出两人GPA之差. 输入格式 输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现. G ...
- Android studio环境配置(运行报错)
报错的种类有很多,下面的方法能解决大多数: 所有路径不能用中文,不能有空格,逗号句号也不能用中文,项目文件路径也不行 首先要配置Java环境,这个就不多说了, 这里有以下JAVA_HOME的配置,下图 ...