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()
  1. 通过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定位元素的更多相关文章

  1. css选择器用法,使用css定位元素,css和xpath元素定位的区别

    css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...

  2. Selenium3自动化测试【17】元素定位之Link定位

    Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...

  3. Selenium3自动化测试【15】元素定位之Class、Name

    @ 目录 1.name定位 2.class定位 1.name定位 通过name定位是另外一种常用的定位元素的方式. 当一个元素存在name属性时,可以使用name定位,依旧以Bing搜索框为例(nam ...

  4. Selenium3自动化测试【14】元素定位之ID

    元素定位 Selenium需要告知其如何去定位元素,来模拟用户动作.例如要操作Bing搜索页. 首先要找到搜索框与搜索按钮: 通过键盘输入检索的关键字: 用鼠标单击搜索按钮: 提交搜索请求. Sele ...

  5. Selenium3自动化测试【16】元素定位之Tag

    @ 目录 1. 通过tag name定位Bing案例 2. 通过tag name定位一组元素案例 3.[测试全系列视频课程]请点击我哦..... tag name方法是通过对HTML页面中tag na ...

  6. Python+Selenium练习篇之8-利用css定位元素

    前面介绍了,XPath, id , class , link text, partial link text, tag name, name 七大元素定位方法,本文介绍webdriver支持的最后一个 ...

  7. CSS 定位元素之 relative

    1. relative 和 absolute relative 会限制 absolute. absolute 会根据 父级的的定位元素来定位. 2. overflow 和 absolue 当overf ...

  8. Selenium3+python几种定位元素的方法

    学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...

  9. 使用CSS定位元素实现水平垂直居中效果

    总结一下平时使用CSS技巧使元素达到水平居中效果 相对定位(或绝对定位)实现水平垂直居中: element{ position:relative; /*这个属性也可以是absolute*/ width ...

随机推荐

  1. pytest的allure的环境配置

    一.下载地址: https://github.com/allure-framework/allure2/releases 二.配置环境变量: 三.验证allure安装成功

  2. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞 练习

    题目1 编写程序,创建两个线程对象,一根线程循环输出"播放背景音乐",另一根线程循环输出"显示画面";要求: 1: 1个线程使用Runnable接口的匿名内部类 ...

  3. 解决servlet响应乱码问题

    当我们使用servlet响应中文时,浏览器接收的内容就会乱码显示出来,原因是响应数据时使用的是utt-8编码,而浏览器解析响应用的的编码却不是utf-8,这样就会造成乱码. 解决办法: respons ...

  4. SpringBoot——配置类实现WebMvcConfigurer接口来配置拦截器、view-controller、视图解析器等

    目的:为了保留SpringBoot对SpringMVC自动配置,另外我们还想要做一些自己拓展的功能 如何做扩展? 以配置view-controller实现跳转为例: 原先在SpringMvc中我们写v ...

  5. WordPress安装篇(1):使用PHPStudy安装WordPress

    我是"小白",既不会编程也不懂CSS能自己搭建网站吗?可以的!只要你会用鼠标,懂打字就能搭建出属于你自己的网站.要怎么样才能做到昵?让我们一起来看看如何实现的吧.在Windows环 ...

  6. 08-ADMM算法

    08-ADMM算法 目录 一.ADMM 算法动机 二.对偶问题 三.对偶上升法 四.对偶分割 五.乘子法(增广拉格朗日函数) 5.1 步长为 $\rho$ 的好处 六.ADMM算法 6.1 ADMM ...

  7. C++容器类插入和删除时迭代器的失效情况总结

    容器底层数据结构类型 包含的具体容器 内存分配特点 insert操作后迭代器失效情况 erase操作后迭代器失效情况 数组型数据结构 vector, string, deque, array 元素分配 ...

  8. No serializer found for class com.bean.user and no properties discovered to create BeanSerializer

    解决方法: 方法1:将bean目录下的实体类属性由private改为public(不推荐): 方法2:给实体类属性设置setter和getter方法(推荐使用).

  9. 对volatile的理解--从JMM以及单例模式剖析

    请谈谈你对volatile的理解 1.volitale是Java虚拟机提供的一种轻量级的同步机制 三大特性1.1保证可见性 1.2不保证原子性 1.3禁止指令重排 首先保证可见性 1.1 可见性 概念 ...

  10. gitlab 设置分支保护功能及取消分支保护

      使用gitlab管理员账户登录gitlab系统 进入需要分支保护的项目 进行分支保护设置 保护开发分支策略配置 保护RC送测库分支策略配置 调整分支保护策略 效果展示 取消分支保护 效果展示