设为首页收藏本站
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

灵活使用xpath定位信息

2016-4-7 10:00| 发布者: webdriver| 查看: 2269| 评论: 0

摘要: selenium webdriver 自动化,元素定位方式,包含id,name,class,linktext,xpath,css等,定位元素的时候灵活使用,一般可以统一用xpath 代替id,name,class,linktext的定位方式,下面给大家介绍下如何灵活使用xpath .. ...

元素定位方式,包含id,name,class,linktext,xpath,css等,定位元素的时候灵活使用,一般可以统一用xpath 代替id,name,class,linktext的定位方式,下面给大家介绍下如何灵活使用xpath

Xpath 详解:

注:可通过火狐浏览器安装,firebug,firepath插件校验xpath的正确性

先举个xpah例子://div[@id=abc]/form/div/input/span

//:从匹配选择的当前节点,选择文档中的节点,不考虑它的具体位置,例如://div[@name=‘abc’]

查找页面中name属性为abc的div标签

/:从根节点选取元素,例如:/html/body/div[@id='myModalex']

可以是文档最根节点开始查找元素,也可以是配陪得节点为根节点往下找

例如://*[@id='loginForm']/div[1]/label

@:@表示属性 属性可以用and,or运算符

例如://label[@class='col-sm-2 control-label' and @for='userName'] 在定位中,如果一个属性还不能精确定位某个元素那么则可以再组合增加一个元素,使定位达到唯一性

Text():通过元素的文本值查找元素,例://h2[text()='Webdriver中文社区']

Contains();//input[contains(@id,'Webdriver中文社区')] 模糊匹配,查找id包含Webdriver中文社区的input标签

//h2[contains(text(),'Webdriver中文社区')] 查找文本值包含Webdriver中文社区的元素

//灵活使用案例:

查找元素<span class=”cde”>八佰伴</span>

<span class=cde>嘎嘎嘎</span>

<div id=abc>

<form>

<div>

<input>

<span class=cde>八佰伴</span>

</input>

</div>

</form>

<div>

分析:该元素,没有唯一性的id,name等标签,并且层级多,上一级也没有唯一性的东西,只能从上上上级开始查找元素。但是从上上级查找元素,xpath的层级多,定位信息复杂,那么有没有办法优化精简呢?答案是肯定的,利用//可以大幅优化精简xpath表达式

方案一://div[@id=abc]/form/div/input/span

方案二://*[@id=abc]/form/div/input/span[@class=cde]

方案三://span[@class=cde][2]

方案四://div[@id=abc]//span[@class=cde]--此方法最简洁,结构也最清晰,也最稳定

综上xpath定位原则,元素id,name属性优先使用,其次是class等其他,1、在当前节点没有id,name等属性确定元素唯一性的时候,往上找,通过当前节点父亲,祖父,祖父的父亲,祖父的祖父等节点查找当前元素。2、一个元素属性不足够定位当前元素的时候,可以通过and运算符,组合属性来定位使之达到唯一性,尽可能的缩短xpath层级,使xpath定位更稳定。

Firebug使用:

例:

定位用户名输入框可以用//*[@id=’userName’]表示查找当前页面下,id属性为’userName’的所有元素,相当于id定位方式。*代表所有元素。

鲜花
鲜花
握手
握手
雷人
雷人
路过
路过
鸡蛋
鸡蛋
收藏 分享 邀请

最新评论