Selenium3自动化测试【20】CSS定位元素
CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格。
CSS使用选择器为页面元素绑定属性(如ID、class等),这些选择器可以被Selenium使用来进行定位元素。CSS较为灵活的选择控件的任意属性,CSS定位元素的速度比xpath速度快。
CSS定位是通过find_element_by_css_selector方法。

仍然以bing搜索页为例介绍CSS定位的用法。
要操作Bing搜索页。
- 通过CSS找到搜索框与搜索按钮元素;
- 通过键盘输入检索的关键字;
- 用鼠标单击搜索按钮;
- 提交搜索请求。
搜素框元素的html代码。
<input class="b_searchbox" id="sb_form_q" name="q" title="输入搜索词" type="search" value="" maxlength="100" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" aria-controls="sw_as" aria-autocomplete="both" aria-owns="sw_as">
搜索按钮元素的html代码
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
1. ID定位
通过元素的ID,find_element_by_css_selector()方法实现的源码如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
driver.find_element_by_css_selector("#sb_form_q").send_keys("bella")
driver.find_element_by_css_selector("#sb_form_go").click()
sleep(3)
driver.quit()
2. class定位
通过元素的class, find_element_by_css_selector()方法实现的源码如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
通过css - class定位
driver.find_element_by_css_selector(".b_searchbox").send_keys("bella")
driver.find_element_by_css_selector(".b_searchboxSubmit").click()
sleep(1)
driver.quit()
- 通过name属性定位
借助name属性,通过的find_element_by_css_selector()方法实现的源码如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
通过css-属性定位
driver.find_element_by_css_selector("[name='q']").send_keys("bella")
driver.find_element_by_css_selector("[name='go']").click()
sleep(1)
driver.quit()
4. CSS层级定位
类似XPath的层级定位,CSS也可以通过层级(父元素)实现元素的定位。
搜索框元素的上一级是1个div标签,该div标签的clalss属性等于b_searchboxForm,html代码如下:
<div class="b_searchboxForm" role="search" data-bm="15">
……
……
</div>
搜索按钮元素的上一级也是1个div标签,该div标签的id属性等于sb_go_par,该div的html代码如下:
<div id="sb_go_par" data-sbtip="搜索网页">。
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
</div>
搜素框元素与父元素(class等于b_searchboxForm)的结合。
find_element_by_css_selector("div.b_searchboxForm>input#sb_form_q")
搜索按钮元素与父元素(id等于sb_go_par)的结合。
find_element_by_css_selector("div#sb_go_par>input.b_searchboxSubmit")
可以看到父元素与子元素是通过 > 连接起来的。
通过CSS层级定位,find_element_by_css_selector()方法实现的源码如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
通过css 层级定位
输入框为id,搜索按钮为class
driver.find_element_by_css_selector("div.b_searchboxForm>input#sb_form_q").send_keys("bella")
driver.find_element_by_css_selector("div#sb_go_par>input.b_searchboxSubmit").click()
sleep(1)
driver.quit()
可以通过FireFox浏览器自带的FireFox Developer Tools工具快速生成CSS语法,生成的操做方法与XPath相同,如图所示。

单击【CSS选择器】,即可复制搜素框元素的CSS语法(#sb_form_q),这样快速的获取某元素的CSS语法。
单击【CSS路径】,可获取搜素框元素的CSS路径(类似XPath绝对路径),如图所示。

搜素框元素的CSS路径。
html body.zhs.zh-CN.ltr table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_q.b_searchbox
搜素按钮元素的CSS路径。
html body.zhs.zh-CN.ltr table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm div#sb_go_par input#sb_form_go.b_searchboxSubmit
通过CSS绝对路径,find_element_by_css_selector()方法实现的源码如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
通过css 层级 # 通过完成css路径来定位
driver.find_element_by_css_selector("html body.zhs.zh-CN table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_q.b_searchbox").send_keys("bella")
driver.find_element_by_css_selector("html body.zhs.zh-CN table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_go.b_searchboxSubmit").click()
sleep(3)
driver.quit()
如果你觉的文章读的不过瘾,可以查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
https://ke.qq.com/course/3172187?tuin=9c43f38e
【测试全系列视频课程】请点击我哦.....
地址:https://ke.qq.com/course/2525707?tuin=9c43f38e
图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html)!

