Web自动化之元素定位

慕课网学习笔记:web端功能自动化定位元素


用CSS选择器定位元素

基本语法:

tag[attribute='value']

同时使用两个属性定位元素:

tag[attribute1='value1'][attribute2='value2']

例:button[type='submit'][class='res-send']

ID选择器

ID选择器有三种常用表示方式,在这里引用某网站页面的部分HTML代码来举例表示。

<div class="popup-bank" id="popup-bank-newuser" style="display: none">
    <a class="popup-close BankStorageClose" href="javascript:void(0)"></a>
    <img src="https://imgcdn1.migang.com/v2/images/common/account_bank.png?v=1513325912">
    <div class="popup-bank-box">
        <p class="popup-user-text">开通银行存管后,您在银行开设电子账户,您的全部资金将存放到银行电子账户中,资金安全得到全面保障。</p>
        <p class="popup-user-text">根据银行规定,用户必须在平台进行实名开户后,才能进行资金操作。您的实名开户信息均由银行验证,请放心操作。</p>
        <div class="mg-submit-btn"><a class="btn" href="https://p2p.migang.com/reg/complete_reg/from/news">开设银行存管账户</a><!-- <a class="skip-btn BankStorageClose"  href="javascript:void(0)">暂不开设</a> --></div>
    </div>
</div>

举例:定位 id 为 popup-bank-newuser 的 div

  • div[id='popup-bank-newuser']
  • #popup-bank-newuser
  • body #popup-bank-newuser

ID可以用 # 加上ID值的方式表示。如果ID不唯一,且同一ID所在标签不同,可以在 # 前加上目标元素的标签和一个空格。

Class选择器

Class选择器也有三种常用表示方式。举例如下:

  • div[class='popup-bank alert-adowntime']
  • .popup-bank
  • div.alert-adowntime

用第一种class='value'的方式时,单引号内的值必须和目标元素的class完全一致。用后面两种带"."的方式时,可以只包含class中的某一个值(多个值情况下),但这时可能存在不唯一的情况,因为查找到的是class中包含查找值的所有元素,且定位到第一个元素。这时可以利用追加类的方式,语法如下:

扫描二维码关注公众号,回复: 10391001 查看本文章

.class1.class2.class3,例如:.popup-bank.alert-adowntime

也可以和id选择器结合,例如:div.popup-bank#popup-bank-newuser,直到找到唯一的元素。

通配符

语法:

  • tag[attribute^='value']:指定属性值以value开头的元素
  • tag[attribute$='value']:指定属性值以value结束的元素
  • tag[attribute*='value']:指定属性值中包含value的元素

查找子节点

用 > 连接父节点和子节点,节点可以用标签表示,也可以用id和class表示。例如:

div> .topbar>div>a

#topd > div.inside > a.weixin.tel

contains

tag:contains('Text')

例:button:contains('启用')


用XPath定位元素

当出现下述情况时,可以考虑用xpath来定位元素。

  • 如果元素的ID不唯一,或者ID是动态的
  • 如果name以及linktext属性值也不唯一

基本语法:

//tag[@attribute='value']

绝对路径和相对路径

  • 绝对路径:用单斜线“/”表示,例如:html/body/div[1]/div/div[2]/ul/li[2]/a/span[2]
  • 相对路径:用双斜线“//”表示,例如://li[@id='shop-cart']/a/span[2]

"/"和"//"的区别:

  • "/":元素是上一级节点的子节点中的一个,不能跳级;
  • "//":下级是任何子节点或者任何嵌套子节点中的一个,可以跳级;
  • 路径里面不要用"*",要写明标签名。

用Text构建XPath

语法:

//tag[text()='value']

"="是完全匹配,即text的内容要和value完全一致。

Contains关键词

语法:

//tag[contains(attribute,'value')]

查找指定属性值中包含value的元素,不需要完全匹配。例如:

//a[contains(text(),'忘记密码')]

//input[contains(@class,'ipt') and contains(@placeholder,'手机号')]

starts-with关键词

语法:

//tag[starts-with(attribute,'value')]

例如:

//div[starts-with(@class,'popbox')]

//div[starts-with(@class,'popbox') and contains(@id,'nav')]

查找父节点和平级节点

父节点

语法:xpath-to-some-element//parent::<tag>

前面的平级节点

语法:xpath-to-some-element//preceding-sibling::<tag>

后面的平级节点

语法:xpath-to-some-element//following-sibling::<tag>

举例:

<tbody>
	<tr height="35">
		<th style="text-align:center">银行</th>
		<th style="text-align:center">限额</th>
	</tr>
    <tr height="35" style="background-color:#fff">
        <td>中国银行</td>
        <td>单笔限额49999元,单日限额20万</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>中国工商银行</td>
        <td>单笔限额5万,单日限额5万</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>中国建设银行</td>
        <td>单笔限额10万,单日限额50万</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>中国交通银行</td>
        <td>单笔单日限额9999元</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>中国农业银行</td>
        <td>单笔限额9,999元,单日限额9,999元</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>招商银行</td>
        <td>单笔限额1万,单日限额2万</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>浦发银行</td>
        <td>单笔限额10万,单日限额40万</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>光大银行</td>
        <td>单笔单日限额99,999.99元</td>
    </tr>
    <tr height="35" style="background-color:#fff">
        <td>平安银行</td>
        <td>单笔限额5万,单日限额5万</td>
    </tr>
</tbody>

“中国农业银行”所在元素为:

//div[@id="zc_k"]//tbody/tr[6]/td[1]

“中国建设银行”所在元素为:

//div[@id="zc_k"]//tbody/tr[6]/td[1]//parent::tr//preceding-sibling::tr[2]/td

“光大银行”所在元素为:

//div[@id="zc_k"]//tbody/tr[6]/td[1]//parent::tr//following-sibling::tr[3]/td

参考资料:

CSS 选择器:http://www.w3school.com.cn/cssref/css_selectors.asp

XPath语法:http://www.w3school.com.cn/xpath/xpath_syntax.asp

发布了37 篇原创文章 · 获赞 47 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u013378642/article/details/81319736