• 0
  • 0
分享
  • selenium元素定位——软件测试圈
  • 北极 2021-06-17 13:15:23 字数 2342 阅读 1123 收藏 0

更通俗的理解

经过验证id、name,xpath、css四种定位方式是可以的,尤其后两种是“万能的”,所以可以解决99%的定位问题。

id 和 name 定位:

假如把一个元素看作一个人的话,id?和name可以看作一个人的身份证号和姓名。当然,这些属性值是否唯一要看前端工程师如何设计了

1.jpg

根据上面的例子,百度输入框可以取id 和name 进行定位。(前提是id 和name 的值在当前页面上是唯一的)

id=kw

name=wd

xpath定位:

假如,一个人没身份证号没名字怎么找呢?想想你是怎么找朋友吃饭的,他手机不通,电话不回呢?直接上他家去呗,那你一定有他家住址,xx市xx区xx路xx号。Xpath就可以通过这种层级关系找到元素。

百度输入框在整个页面上的位置:

2.jpg

1.Xpath的绝对路径:

/html/body/div[3]/div[1]/div[1]/div[1]/div[1]/form/span[1]/input

我们可以从最外层开始找,html下面的body 下面的第三个div下面的…input 标签.通过一级一级的锁定就找到了想要的元素。

2.Xpath 的相对路径:

绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候相对路径更简便。

2.1.元素本身:

Xpath 同样可以利用元素自身的属性:
Xpath=//*[@id=’kw’]
//表示某个层级下,*表示某个标签名。@id=kw 表示这个元素有个id等于kw。
当然也可以指定标签名:
Xpath=//input[@id=’kw’]
元素本身可以利用的属性就不只局限于id 和name,如:
Xpath= //input[@name='wd']
Xpath= //input[@class='s_ipt']
Xpath= //input[@autocomplete='off']
但要保证这些元素可以唯一识别一个元素。

找上级:

当我们要找的一个人是个刚出生的婴儿,还没起名子也没有入户口(身份证号),但是你会永远跟在你父亲的身边,你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就找到你的。

元素的上级属性为:

3.jpg

找父节点:

Xpath= //span[@class='bg s_ipt_wr quickdelete-wrap']/input
如果父节点没有唯一的属性,可以找祖父节点:
Xpath= //form[@id='form']/span[1]/input

这样一级一级的找上去,知道html,那就是一个绝对路径了。

布尔值写法:

如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三?并且?身份证号为123?的人却可以唯一的确定一个人。那么可以这样写:

Xpath=//input[@name='wd' and @id='kw']
可以and,当然也可以or:
Xpath=//input[@name='wd' or @id='kw']

Xpath 学习地址:http://www.w3school.com.cn/xpath/index.asp

Xpath选取节点:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

谓语:

谓语用来查找某个特定的节点或者包含某个指定的值得节点。

谓语被嵌在方括号中。

路径表达式结果
//table//tr[1]选取属于 table子元素的第一个 tr 元素。
//table//tr[last()]选取属于 table 子元素的最后一个tr 元素。
//table//tr[last()-1]选取属于table 子元素的倒数第二个 tr元素。
//table//tr[position()<3]选取最前面的两个属于table 元素的子元素的 tr元素。
//input[@id]选取所有拥有名为id 的属性的 input 元素。
//input[@id='kw']选取所有 input 元素,且这些元素拥有值为 kw 的 id 属性。

选取未知节点:

//* 选取文档中的所有元素
//table /* 选取table 元素的所有子元素
//input[@*] 选取所有带有属性的title元素

Xpath 轴:

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following选取文档中当前节点的结束标签之后的所有节点。
parent选取当前节点的父节点。
preceding选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling选取当前节点之前的所有同级节点。
//table[@class='tab']//child::tr
Xpath 常用函数:
text()://a[span[text()='应用项目查询']]
contains()://a[span[contains(text(),'应用项目查询')]]
normalize-space()://table[@class='tab']//tr[2]/td[normalize-space()='第三方验证']

