今天来讲讲Selenium之CSS定位

发表于:2020-5-07 13:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:雨墨轩痕    来源:CSDN

  功能自动化学习selenium必经之路就是定位,在大部分入门定位中都会涉及id、name、classname定位,这是最简单的定位,但是由于前端代码没有一个规范说一定要使用id、name、classname,在很多前端开发中,使用id、classname大部分都是为了调样式或者js、jQuery触发事件,在不使用这些控件触发事件的前提或者样式的情况下,大部分是不会有id、classname这种好用的定位,所以xpath、css定位应运而生,灵活的特性在定位中非常好用,但是缺点就是学习成本会很高,特别是css的定位逻辑。当然现在很多浏览器都提供了复制xpath、css定位,你可以观察一下复制出来的定位路径,要么就很长、要么第二天你自己都看不懂是定位什么,所以还是自己亲自来写,使用自己的逻辑来写更简洁更易懂。xpath定位相对于css定位要简单,下面主要讲讲CSS定位,当然如果你用xpath定位已经很熟练,css定位可能作用就不大了,两者任选一种基本都能完成大部分定位啦,技多不压身,了解下也是可以滴嘛。
  顺便解释一下,很多人在学习功能自动化,经常会被框架所忽悠,比如selenium,会冒出java+selenium、python+selenium、robotframework等,实际呢,三个东西用的都是selenium这套东西,所以在使用定位方法都是一样的,因为都是selenium;曾经很火的QTP描述性编程用的定位也类似。当然也遇到很多人对框架不理解的,下一篇文章我觉得有必要把测试思想、框架思想这套东西说一下啦。下面以百度为例,为什么又是百度,因为百度这个首页是很有代表性的,id、name、class一应俱全。
  CSS定位可以在浏览器中Console使用$$来验证。
  一、通过id定位
  (1)#kw  定位id=kw的元素
  (2)input#kw 定位id=kw的input标签元素
  python:driver.find_element_by_css_selector("input#kw")
  java:driver.findElement(By.cssSelector("input#kw"))
  robotframework:css=input#kw
  为什么我要一一举例,就是想说明下,selenium对于支持不同语言,方法组成写法会有一些不同,但是定位路径都是一致的。
  二、通过classname定位
  说classname定位前,又要操心的说一下啦,在学习css的时候,应该都知道有两种选择器,一种是id选择器,一种是class类选择器,而id用#表示,类选择器用.(点)表示,所以别问我上面id定位的#是什么意思啊。知识点会比较多,所以基础还是比较重要的。
  (1).s_ipt ? ?定位class=s_ipt的元素
  (2)class=bg s_ipt_wr quickdelete-wrap,类似这种叫复合class,由多个类选择器组成,定位的写法则是:.bg.s_ipt_wr.quickdelete-wrap,所有空格用.(点)代替
  三、元素属性定位
  (1)input[id=kw]
  (2)input[class=s_ipt]
  (3)input[id=kw][class=s_ipt]
  还支持模糊匹配的,主要是太长的属性值方便使用;以class=bg s_ipt_wr quickdelete-wrap举例:
  (1)span[class ^=bg] 匹配所有span标签class属性值bg开头的元素
  (2)span[class $=rap] 匹配所有span标签class属性值rap结尾的元素
  (3)span[class *=quick] 匹配所有span标签class属性值中间有quick的元素
  四、元素层级定位
  1、子元素定位(>大于号)
  (1)span>input 定位span标签下的input标签
  (2)form>span>input 定位form标签下span标签下的input标签
  以大于号>为分层,查找元素定位必须一层一层的以>往下写,有多个则匹配多个
  2、后代元素(空格)
  (1)span input  定位span下所有的input标签,包括span下的所有层次的input,注意不是span下一层的input,是所有
  3、元素层级css还支持三个方法,分别是first-child、last-child、nth-child(n)
  (1)first-child:第一个后代元素
  (2)last-child:最后一个后代元素
  (3)nth-child(N):指定第N个后代元素
  下面举例:
  (1)input:first-child 定位所有层次第一个为input的元素,注意是第一个元素为input标签的
  (2)span?input:first-child 定位span标签下,第一个为input标签的元素
  (3)span :last-child  定位span标签下,最后一个元素
  (4)span input:last-child 定位span标签下,最后一个为input标签的元素
  (5)span :nth-child(2) 定位span标签下,第二个元素
  (6)form.fm>:nth-child(2) 定位form标签,class等于fm下的第二个元素
  总结:相对于xpath,css定位会相对来说更复杂,特别是层级的定位,但是其实搞懂两点,以大于号>层次的是一层一层下的,而空格则是后代元素,也就是所有的层。当然css定位组合也是很灵活,具有很多可变性,非常实用。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号