定位页面元素--方法详解

目录

一、id定位

二、name定位

三、Xpath定位

3.1 通过绝对路径定位

3.2 利用元素属性定位

3.3 层级和属性结合

3.4 使用逻辑运算符

3.5 使用contains 方法

3.6 使用starts_with和ends_with方法

3.7 使用text()方法

获取定位元素的属性和内容方式:

 


做UI自动化时不可缺少的技能之一就是定位页面的元素,从而获取自己想要的数据。常用定位方式:

一、id定位

id 在HTML文档中必须是唯一的,Webdriver提供的id定位方法是通过元素的id来查找元素的。通过id定位百度输入框用法:

find_element_by_id("kw")

 

二、name定位

HTML文档中,name是用来指定元素名称,通过name来定位百度输入框的用法:

find_element_by_name("wd")

但是在比较复杂的HTML文档中,name可能不是唯一的,因此该定位方式就会显得不太适用

三、Xpath定位

在XML文档中,xpath是一种定位元素的语言。因为HTML可看做XML的一种,所以可以通过xpath进行定位,该定位方式也是我最喜欢的定位方式

3.1 通过绝对路径定位

绝对路径定位方式是从HTML文件的根节点开始一个一个节点的往下找,表达式一般很长

3.2 利用元素属性定位

除使用绝对路径外,可通过元素属性值来定位

find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//input[@name='wd']")

上边两个表达式定位是同一个元素,//input表示当前页面的input标签,[@id='kw']表示这个元素的id值是kw

如果不想指定标签名,可以使用*代替

3.3 层级和属性结合

如果一个元素本身没有可以唯一标识这个元素的属性值,那么可以查找其上一级的元素,如果上一级的元素有唯一标识的值就可以拿来用,参考百度网页,定位百度一下输入框

find_element_by_xpath('//span[@class="bg_s_ipt_wr"]/input')

3.4 使用逻辑运算符

如果一个属性不能唯一区分一个元素,那么我们就可以使用逻辑运算符连接多个属性来查找元素

find_element_by_xapth("//input[@id='kw' and @class='s_ipt']")

and标识必须满足两个条件来定位元素

3.5 使用contains 方法

contains方法用于匹配一个属性中包含的字符串。例如,span标签的class属性为"bgs_ipt_wr"

find_element_by_xpath("//span[contains(@class, 's_ipt_wr)]")
find_element_by_xpath("//input[contains(text(), '百度一下')]") ##通过标签文本包含内容定位

3.6 使用starts_with和ends_with方法

driver.find_element_by_xpath("//a[starts-with(@rel, ‘nofo’)]") 
## 定位所有的属性rel以nofo开始的a标签
driver.find_element_by_xpath("//a[ends_with(@rel,'fo')]")
## 定位所有属性rel以fo结尾的a标签

 

3.7 使用text()方法

text()方法用于匹配显示文本信息

driver.find_element_by_xpath("//input[text()='百度一下']")

text()方法是精确匹配,contains是模糊匹配

3.8 利用父节点定位子节点

<html>
<body>
<div id="A">
    <!--父节点定位子节点-->
    <div id="B">
        <div>parent to child</div>
    </div>
</div>
</body>
</html>

根据节点B定位无id的子节点

driver.find_element_by_xpath("//div[@id='B']/child::div").text

3.9 利用父节点定位子节点

<html>
<body>
<div id="A">
    <!--子节点定位父节点-->
    <div>
        <div>child to parent
            <div>
                <div id="C"></div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

根据C节点定位其两层父节点的div

driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text

4.0 利用弟弟节点定位哥哥节点

<html>
<body>
<div>
    <!--下面两个节点用于兄弟节点定位-->
    <div>brother 1</div>
    <div id="D"></div>
    <div>brother 2</div>
</div>
</body>
</html>

根据D节点定位其哥哥节点

driver.find_element_by_xpath("//div[@id='D']/preceding-sibling::div[1]").text

4.1 利用哥哥节点定位弟弟节点

HTML与4.0一样,通过D节点定位其弟弟节点

driver.find_element_by_xpath("//div[@id='D']/following-sibling::div[1]").text

driver.find_element_by_xpath("//div[@id='D']/following::*").text

 

获取定位元素的属性和内容方式:

1、取文本

driver.find_element_by_xpath('//div[@id="u1"]/a[5]/text()')

2、取元素属性值

driver.find_element_by_xpath('//div[@id="u1"]/a[5]/@href')

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值