Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)
概述
前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用。
元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面上的常用控件(可批量或单个抓取),获得控件所在的frame和三个唯一定位控件的xpath,并生成基于LazyUI框架的Java代码,解决繁杂的元素的获取问题。
下载:
工具由来:
熟悉控件获取的同学都知道,selenium webdriver定位元素大概有八种方式详见:
http://blog.csdn.net/kaka1121/article/details/51850881
文中前七种方式,都可以归结到第七种,即使用Xpath的方式,和元素定位相关的Xpath语法详见:
http://blog.csdn.net/kaka1121/article/details/51811296
元素获取作为Web端自动化工作中最重要的事情之一,大概占去了3分之一的工作,而元素定位均可归结于Xpath的获取。
因此,如何获取能唯一定位元素,且稳定的Xpath,便成为了web自动化的重中之重。
Xpath的获取,在仔细的总结和推敲之下,完全可以用工具来代替,再配合较好的前端可测性(唯一ID等),便可极大简化web自动化工作。
工具设计思路:
1. 工具需要抓取的控件类型:
常用的控件大概有几种:
①输入框(包含输入区域)
②按钮
③下拉菜单
④单选框
⑤复选框
⑥链接(文字和图片)
⑦标准表格
⑧标准日历
⑨文本区域
⑩标准文件上传
可以进一步抽象为以下八种控件,并提供其对应的常用方法:
1. 输入控件①,提供方法:
点击、清空、输入、获取文本
2. 点击控件②⑥,提供方法:
点击
3. 下拉控件③,提供方法:
根据展示的文字(VisibleText)选中、根据展示的文字反选、根据序号选中、根据序号反选、根据值(value)选中、根据值(value)反选、获取所有可选项、获取所有已选项、清除为初始状态
4. 点选控件④⑤,提供方法:
勾选、取消勾选、查看是否勾选
5. 表格控件⑦,提供方法:
获取所有单元格的文本值、获得某行某列单元格的文本值、获得table的大小&行数&列数
6. 日历控件⑧,提供方法:
清除日期、输入日期、获取当前输入日期文本
7. 文本控件⑨,提供方法:
获取文本、点击
8. 上传控件⑩,提供方法:
上传文件
2. 单个控件获取
需求:
右键到某个控件上,就能获取到至多三个可以唯一定位该元素的相对Xpath,并将其标记为以上8种抽象控件之一。
可抓取控件节点名:
input(type=="text"、"submit"、"button"、"reset"、"image"、"checkbox"、"radio"、"file")
textarea、select、table、a、button、span、img、i、font、div
和上面抽象出来的8种控件对应起来,如下图:
抓取优先级&策略
如上图所示:
1.如果存在id,且唯一,则直接用id,其Xpath为:
//input[@id=’main’]
2.其次,如果存在name,且唯一,则直接用name,其Xpath为:
//a[@name=’name’]
3.再次,如果存在text,且唯一,则直接用text,其Xpath为:
//span[contains(text(),’aaa’]
4.如果还不能唯一定位,且存在name、text,二者组合能唯一定位,则其Xpath类似:
//Select[@name=’name’ and contains(text(),’aaa’]
5. 如果还不能唯一定位,则依次尝试"value","title","class","style",如果能通过其一唯一定位,则其Xpath类似:
//XXX[@class(或者是value、title、style)=’class’]
6.如果还不能唯一定位,则递归寻找其父节点(依次单看id、name、text、title),直到找到唯一。 。
再从其父节点开始,取绝对路径(元素索引),加起来唯一定位,其Xpath类似:
//input[@id=’main’]/div[1]/span[2]
当然,这种情况开始,就应该跟开发提可测性,增加唯一的id、name之类了。
7.如果还不能唯一定位,则寻找其所有子节点(依次单看id、name、text、title),直到找到唯一。
再使用其子节点Xpath来唯一定位,其Xpath类似:
//input[@id=’main’]/parent::XXX
8.如果还不能唯一定位,则寻找其所有兄弟节点(依次单看id、name、text、title),和自己在兄弟节点中的index,直到找到唯一。
//input[@id=’main’]/parent::XXX/XX[3]
9.以上全不满足,则给出其绝对路径(元素索引),来唯一定位,其Xpath类似:
/XXX[1]/XX[2]/X[5]/XXXXX[2]
3.示例:
右键—>点击
抓取结果:
如上图所示,以百度首页--“百度一下”按钮为抓取对象,抓取出的三个能唯一定位的Xpath如图中③所示。
另外,插件还对控件所在frame(①)进行抓取,此处无frame信息。
如上图中②所示,控件被识别为click类,提供”点击”方法。
如上图中④所示,控件被命名为“su”,调用时使用该名字,并附上备注“su”(⑤)作为控件的说明。
点击“生成代码”
生成基于框架的代码入下:
@Xpath(xpath={"//input[@id='su']", "//input[contains(@value,'百度一下')]", "//input[contains(@class,'bg s_btn btnhover')]"})
@Frame(frame="")
@Description(description="su")
public Click su;
结合,框架,便能对控件进行点击操作。
单个抓取就说到这,了解批量抓取请点击:
Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)
Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)的更多相关文章
- Web自动化框架LazyUI使用手册(5)--模板工程:LazyUI-template详解
概述: LazyUI-template: 提供Maven管理的,基于Spring+Testng的,包含常用浏览器driver的,方便连接各种数据库的java模板工程,并提供以百度搜索为例的第一个测试用 ...
- Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)
作者:cryanimal QQ:164166060 上篇文章中,简要介绍了LazyUI框架,本文便来演示,如何从无到有快速搭建基于lazyUI的工程,并成功运行第一个测试用例. 本文以百度搜索为例,选 ...
- Web自动化框架LazyUI使用手册(1)--框架简介
作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...
- Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)
概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...
- Web自动化框架LazyUI使用手册(7)--浏览器常用操作API
LazyUI框架中,BrowserEmulator类提供了大量的浏览器操作,常用的API列举如下: 1. 基本操作 /** * Open the URL * 打开一个URL * @param ur ...
- Web自动化框架LazyUI使用手册(8)--excel数据驱动详解(ExcelDataProvider)
概述 框架提供了excel数据驱动方式运行测试用例的工具,本文将针对数据驱动,进行详细演示. 详见类:lazy.test.ui.browser.ExcelDataProvider 被测对象: http ...
- Web自动化框架LazyUI使用手册(6)--8种控件对应的class,及可对其进行的操作
概述: 本文详述8种控件对应的class,及可对其进行的操作 回顾: 回顾一下,下文中的工具设计思路部分: http://blog.csdn.net/kaka1121/article/details/ ...
- APP自动化框架LazyAndroid使用手册(2)--元素自动抓取
作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...
- web自动化框架如何设计
web自动化框架如何设计po模式总结: 1. 页面对象模型:当页面特别多的时候,代码更好的维护 2. Po是pageObject设计模式,用来管理和维护一组web元素的对象库 3. 每一个page c ...
随机推荐
- 基于线程池的多线程售票demo2.0(原创)
继上回基于线程池的多线程售票demo,具体链接: http://www.cnblogs.com/xifenglou/p/8807323.html以上算是单机版的实现,特别使用了redis 实现分布式锁 ...
- [BZOJ 4916]神犇和蒟蒻
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- [UOJ 41]【清华集训2014】矩阵变换
Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...
- [APIO 2012]派遣
Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为 ...
- C++Primer学习——类型转换
无符号之间的运算 当一个是无符号类型,另外一个是带符号类型: 如果无符号不小于带符号,那么带符号转换成无符号. 如果无符号小于带符号,当无符号类型的所有值都能存到带符号中时,则无符号转换成带符号,否则 ...
- hihocoder——1041国庆出游(搜索)
描述 小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比较有特色:它共有n座城市(编号1-n):城市之间恰好有n-1条公路相连,形成一个树形公路网.小Hi计划从A国首都(1号城市)出发,自驾遍历所 ...
- bzoj2442[Usaco2011 Open]修剪草坪 单调队列优化dp
2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1159 Solved: 593[Submit] ...
- Python中模块之copy的功能介绍
模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. ...
- h5的localStorage和sessionStorage
今天做了个首页的弹窗,要求是打开时显示弹窗,然后点击关闭按钮时弹窗关闭,然后点击不再显示,之后再刷新就不会有弹窗,总结一下需求. 1.弹窗显示隐藏 这个很容易,我们可以用display:none和di ...
- JPA 的 CascadeType 属性 和 FetchType属性 和 各种映射关系
代码地址:https://gitee.com/a247292980/lgp20151222 CascadeType CascadeType.PERSIST级联新增(又称级联保存): CascadeTy ...