CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XPath 解析器(Parser))他比xpath更高效更准确更易编写,美中不足是根据页面文字时略有缺陷没有xpath直接。

因为前端开发人员就是用CSS Selector设置页面上每一个元素的样式,无论那个元素的位置有多复杂,他们能定位到,那我们使用CSS Selector肯定也能非常精准的定位到页面Elements。

CssSelector常用定位

1.根据tagName

  driver.findElement(By.cssSelector("input")

2.根据ID

  driver.findElement(By.cssSelector("input#username"));html标签和#id

  driver.findElement(By.cssSelector("#username"));只是#id

3.根据className

  单一class:driver.findElement(By.cssSelector(".username"));.class

  复合class:driver.findElement(By.cssSelector(".username.**.***"));.classA.classB

4.根据元素属性

  1)精准匹配:

    [A]  driver.findElement(By.cssSelector("input[name=username]"));属性名=属性值,id,class,等都可写成这种形式

[B]  driver.findElement(By.cssSelector("img[alt]"));存在属性。例如img元素存在alt属性

    [C]  driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));多属性

  2)模糊匹配:(正则表达式匹配属性)

    [A]  ^=  driver.findElement(By.cssSelector(Input[id ^='ctrl']));匹配到id头部 如ctrl_12

    [B]  $=  driver.findElement(By.cssSelector(Input[id $='ctrl']));匹配到id尾部 如a_ctrl

    [C]  *=  driver.findElement(By.cssSelector(Input[id *= 'ctrl']));匹配到id中间如1_ctrl_12

    更多正则匹配原则请查看CSS3 选择器——属性选择器  http://www.w3cplus.com/css3/attribute-selectors

5.查询子元素

1 <form id="form" class="fm" name="f">
2   <span id="s_kw_wrap" class="bg s_ipt_wr quickdelete-wrap">
3     <input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">
4   </span>
5   <span id="s_btn_wr" class="btn_wr s_btn_wr bg">
6     <input id="su" class="btn self-btn bg s_btn" type="submit" value="百度一下">
7   </span>
8 </form>

以上代码是百度首页搜索输入框和按钮的html,下面讲解以此为例

  1)子元素   A>B

    WebElement input=  driver.findElement(By.cssSelector("form>span>input"));//搜索输入框

  2)后代元素   A空格B

    WebElement input=  driver.findElement(By.cssSelector("form input"));//搜索输入框

  3)第一个后代元素  :first-child

    WebElement span= driver.findElemet(By.cssSelector("form :first-child"));//冒号前有空格,定位到form下所有级别的第一个子元素

      可定位到三个元素:<span id="s_kw_wrap".../> <input id="kw"..../> <input id="su"........./>

    WebElement span= driver.findElemet(By.cssSelector("form input:first-child"));//冒号前无空格,定位到form下所有级别的第一个input元素

      可定位到两个元素:<input id="kw"..../> <input id="su"........./>

    WebElement span= driver.findElemet(By.cssSelector("form>span:first-child"));//冒号前无空格,定位到form直接子元素中的第一个span元素

      可定位到一个元素:<span id="s_kw_wrap".../>

  4)最后一个子元素   :last-child  [类同:first-child]

    WebElement userName = driver.findEleme(By.cssSelector("form :last-child"));//冒号前有空格,定位到form下所有级别的第一个子元素

  5)第2个子元素    :nth-child(N)  [类同:first-child]

    WebElement userName = driver.findElemet(By.cssSelector("form#form :nth-child(2)"));//冒号前有空格,定位到form下所有级别的第二个子元素

6.查询兄弟元素

  driver.findElement(By.cssSelector("form#form span+span")); 定位到a 再定位到和它相邻的b

深入学习cssselector可访问以下地址:

http://www.w3.org/TR/css3-selectors/

CSS3 选择器——基本选择器  http://www.w3cplus.com/css3/basic-selectorsCSS3 选择器——属性选择器  http://www.w3cplus.com/css3/attribute-selectorsCSS3 选择器——伪类选择器  http://www.w3cplus.com/css3/pseudo-class-selector

 
常用方法:

#input 选择id为input的节点

.Volvo 选择class为Volvo的节点

div#radio>input 选择id为radio的div下的所有的input节点

div#radio input 选择id为radio的div下的所有的子孙后代input节点

div#radio>input:nth-of-type(4) 选择id为radio的div下的第4个input节点

div#radio>nth-child(1) 选择id为radio的div下的第1个子节点

div#radio>input:nth-of-type(4)+label 选择id为radio的div下的第4个input节点之后挨着的label节点

div#radio>input:nth-of-type(4)~labe 选择id为radio的div下的第4个input节点之后的所有label节点

input.Vovlo[name='identity'] 选择class为.Volvo并且name为identity的input节点

input[name='identity'][type='radio']:nth-of-type(1) 选择name为identity且type为radio的第1个input节点