删除当前节点字符串的开头和结尾的空白,并把内部的所有空白序列替换为一个


作者:HuiTest

原文链接:https://blog.csdn.net/qq_43422918/article/details/98481852

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 结合了工作经验,写出了这篇文章,是从功能测试转向自动化测试的学习过程。用您5分钟时间阅读完,希望能对您有帮助!什么是自动化测试!你了解吗?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。为什么做自动化测试-你了解吗?1)对个人来说随着时代科技的进步,越来越多的工作偏向于了自动化,软件测试当然也不例外。从发展的趋势来说,只有不断的提升自己,面对各种变化,才可以追上科技的进步。手动测试虽然...
            0 0 777
            分享
          • 10月9日消息,字节跳动向员工披露的一份财报显示,字节跳动2021年收入617亿美元(4390.6亿人民币),增长近80%;净亏损增加了87%以上,达到849亿美元(6041.48亿人民币)。从字节跳动员工分享的财务报告来看,该公司2021年经营收入大增近80%,但为了维持业务高速增长,同期支出也大幅增加,导致经营亏损增超两倍,至逾70亿美元。报道指出,字节跳动净亏损主要是由于那些证券的会计处理。一家公司迅速增加营业收入,不断积累了庞大的储备现金及其他投资,但最终结果却被可转换证券方面未实现的市场损失(价值数百亿美元)所拖累。字节跳动在收入增长的同时,支出方面也在增加。2021年,字节跳动销售...
            0 0 1290
            分享
          • 今年 1 月 28 日,中国国家航天局对地观测与数据中心主任赵坚在新闻发布会上表示,“羲和号”卫星目前已经取得了一系列技术和科学实验成果,中国国家航天局将于今年择机发布。据央视新闻今日报道,其记者从国家航天局获悉,我国首颗太阳探测科学技术试验卫星“羲和号”成果今日正式发布,共创下 5 个国际首次。“羲和号”国际首次实现了超高指向精度、超高稳定度卫星平台技术在轨性能验证及工程应用。具体来说,“羲和号”通过大带宽、高精度磁浮作动器,实现了相机指向精度 10-4° 的超高指向精度、稳定度 10-5°/s 量级的超高稳定度。同时,“羲和号”完成了国际首次太阳空间 Hα 成像光谱仪在轨应用,并成功实现了...
            0 0 836
            分享
          • # 前言一直以来都有人问我,有没有面试题的总结。面试题积累了很多,但没有时间去汇总。这次拿出时间整理一下接口测试相关的面试题,并给出详细参考答案!!!# 第一篇 基础问答(上)### 1. 你测试的接口是如何添加验证点的?接口测试的验证点,也就是接口的断言,通过接口断言,可以实现脚本对程序运行结果的自动验证,输出成功或失败的状态,省去人为判断的过程。对于接口的验证点,我们可以根据任务紧急度和测试目的,粒度上由粗到细,从以下几个角度去依次添加。1) 验证接口响应状态码为200。这是接口测试的最基本要求,响应状态码200代表了该接口能接收请求,能返回响应。如果测试任务比较重,时间比较紧,应该首先针...
            0 1 3605
            分享
          • 测试需求收集完毕后,开始测试设计。测试用例是什么?测试用例就是一个文档,描述输入、动作、或者时间和一个期望的结果,其目的是确定应用程序的某个特性是否正常的工作。设计测试用例需要考虑以下问题:测试用例的基本格式:软件测试用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果,下面逐一介绍。用例编号:测试用例的编号有一定的规则,比如系统测试用例的编号这样定义规则:PROJECT1-ST-001,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号。定义测试用例编号,便于查找测试用例,便于测试用例的跟踪。测试标题:对测试用例的描述,测试用例标题应该清楚表达测试用例的用途。...
            12 14 1947
            分享
      • 51testing软件测试圈微信