web页面元素定位
所有web网页中有8种元素定位方式
靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))
组合各种特征和关系来找元素:2种(xpath,css)
以下4种方法对所有元素可用
1.id:唯一,id不变时首选它。
# 一个元素有很多属性时,元素定位优先级首先是id,但id有时是变的,如果id是不变的,可用它来定位。
# 如果id是变化/动态的,那么要舍弃id定位方式,换别的。
# 以百度首页为例:
# 这里定位策略是id,定位表达式是id="kw"。
ele = driver.find_element_by_id("kw")
# 元素有属性+操作-----返回的是webElement对象(所以selenume中对元素是做了一层封装的)
# driver所有的查找方法都是find_element开头,所有的查找结果都是webElement。
# id在web网页中只会找到一个元素,所以只有一个对象可以返回.
# 如果找到的是多个,须纠正开发.
print(ele)
2.标签名称 tag_name:可以找到一个或多个,不唯一,所以查找方法都一样。
ele = driver.find_element_by_tag_name("input") # 在DOM/html中匹配到的第一个元素
print(ele) eles = driver.find_elements_by_tag_name("input") # 多个,返回的是列表,元素为webElement对象,页面中全部匹配的元素.
# 按整个html页面从上到下一层层找
print(eles)
3.class_name(不唯一):同上。
ele1 = driver.find_element_by_class_name("")
print(ele1) ele2 = driver.find_elements_by_class_name("")
print(ele2)
4.name(不唯一):同上。
# 虽name很多时候重名,但尽可能不重名,每个人都有自己的一个名字,名义上不绝对唯一,但很多时候唯一性很高
ele3 = driver.find_element_by_name
print(ele1) ele4 = driver.find_elements_by_name
print(ele1)
a元素:两种方法
5.完整匹配文本值
driver.find_element_by_link_text("更多产品")
# a链接的文本必须是"更多产品"4个字
# 全量匹配,完全匹配
# 不是绝对唯一:一个页面中允许多个链接文本值是一样的
# 当前页面中,任何一个元素只要它的文本值是‘更多产品’,那就完全匹配.
6.部分匹配/包含
driver.find_elements_by_partial_link_text("产品")
# 只要a元素的文本内容中有"产品"两字,就符合要求.
以上6种方法在使用时,可能有时候会找不到元素,或者找到了后面又变了。所以用xpath或css组合定位。
7.xpath定位
# 绝对定位:路径绝对(兼容差,过度依赖位置和继承关系) 从祖先开始到本身 以/开头 /父/子
# 相对定位:
# 在整个html页面,逐个条件,找到唯一的元素。
# 摆脱位置和继承关系,web自动化首选。
# 按ctrl+f打开下面的输入框使用相对路径进行查找
# 多个属性:通过逻辑运算and/or
1>.以//开头,//标签名[@属性名=值] 如果标签名是*,匹配所有标签。
//input[@id="kw"] # 找属性id,值为kw的元素
2>.多个属性:通过逻辑运算and/or
//*[@id="kw" and @name="wd" and @class="s_ipt"] # 同时满足
//*[@id="kw" or @name="wd" or @class="s_ipt"] # 满足其中一个
3>.通过元素的文本内容来定位---文本内容固定才可用----函数 //标签名[text()=对应的文本值]
//p[text()="平均出勤率"]
4>.包含:属性/文本内容包含一部分即可-----//标签名[contains(@属性/text(),被包含的内容)]
# 属性包含方式:
//span[contains(@class,"quickdelete-wrap")]
# 文本包含方式:
//h1[contains(text(),"第2期")]
# 包含与逻辑and/or相结合
//h1[contains(text(),"第2期") and @id="ccc"]
5>.层级定位:
# 通过父辈/祖先辈
# 以百度首页为例:
# 定位登录元素
# 它是一个a链接,有链接地址,有name/class/onclick属性,文本内容。
# 首选name属性定位
//a[@name="tj_login"]
# 会出现两个元素,不知道是哪个,可以将鼠标分别放在两个黄色部分,会显示定位路径/元素特征的就是要找的元素。
两个元素一模一样,靠它自己本身根本找不到。
用find elements找到所有匹配的元素,然后通过下标取值。
两个一模一样分不清,可能爹/祖先不一样。
通过父辈/祖先辈,先找到不一样的先辈,在先辈下面再找。------层级定位
# 通过父辈找元素:
# /只能跟直系后代(会限制前后关系:父/子)
# //只要是后代就行
//div[@id="u1"]/a[@name="tj_login"]
6>.轴定位:多用于表格
已知元素/轴名称::标签名称[@属性=值]
轴运算:
ancestor:祖先结点,包括父。
parent:父结点
preceding:当前元素节点标签之前的所有结点。(html页面先后顺序)
preceding-sibling:当前元素节点标签之前的所有兄弟结点。
following:当前元素节点标签之后的所有结点。(html页面先后顺序)
following-sibling:当前元素节点标签之后的所有兄弟结点。
8.css定位
web页面元素定位的更多相关文章
- Python3.x:Selenium中的webdriver进行页面元素定位
Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- Robot Framework 教程 (2) - 页面元素定位
上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Li ...
- 页面元素定位 XPath 简介
页面元素定位 XPath 简介 本文所说的 Xpath 是用于 Selenium 自动化测试所使用到的,是针对XHTML网页而言的一种页面元素的定位表示法. XPath 背景 XPath即为XML路径 ...
- java selenium webdriver第二讲 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- 5、通过Appium Desktop实现页面元素定位
之前我们已经安装了Appium Desktop,下面就让我们使用Appium Desktop实现页面元素定位 1.首先我们打开Appium Desktop,进入如下界面,点击Start Server ...
- 用XPath定位Web页面元素时,如何快速验证XPath语句是否正确?
在使用Selenium做Web UI自动化测试的过程中,XPath是一种定位页面元素的常用方式.然而,面对某些元素的XPath路径过于复杂,我们想快速验证拼凑的Xpath语句是否正确时,该怎么办呢?这 ...
- Selenium with Python 003 - 页面元素定位
WebUI自动化,首先需要定位页面中待操作的元素,然后进行各种事件操作,这里我们首先介绍Selenium Python 如何定位页面元素,WebDriver 提供了一系列的方法. 定位单个页面元素(返 ...
- 使用webview查找元素,appium查找web页面元素
9 webview查找元素 9.1 webview 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面.它使用的内核是webkit引擎,4.4版本之后,直接使用 ...
随机推荐
- 用 ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量(附带线程池参数详解和使用注意事项)
1.概述 在Java中,我们一般通过集成Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动.但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的 ...
- 开发框架Express
一.使用原因 由于nodejs原生的http核心模块在某些方面不足以应对开发需求,所以就需要使用框架来加快开发效率,让代码更高度统一.在nodejs中有许多web开发框架,以下介绍Express的使用 ...
- 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信
https://www.cnblogs.com/yangfengwu/p/11192594.html 自行调整页面 连接上以后主动发个数据 namespace TCPClient { public p ...
- SQL必知必会收集学习
1.按查询列位置排序:如按第一列 降序排序 desc
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- webapp接口安全设计思路
在做webqq或者说app开发的时候,免不了会有接口是有权限的(如查询用户敏感信息等),这时接口安全设计思路就非常重要了. 简单一点,在APP中保存登录数据,每次调用接口时传输 程序员总能给自己找到偷 ...
- 鱼塘钓鱼(fishing)(信息学奥赛一本通 1373)
[问题描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼,……,第5分钟以后再 ...
- mapreduce数据处理——统计排序
接上篇https://www.cnblogs.com/sengzhao666/p/11850849.html 2.数据处理: ·统计最受欢迎的视频/文章的Top10访问次数 (id) ·按照地市统计最 ...
- ggplot常见语法汇总查询
主图 散点图 柱状图 折线图 小提琴图 点图 进化树 圈图 Alluvial图 Sankey Diagram plot(getSankey(colData(muraro)$cell_type1, mu ...
- Spring的异步方法
先把longTimeMethod 封装到Spring的异步方法中,这个异步方法的返回值是Future的实例.这个方法一定要写在Spring管理的类中,注意注解@Async. @Service publ ...