Xpath,Css元素通用定位

一、问题:
通常情况下,元素定位使用id、name、class、text可以满足日常大部分定位需求。但是

随着自动化测试的深入,和不同框架要求,会发现上面的定位方式无法解决一些元素定位。尤其对于这样一些元素:

1、没有id、name、class等属性;

2、标签的属性或文本信息特征没有或者不明显;

3、标签嵌套复杂,层次太多等。

这时候我们不得不借助Xpath和Css来实现元素定位了

二、Xpath定位
1.xpath简介

XPath是XML Path的简称,它是一种用来确定XML(可扩展标记语言)文档中某部分位置的语言。Xpath也是一种表达式语言,它基于XML的树状结构,可以用来在整个树中来寻找指定的节点,因此它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。由于HTML文档本身就是一个标准的XML页面,因此我们可以使用XPath的语法来定位页面元素。

2.通用定位:

由于绝对路径会极易受中间层级变动影响,一般使用相对路径定位

比如:

<id=“form1” class=“fm” action="/s" name=“f1”>

2.1、根据元素自身属性,使用单个属性定位(加上前面的标签名来定位)
Xpath = //*[@id=’kw1’]

//表示某个层级下,*表示某个标签名。@id=kw1 表示这个元素有个id等于kw1 。

当然,一般可以指定标签名:

Xpath = //input[@id=‘kw1’]

元素本身,可以利用的属性就不只局限为于id和name ,在<>开始标记内除标签外,其他都可以看做是属性,如:

Xpath = //input[@type=‘text’]

Xpath = //input[@autocomplete=‘off’]

需保证这些元素可以唯一的识别一个元素。

2.2、使用多个属性定位
虫师比喻的好:根据一个人的身份证和姓名来唯一确定一个人

Xpath = //input[@id=‘kw1’ and @name=‘wd’]

或者Xpath = //input[@id=‘kw1’][@name=‘wd’]

2.3、使用父子关系来定位
<id=“form1” class=“fm” action="/s" name=“f1”>

通过爸爸来定位:

xpath = //span[@class=’bg s_ipt_w’]/input

如果爸爸没有唯一的属性,可以找爷爷:

xpath = //form[@id=’form1’]/span/input

2.4、使用常用函数来辅助定位

1)字符串查找函数: contains()

语法:contains(string1,string2),表示如果 string1 包含 string2,则返回 true,否则返回 false。

b.获取元素的文本内容: text()

c.从起始位置匹配字符串:starts-with ()

2.5Xpath轴:
上面这些方法都不能定位时,这时候就得考虑依据元素的父辈、兄弟或者子辈节点来定位了,这就需要用到Xpath轴,利用轴可定位某个相对于当前节点的节点集。

语法:轴名称::标签名

例如使用浏览器默认定位得到的xpath是:

//*[@id=‘validate’]/dl/dd[6]/span[2]/p/span

现在使用Xpath的following轴就可以轻松定位到:

//*[@id=‘pricetip’]/following::span[1]

2.6Xpath绝对路径

