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版本之后,直接使用 ...
随机推荐
- BZOJ 3553: [Shoi2014]三叉神经树 LCT
犯傻了,想到了如果是 0->1 的话就找最深的非 1 编号,是 1 -> 0 的话就找最深的非 0 编号. 但是没有想到这个东西可以直接维护. 假设不考虑叶子节点,那么如果当前点的值是 1 ...
- WinDbg常用命令系列---清屏
.cls (Clear Screen) .cls命令清除调试器命令窗口显示. .cls 环境: 模式 用户模式下,内核模式 目标 实时. 崩溃转储 平台 全部 清屏前 清屏后
- ShardingSphere初探1 -- 概览
知道这个框架是通过一期QQ课堂 https://shardingsphere.apache.org 官网 https://github.com/apache/incubator-shardingsph ...
- vue-router 的两种模式的区别
Vue Router 是Vue官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.vue-router 默认 hash 模式,还有一种是history模式. hash模 ...
- Theano入门笔记2:scan函数等
1.Theano中的scan函数 目前先弱弱的认为:相当于symbolic的for循环吧,或者说计算图上的for循环,也可以用来替代repeat-until. 与scan相比,scan_checkpo ...
- ranger整合kerberos
一.生成主体 在kerberos服务器生成用于ranger的用户主体: # kadmin.local addprinc -randkey HTTP/manager1@HADOOP.COM addpri ...
- fillter根据value来匹配字段
字段对应 let cashBackState = { 'WAIT_FIVE': '满5单可返现', 'FINISHED': '已返现' } filters: { cashBackStateFilter ...
- OpenFOAM计算结果转换到CFD-Post当中处理
我们编写如下的Python代码 源代码:
- 为什么Map桶中个数超过8才转为红黑树
这是笔者一个好友面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作.笔者第一反应 ...
- linux学习(5):linux 性能瓶颈排查
作为开发人员,肯定遇到过以下场景,应用突然卡住了,或者异常退出,cpu占用过高等各种异常情况,一般遇到这些异常情况,该如何去查找具体原因呢? linux和jdk提供了一些命令和工具来查看内存.cpu. ...