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">

<span class="bg s_ipt_wr">

<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

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">

<span class="bg s_ipt_wr">

<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

通过爸爸来定位:

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

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

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

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

<a class="menu_hot" herf="/ads/auth/promote.html">应用推广</a>


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不变,测试用例都不需要额外的维护了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容