概述

前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用。

元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面上的常用控件(可批量或单个抓取),获得控件所在的frame和三个唯一定位控件的xpath,并生成基于LazyUI框架的Java代码,解决繁杂的元素的获取问题。

下载:

拖拽安装到chrome即可右键使用

工具由来:

熟悉控件获取的同学都知道,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元素抓取,有此插件,便再无所求!)的更多相关文章

  1. Web自动化框架LazyUI使用手册(5)--模板工程:LazyUI-template详解

    概述: LazyUI-template: 提供Maven管理的,基于Spring+Testng的,包含常用浏览器driver的,方便连接各种数据库的java模板工程,并提供以百度搜索为例的第一个测试用 ...

  2. Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)

    作者:cryanimal QQ:164166060 上篇文章中,简要介绍了LazyUI框架,本文便来演示,如何从无到有快速搭建基于lazyUI的工程,并成功运行第一个测试用例. 本文以百度搜索为例,选 ...

  3. Web自动化框架LazyUI使用手册(1)--框架简介

    作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...

  4. Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)

    概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...

  5. Web自动化框架LazyUI使用手册(7)--浏览器常用操作API

      LazyUI框架中,BrowserEmulator类提供了大量的浏览器操作,常用的API列举如下: 1. 基本操作 /** * Open the URL * 打开一个URL * @param ur ...

  6. Web自动化框架LazyUI使用手册(8)--excel数据驱动详解(ExcelDataProvider)

    概述 框架提供了excel数据驱动方式运行测试用例的工具,本文将针对数据驱动,进行详细演示. 详见类:lazy.test.ui.browser.ExcelDataProvider 被测对象: http ...

  7. Web自动化框架LazyUI使用手册(6)--8种控件对应的class,及可对其进行的操作

    概述: 本文详述8种控件对应的class,及可对其进行的操作 回顾: 回顾一下,下文中的工具设计思路部分: http://blog.csdn.net/kaka1121/article/details/ ...

  8. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  9. web自动化框架如何设计

    web自动化框架如何设计po模式总结: 1. 页面对象模型:当页面特别多的时候,代码更好的维护 2. Po是pageObject设计模式,用来管理和维护一组web元素的对象库 3. 每一个page c ...

随机推荐

  1. 创建类似于Oracle中decode的函数

    -- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...

  2. 【基础】EM 还是 REM?这是一个问题!

    简言 应用象EM 和 REM这种相对长度单位进行页面排版是WEB开发中的最佳实践.在页面排版中较好应用EM 和 REM,根据设备尺寸缩放显示元素的大小.这就使得组件在不同设备上都达到最佳的显示效果成为 ...

  3. 关于mysql驱动包的in语句的bug

    今天发现一个MySQL驱动包执行in语句的一个bug,也许会有很多人还不知道,那么跟大家分享一下. 驱动包版本:mysql-connector-java-5.1.36.jar 在使用dbutils执行 ...

  4. shell实现脚本监控服务器及web应用

    实际工作中我们需要知道部署在服务器上的应用有没有问题,但是人为的操作太麻烦有咩有简单的方式呢shell来监控我们服务器运行状态以及服务器上部署的应用,如果出现异常就会自动发送一个邮件给我们,开始搞起. ...

  5. ES6(解构赋值)

    解构赋值 1.什么是解构赋值? 在语法上,就是赋值的作用,解构为(左边一种解构.右边一种解构,左右一一对应进入赋值) 2.解构赋值的分类. 1.左右为数组即为数组解构赋值:2.左右为对象即为对象解构赋 ...

  6. springboot+shiro+redis项目整合

    介绍: Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最 ...

  7. Python传递参数的多种方式

    Python中根据函数的输入参数以及是否有返回值可分为四种函数: 1.无参数无返回值 2.有参数无返回值 3.无参数有返回值 4.有参数无返回值 Python 中参数传递有下列五种方式; 1.位置传递 ...

  8. [ZJOI2006]超级麻将

    题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9 ...

  9. 洛谷P1397 [NOI2013]矩阵游戏

    矩阵快速幂+费马小定理 矩阵也是可以跑费马小定理的,但是要注意这个: (图是盗来的QAQ) 就是说如果矩阵a[i][i]都是相等的,那么就是mod p 而不是mod p-1了 #include< ...

  10. bzoj 2436: [Noi2011]Noi嘉年华

    Description NOI2011 在吉林大学开始啦!为了迎接来自全国各地最优秀的信息学选手,吉林大学决定举办两场盛大的 NOI 嘉年华活动,分在两个不同的地点举办.每个嘉年华可能包含很多个活动, ...