如果你还想从头学起Selenium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)

Web UI自动化中,定位方式的优先级

  • 优先级最高:ID
  • 优先级其次:name
  • 优先级再次:CSS selector
  • 优先级再次:Xpath

针对css selector和xpath的优先级做一个简单的说明

在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?

  • 原因1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
  • 原因2:语言简洁,明了,相对xpath
  • 原因3:前端开发主要是使用css,不使用xpath,所以在技术上面,我们可以获得帮助的机会非常多

定位元素的注意事项(划重点)

  • 找到待定位元素的唯一属性
  • 如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用 > , " " , + 等进行辅助定位
  • 不要使用随机唯一属性定位
  • 最重要的是多跟研发沟通,尽量把关键元素加上ID或者name,并减少不合理的页面元素,例如重复ID这样的事情最好不要发生

首先,基础的CSS选择器

选择器 名字 例子 例子描述
基础选择器
.class class选择器 .intro 选择 class="intro" 的所有元素。
#id id选择器 #firstname 选择 id="firstname" 的所有元素。
* 通配符   选择所有元素。
element 标签选择器 p 选择所有 <p> 元素。
多层选择器
element,element 分组选择器 div,p 同时选择所有 <div> 元素和所有 <p> 元素。
element element 后端选择器 div p 选择 <div> 元素内部的所有 <p> 元素(包括子元素、孙子元素)
element>element 子元素选择器 div>p 选择 <div> 元素下的 <p> 子元素
element+element 相邻选择器 div+p 选择 <div> 元素之后的所有兄弟 <p> 元素。
属性选择器
[attribute] [target]   选择带有 target 属性所有元素。
[attribute=value] [target=_blank]   选择 target="_blank" 的所有元素。
[attribute~=value] [title~=flower]   选择 title 属性包含单词 "flower" 的所有元素。
[attribute|=value] [lang|=en]   选择 lang 属性值以 "en" 开头的所有元素。

html页面中,css正确写法的栗子

/* id选择器 */
#abc {
color: #cc0000;
font-size: 12px;
} /* class 选择器 */
.down {
color: #66cc66;
} /* 标签选择器 */
p {
background: cornflowerblue;
} /* 标签选择器可以与class选择器组合使用 */
p.down {
font-size: 24px;
} /* 分组选择器 */
ul,
div,
.up {
color: #cc0000;
} /* 属性选择器 */
[href] {
color: #cc6600;
} span[title="hello"] {
color: #00FFFF;
} span[title~="python"] {
font-size: 24px;
} /* 后代选择器 */
div li {
background: forestgreen;
} /* 子元素选择器 */
div[id="up"]>ul {
color: #cc6600;
} /* 相邻兄弟选择器 */
#down+li {
font-size: 24px;
} /* 后续兄弟选择器 */
#down~li {
color: #cc0000;
}

然后,伪类选择器

选择器 例子  例子描述
:first-child p:first-child 选择属于父元素的第一个子元素的每个 <p> 元素。
:nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。
:nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。
:nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素。
:nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。
:last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素。

Selenium系列(十二) - 自动化必备知识之CSS选择器的详细使用的更多相关文章

  1. 爬虫系列(十二) selenium的基本使用

    一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...

  2. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  3. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  4. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  5. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  6. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  7. SpringBoot系列(二)入门知识

    SpringBoot系列(二)入门知识 往期推荐 SpringBoot系列(一)idea新建springboot项目 引言 本来新建springboot项目应该放在入门知识这一章的,但是由于新建spr ...

  8. Alamofire源码解读系列(十二)之时间轴(Timeline)

    本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...

  9. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

随机推荐

  1. Nginx使用和配置

    概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 Nginx 反向代理与负载均衡 Nginx 实现高速缓存 Nginx 性能参数调优 一.Nginx 简介与安装 Nginx ...

  2. 大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)

    大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)   现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法.一 ...

  3. this软拷贝详解

    <script> if( !Function.prototype.softBind ){ Function.prototype.softBind = function( obj ){ va ...

  4. startUML5.0中的tools下怎么没有java、c等选项

    这也是帮一个直系学妹弄得,哈哈~~~ 具体做法如下: 进入到StartUML\modules目录下,里面有很多文件夹,比如startuml-cpp.startuml-csharp等等, 进入到每个文件 ...

  5. java套打快递单

    package org.sq.common.utils; import org.apache.commons.codec.binary.Base64;import org.apache.http.en ...

  6. getBoundingClientRect的实用场景

    在用vue开发项目时候,遇到一个问题,首页有代办列表,是固定定位,滚动时候需要监听距离页面顶部的距离,如果很接近顶部则将代办列表展示,首页隐藏,如果再网上翻动则又回到首页. 因为是是fixed定位,所 ...

  7. SpringBoot突报java.lang.NoSuchFieldError分析

    SpringBoot项目,引了一个内部的工具包,竟然导致启动失败,报找不到freemarker Configuration类的一个属性,网上的解法都大同小异,最终用了自己的办法解决,花点时间记录下来, ...

  8. MySQL数据库常用命令行整理(表格)

    Laplace Kang 2020-03-13T08:33:09Z 2020-03-14T17:35:53Z Sheet1 12480 9 600 600 6 9600 23040 0 0 600 0 ...

  9. OFD电子证照模版制作工具 --(采用wpf开发)

    前言  ofd应用的范围非常广,电子证照是其中非常重要的一个应用.同一类电子证照具有相同的板式.元数据:所以电子证照非常适合用模版来制作.模版就是板式样式固定,每个具体的证照只是文字或图片内容不同.比 ...

  10. py123第一次作业

      绘制五角星<br>import turtle turtle.setup(600,350,200,200) turtle.pensize(2) turtle.pencolor(" ...