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 ...
随机推荐
- 关于myeclipse启动报错:An internal error has occurred. java.lang.NullPointerException解决办法
启动myeclipse报错,百度了一下网友处理方式,对比日志,发现现在已有的教程真的是巨人坑: 如果出现了上述的错误按照如下的3个步骤解决:1.首先关闭MyEclipse工作空间.2.然后删除工作空间 ...
- 深入java多线程一
涉及到 1.线程的启动(start) 2.线程的暂停(suspend()和resume()) 3.线程的停止(interrupt与异常停止,interrupt与睡眠中停止,stop(),return) ...
- testng中使用reportng报告
1.pom.xml文件中添加依赖,重构一下项目(mvn compile) <dependency> <groupId>org.uncommons</groupId> ...
- [POJ 3728]The merchant
Description There are N cities in a country, and there is one and only one simple path between each ...
- [SDOI2016]硬币游戏
题目描述 Alice 和 Bob 现在在玩的游戏,主角是依次编号为 1 到 n 的 n 枚硬币.每一枚硬币都有两面,我们分别称之为正面和反面.一开始的时候,有些硬币是正面向上的,有些是反面朝上的.Al ...
- [CQOI2013]新Nim游戏
Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴 ...
- GCD(ZYYS)
[问题描述]在山的那边.海的那边有 n 个小矮人,他们生存的意义就是要保护他们的精神领袖——GCD.有一天,他们收到了一封恐吓信,说要在一个遥远的地方用维纳斯之箭射击 GCD,让他变成一根面条,n 个 ...
- bzoj 4919: [Lydsy六月月赛]大根堆
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...
- 51nod 1376 最长递增子序列的数量(线段树)
51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递 ...
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...