概述

前面的一篇博文粗略介绍了基于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. [LeetCode] Reverse Words in a String III 翻转字符串中的单词之三

    Given a string, you need to reverse the order of characters in each word within a sentence while sti ...

  2. django 模板继承与重写

    1.模板的继承一般用在别人给我们做好的HTML页面,当我们发现有很多的页面都具有相同的部分,这会我们应该考虑怎么能把他们相同的部分给提取出来,提取出来的部分我们作为一个单独的HTML文件叫做base. ...

  3. cogs 558 奇怪的函数

    提交地址:http://cojs.tk/cogs/problem/problem.php?pid=558 558. 奇怪的函数 ★☆   输入文件:xx.in   输出文件:xx.out   简单对比 ...

  4. [CQOI 2011]动态逆序对

    Description 题库链接 对于序列 \(A\) ,它的逆序对数定义为满足 \(i<j\) ,且 \(A_i>A_j\) 的数对 \((i,j)\) 的个数.给 \(1\) 到 \( ...

  5. codeforces 651C Watchmen

    Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...

  6. bzoj 5248: [2018多省省队联测]一双木棋

    Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何棋子, 两人轮流在格子上落子,直到填满棋盘时结束.落子的规则是:一个格子可以落子 ...

  7. [BZOJ]4197: [Noi2015]寿司晚宴

    Time Limit: 10 Sec  Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NO ...

  8. APIO 2013

    这套好丧--跟别的画风好不一样(中国风?).提答没做也没测,假装只有两题吧.140/200 T1.ROBOTS 题目大意:h*w的网格上有n个机器人编号1~n,网格上有空地.墙.顺/逆时针转向器,每次 ...

  9. Linux添加系统调用的两种方法

    前言 系统调用的基本原理 系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态.在内核中通过软中断0X80, ...

  10. WiFi安全网桥探讨

    1 WiFi网桥现状 近年来,随着视频监控产品不断普及,无线网桥,特别是WiFi网桥,也越来越受到市场青睐.主要原因大概归属如下:1)同有线视频传输相比,无线视频传输无需布线,故安装及其方便,施工周期 ...