ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

web自动化- 元素定位

2022-07-13 18:34:05  阅读:132  来源: 互联网

标签:web name 定位 标签 元素 自动化 id 属性


四、元素定位
4.1 为什么要使用元素定位?
要使用web自动化操作元素,必须首先找到此元素。
4.2 定位工具
火狐:Firebug (F12获取直接点击 Friebug图标)
谷歌:F12键(开发者工具)
4.3 定位元素时依赖于什么?
1. 标签名
2. 属性
3. 层级
4. 路径

4.4 定位方式
1. id
2. name
3. class_name(使用元素的class属性定位)
4. tag_name(标签名称 <标签名 .../>)
5. link_text(定位超连接 a标签)
6. partial_link_text(定位超链接 a标签 模糊)
7. xpath(基于元素路径)
8. css(元素选择器)

汇总:
1. 基于元素属性特有定位方式(id\name\class_name)
2. 基于元素标签名称定位:tag_name
3. 定位超链接文本(link_text、partial_link_text)
4. 基于元素路径定位(xpath)
5. 基于选择器(css)

id 定位:
说明:
1. 通过元素的id属性定位,id一般情况下在当前页面中是唯一。
方法:
element = driver.find_element_by_id(id)
提示:
元素必须要有id属性。


案例:

 

 关于路径: 

 

 


name 定位:
说明:
1. 通过元素的name属性来定位, name一般名称为重复。

方法:
drivr.find_element_by_name(name)
提示:
元素必须要有name属性

 

 

class_name定位:
说明:
1. 通过元素的class属性来定位,class属性一般为多个值。
方法:
driver.find_element_by_class_name()

提示:
元素必须要有class属性

提示:
id: 一般为唯一标识符。
name:可以重名
class:多个命名。

 

 

 

 

一、元素定位方法
1.1 tag_name (了解)
说明:是通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名)
(标签名也就是元素名)
方法:driver.find_element_by_tag_name("标签名")
注意:
1. 如果页面中存在多个相同标签,默认返回第一个标签元素。

 

 

1.2 link_text
说明:定位超链接标签
方法:driver.find_element_by_link_text()
注意:
1. link_text:只能使用精准匹配(a标签的全部文本内容)
1.3 partial_link_text【推荐】
说明:定位超链接标签
方法:driver.find_element_by_partial_link_text()
注意:
1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词
2. 如果有多个值,默认返回第一个值

 

 

 

 

 



二、Xpath 和 Css 定位
2.1 为什么使用Xpath和css定位?
1. id,name,class:依赖于元素这三个对应的属性,如果元素没有以上三个属性,定位方法不能使用。
2. link_text,partial_link_text:只适合超链接
3. tag_name:只能找页面唯一元素,或者 页面中多个相同元素中的第一个元素

2.2 什么是Xpath定位?
说明:基于元素的路径

 

 

2.3 xpath介绍
1. xpath是XML Path简称;
(xml是一种标记语言,类似于html,重点:数据存储于传递(配置文件) 后缀.XML)

xml格式如下:

 

 



2.4 Xpath常用的定位策略:
1. 路径
1). 绝对路径:
语法:以单斜杠开头逐级开始编写,不能跳级。如:/html/body/div/p[1]/input

 

 


2). 相对路径
语法:以双斜杠开头,双斜杠后边跟元素名称,不知元素名称可以使用*代替。
如: //input
//*
2. 路径结合属性
语法:在Xpath中,所有的属性必须使用@符号修饰 如://*[@id='id值']

下面这个例子是 绝对路径+属性

 

 

3. 路径结合逻辑(多个属性)
语法://*[@id="id值" and @属性='属性值']

 

 

 

 

 

 

 两种不同的写法都可以


4. 路径结合层级
语法://*[@id='父级id属性值']/input

提示:
1. 一般见识使用指定标签名称,不使用*代替,效率比较慢。
2. 无论是绝对路径和相对路径,/后面必须为元素的名称或者*
3. 扩展:在工作中,如果能使用相对路径绝对不使用绝对路径。

 

一般建议这样写

 

 

 

2.5 Xpath扩展
1. //*[text()='XXX'] # 定位文本值等于XXX的元素
提示:一般适合 p标签,a标签
2. //*[contains(@属性,'xxx')] # 定位属性包含xxx的元素 【重点】
提示:contains为关键字,不可更改。
3. //*[starts-with(@属性,'xxx')] # 定位属性以xxx开头的元素
提示:starts-with为关键字不可更改

三、CSS定位
说明:
1. CSS一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器;
2. css定位就是通过css选择器工具进行定位。
3. 极力推荐使用,查找元素的效率比xpath高,语法比xpath更简单。
方法:
driver.find_element_by_css_selector()
常用测试略:
1. id 选择器
前提:元素是必须有id属性
语法:#id 如:#passwordA
2. class 选择器
前提:元素是必须有class属性
语法:.class 如:.telA
3. 元素选择器
语法:element 如:input
4. 属性选择器
语法:[属性名=属性值]
5. 层级选择器
语法:
1. p>input
2. p input
提示:>与空格的区别,大于号必须为子元素,空格则不用。

扩展:
1. [属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
2. [属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
3. [属性*='包含的字母'] # 获取指定属性包含指定字母的元素

复制xpath:/html/body/form/div/fieldset/p[1]/input
复制最简://*[@id="userA"]
复制CSS路径:html body form div#zc fieldset p#p1 input#userA

提示:
1. 虽然借助工具可以快速生成xpath路径和css语法,但是前期不建议使用。
2. 工具在智能,没有人智能。

五、定位一组元素
方法:driver.find_elements_by_xxx()
返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历,[下标从0开始]


六、扩展8种元素定位的底层实现
方式:driver.find_element(By.xxx, 'value')
参数说明:
By.xxx :为By类的类型 如:By.ID
value: 元素的定位值 如: "userA"

By类:需要导包 位置: from selenium.webdriver.common.by import By

标签:web,name,定位,标签,元素,自动化,id,属性
来源: https://www.cnblogs.com/yumi2021/p/16475001.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有