input[name^='ident'] 选择以ident开头的name属性的所有input节点

input[name$='entity'] 选择以'entity'结尾的name属性的所有input节点

input[name*='enti'] 选择包含'enti'的name属性的所有input节点

div#radio>*.not(input) 选择id为radio的div的子节点中不为input的所有子节点

input:not([type='radio']) 选择input节点中type不为radio的所有节点

转载于:https://www.cnblogs.com/clarke157/p/6432546.html

CssSelector之selenium元素定位相关推荐

  1. python xpath定位打印元素_python基础教程:8种selenium元素定位的实现

    前言 selenium是一个非常厉害的爬虫利器,不,简直是神器了,它可以自动的控制浏览器,但是你得告诉浏览器,你想干嘛,爬哪里,这时候就要用到元素定位了,在HTML中都有着不同的标签和属性,selen ...

  2. java8种定位_python基础教程:8种selenium元素定位的实现

    前言 selenium是一个非常厉害的爬虫利器,不,简直是神器了,它可以自动的控制浏览器,但是你得告诉浏览器,你想干嘛,爬哪里,这时候就要用到元素定位了,在HTML中都有着不同的标签和属性,selen ...

  3. 面试被问:Selenium元素定位不到问题,如何回答?

    1.maven有什么作用? 最常用的maven相关功能大概以下几种: a. 管理jar依赖 b. 构建项目(打包.编译等) c. 发布项目(共享.上传至服务器,供他人使用) Maven用配置文件的方式 ...

  4. Selenium元素定位方法大全

    目录 一.背景 二.浏览器定位元素 三.Selenium元素定位代码 3.1 通过id定位 3.2 通过class定位 3.3 通过name定位 3.4 通过tagname定位 3.5 通过link_ ...

  5. 解决selenium版本过时 和 selenium - 元素定位

    # selenium模板# @Time : 2022/6/29 16:40# (1)导入selenium from selenium import webdriver from selenium.we ...

  6. python selenium 元素定位_python3+selenium入门04-元素定位

    我们在对浏览界面做操作时,比如点击按钮,搜索框输入内容.都需要把鼠标挪过去,然后再点击,或者输入内容.在selenium操作时也是一样的.需要先对元素进行定位,然后才能进行操作.可以借助浏览器的开发者 ...

  7. selenium 元素定位常用的方法

    元素定位的方法有2个 driver.findElement(By.args) 返回值是WebElement            //此方法是获取单一的页面元素 driver.findElements ...

  8. python学习的一个定位_python学习之——selenium元素定位

    web自动化测试按步骤拆分,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 其中定位元素尤为关键,此篇是使用webdriver通过页面各个 ...

  9. java元素定位div_Java+Selenium元素定位的练习(三)

    一.简单元素定位 学习了元素的定位方法和元素的操作之后,下面就来练习一下,下面是html的源码 test function toAlert() { alert("hello continue ...

最新文章

  1. [development][PCRE] old PCRE
  2. vue ajax跨域提交,vue-cli开发时ajax跨域的方法
  3. 函数调用基础概念原理
  4. linux中退格出现乱码,SSH中的SQL命令按退格键出现乱码的问题解决
  5. Matplotlib 中文用户指南 3.5 艺术家教程
  6. 一些C#实用的方法汇总
  7. 由如何将EditText失去焦点在首次加载时的思考
  8. 结构专业规范大全_建筑业最新规范大全!拿着手机看规范、查标准,超级方便...
  9. itext-asian-5.2.0
  10. 如何用计算机放出音乐,如何录制电脑内部播放的声音及音乐 - 楼月语音聊天录音软件...
  11. fflush函数实例
  12. *jqwidgets jqxgrid 使用心得 jqxgrid教程 jqxgrid+SpringMVC(初级) 集成JAVA SSM
  13. 通过简单的类和接口实现手机套餐办理服务
  14. html5项目心得体会,HTML5开发心得。
  15. Android 从WebServer 获取PDF转图片
  16. 图解实时操作系统和非实时操作系统的区别
  17. matlab仿真plant函数,(整理)matlab预测控制工具箱函数.
  18. sql查询表中的索引
  19. 钉钉小程序快照技术初窥
  20. e66java存档,1000d

热门文章

  1. JS事件冒泡与事件捕获
  2. 银行祖传系统重构实例:创立12年,只支持Python 2,跑着500多个应用程序
  3. 原创 | 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
  4. 如何设计一个良好的接口?
  5. 身为Java程序员,这些开源工具你一定要学会!
  6. 如何实现可以获取最小值的栈?
  7. 如何快速成长为技术大牛?
  8. Nginx 容器教程
  9. TCP/IP学习——利用主机IP与子网掩码计算网络号
  10. Android --- ConnectTimeout 和 ReadTimeout 所代表的意义