xpath=(//input[@name=‘account’])[2]


选择分支:

对于存在多个元素时想唯一定位,可以使用[]中括号来选择分支,下标从1开始(切记不是像数组那样从0开始哦)。

三、css定位
Css的定位更灵活,因为他它用到的更多的匹配符和规格。

http://www.w3school.com.cn/cssref/css_selectors.asp

【举例】

2种定位方式

css=.footer-link .stop (class=footer-link元素内的所有class=stop的元素。如果stop只有1个的话,那么直接css=.stop也可以 )

xpath=//a[text()=“停止投放”]’ 文本等于“停止投放”的所有链接a元素

对于有子元素的,可以使用元素:nth-child(n)表示:

css=#ershou .category-group a:nth-child(2)


<form id="form1" class="fm" action="/s" name="f1"><span class="bg s_ipt_wr"><input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

3.1 id定位: css=#kw1

3.2 class定位:css=.s_ipt

3.3 单个属性定位:css=[name=wd] css=[type=text] css=[autocomplete=off]

3.4 多个属性定位:css=[#form1 input[name=text]]

3.5 父子定位:

css=span > input

css=form > span > input

3.6 根据标签名定位:

css=input

再次举例:

想要定位到某个元素的话,首先应该考虑这个元素有没有唯一属性,例如id。

如果没有唯一属性的话,再考虑从这个元素的父元素、祖宗元素、隔壁元素中找到唯一属性,然后再定位到这个元素(参考)。

//通过有唯一属性的父元素,向下定位到目标元素。注意"空格"和">"的区别

css =“li[data-sku=‘13435315793’] .p-img>a”

这样一来,不管这个数据的位置如何改变,只要改商品的标志,即13435315793不变,测试用例都不需要额外的维护了。

XPATH元素定位详解相关推荐

  1. Selenium3元素定位详解与封装

    为什么需要自动化测试 在学习自动化测试之前,首先需要思考清楚的是为什么需要学习自动化测试,以及今天业界谈的研发效能对测试而言意味着什么?其实这就需要在测试以及整体研发的角度来思考问题,在今天这样的市场 ...

  2. UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)

    Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...

  3. UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)...

    Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...

  4. css 高度塌陷_HTML+CSS入门 HTML高度塌陷以及定位详解

    本篇教程介绍了HTML+CSS入门 HTML高度塌陷以及定位详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 高度塌陷的含义: 父元素的高度,默认被子元素撑开,目前来讲 ...

  5. CSS之排列系列--块级元素、内联元素、内联块元素--区别/详解

    原文网址:CSS之排列系列--块级元素.内联元素.内联块元素--区别/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍CSS的块级元素(block).内联元素(inline)和内联块元素(inl ...

  6. css中的position定位详解

    css中的position定位详解 position属性指定了元素的定位类型. position属性的5个值:static,relative,fixed,absolute,sticky; 元素可以使用 ...

  7. 定位的坐标原点HTML,css固定定位_CSS绝对定位固定定位详解

    摘要 腾兴网为您分享:CSS绝对定位固定定位详解,智学网,鱼乐贝贝,优酷,瑞易生活等软件知识,以及安卓微信多开,特效视频,微贷网app,勿忘我3dm,有为学堂,火力牛,手机知网,移动小秘书,快学堂,p ...

  8. css规则中区块block,CSS 定位详解

    CSS 有两个最重要的基本属性,前端开发必须掌握:display 和 position position 属性的作用 position属性用来指定一个元素在网页上的位置,一共有5种定位方式,即posi ...

  9. C++ STL list添加(插入)元素方法详解

    C++ STL list添加(插入)元素方法详解 主要内容 主要内容 参考链接

最新文章

  1. react 下拉选项自动滚动到可视区域
  2. 从Config文件中读取节点的配置信息
  3. linux查看目录访问权限,Linux文件访问权限
  4. 前端学习(3188):ant-design的icon图标
  5. 第3章 控制程序流程(1)
  6. [渝粤教育] 西南科技大学 农业技术经济学 在线考试复习资料
  7. kdd数据集_learning from imbalanced data sets—第一章——KDD与数据科学概述
  8. C 语言绘制指针式时钟
  9. atom平台 android ia,ZTE Grand X IN:搭载Atom平台的Android机
  10. iPhone iPad分辨率
  11. sq工程师是做什么的_供应商质量工程师(SQE)是一个什么样的职位?
  12. 云南通报5起森林火灾,如何去扑救?如何自救?
  13. unity获取电磁笔压感_电磁笔的分类和特性
  14. java编译器eclipse_Java 调用 Eclipse的编译器 JDT
  15. 计算机视觉学习6_棋盘格_相机模型与参数标定
  16. 快来智影:微电影的拍摄技巧
  17. 拯救者R9000p搜不到wifi 解决方法
  18. JAVA 通过HmacSHA1+密钥加密
  19. 调用百度的人脸识别SDK实现人脸检测
  20. 波音、优步、软银、日产汽车、泰康保险、美团、伯克希尔、日本邮政等公司高管变动情况...

热门文章

  1. 戴尔电脑cpu温度过高怎么办
  2. source insight替代品
  3. 老男孩mysql笔记_老男孩MySQL笔记 第二天2-2
  4. 【经验】tf1.x迁移到tf2.x教程
  5. Gatsby静态网站导航高亮
  6. 区块链公证书的诞生与应用
  7. 美国排名前10芯片公司的特点!
  8. 能玩游戏的计算机名字,空格符号怎么打 游戏名字空格怎么打
  9. UG/NX二开Siemens官方实例解析 4.1 EX_Curve_CreateArc(创建曲线)
  10. 移动处理器,移动显卡排名(笔记本显卡排名)