Selenium3自动化测试【20】CSS定位元素的更多相关文章
- css选择器用法,使用css定位元素,css和xpath元素定位的区别
css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...
- Selenium3自动化测试【17】元素定位之Link定位
Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...
- Selenium3自动化测试【15】元素定位之Class、Name
@ 目录 1.name定位 2.class定位 1.name定位 通过name定位是另外一种常用的定位元素的方式. 当一个元素存在name属性时,可以使用name定位,依旧以Bing搜索框为例(nam ...
- Selenium3自动化测试【14】元素定位之ID
元素定位 Selenium需要告知其如何去定位元素,来模拟用户动作.例如要操作Bing搜索页. 首先要找到搜索框与搜索按钮: 通过键盘输入检索的关键字: 用鼠标单击搜索按钮: 提交搜索请求. Sele ...
- Selenium3自动化测试【16】元素定位之Tag
@ 目录 1. 通过tag name定位Bing案例 2. 通过tag name定位一组元素案例 3.[测试全系列视频课程]请点击我哦..... tag name方法是通过对HTML页面中tag na ...
- Python+Selenium练习篇之8-利用css定位元素
前面介绍了,XPath, id , class , link text, partial link text, tag name, name 七大元素定位方法,本文介绍webdriver支持的最后一个 ...
- CSS 定位元素之 relative
1. relative 和 absolute relative 会限制 absolute. absolute 会根据 父级的的定位元素来定位. 2. overflow 和 absolue 当overf ...
- Selenium3+python几种定位元素的方法
学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...
- 使用CSS定位元素实现水平垂直居中效果
总结一下平时使用CSS技巧使元素达到水平居中效果 相对定位(或绝对定位)实现水平垂直居中: element{ position:relative; /*这个属性也可以是absolute*/ width ...
随机推荐
- 操作系统-gcc编译器驱动程序
gcc编译器驱动程序,读取x.c文件,翻译成可执行目标文件x 1.预处理阶段 预处理器(cpp)将x.c(源程序,文本文件)中的#等直接插入程序文本中,成为另一个c程序x.i(文本文件) 2.编译阶段 ...
- H5简介(转)
H5究竟是什么? "HTML5(WEB前端)技术由HTML(结构).CSS(样式).JavaScript(行为)组成.HTML5是WEB的未来,HTML5不仅在PC端,更是在移动端上也有广泛 ...
- 【NX二次开发】大开眼界,DLL还可以这么调!
NX二次开发应用程序有交互式.批处理和远程3中模式.交互模式的应用程序(.dll)在NX界面环境下运行.dll以动态链接库的方式被加载到NX的进程空间中.dll可以通过下列几种方式执行. 1.直接激活 ...
- Spring Boot WebFlux-07——WebFlux 中 Redis 实现缓存
第07课:WebFlux 中 Redis 实现缓存 前言 首先,补充下上一篇的内容,RedisTemplate 实现操作 Redis,但操作是同步的,不是 Reactive 的.自然,支持 React ...
- 【题解】 hdu2955 Robberies
有抱负的罗伊·劫匪已经看过很多美国电影,他知道坏人通常会被抓住,经常是因为他们太贪心了.他决定在银行抢劫案中工作一段时间,然后退休后到一所大学从事一份舒适的工作. 题目: 罗伊去几个银行偷盗,他既想多 ...
- [源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构
[源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 目录 [源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 0x00 摘要 0x01 ...
- WPF添加外边框,添加外边框虚线
<Border Background="LightBlue" BorderBrush="Black" BorderThickness="2&q ...
- Linux 命令行查看etcd v2所有的Key
etcd 是一个树型的数据结构,这样看所有的key: curl localhost:2379/v2/keys 这样看某个key的内容: curl localhost:2379/v2/keys/key ...
- 33、awk命令详解
33.1.命令介绍: awk不仅仅是linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告. awk的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,aw ...
- MyBatis温故而知新-底层运行原理
准备工作 public class MainClass { public static void main(String[] args) throws Exception { String resou ...