发明内容
针对现有的网页自动化的测试存在的上述问题,现提供一种旨在实现能够对脚本化页面控件进行定位符解析,提高自动化开发及测试效率的控件属性解析系统及方法。
具体技术方案如下:
一种控件属性解析系统,应用于网页控件的自动化测试中,包括:
一第一存储单元,用以存储一与所述网页控件关联的列表,所述列表中包括复数个子列表,每个所述子列表包括一个控件的文本标识及相应的定位符变量名;
一过滤单元,连接所述第一存储单元,用以将所述列表中重复的文本标识对应的所述子列表滤除,并输出经过滤后的所述列表;
一第二存储单元,用以存储网页的源代码;
一解析单元,分别连接所述过滤单元和所述第二存储单元,用以将所述列表中的每个所述子列表中的所述文本标识与所述源代码中的文本进行匹配,以获取相应的控件属性,根据所述控件属性获取相应的属性定位文件,并输出。
优选的,所述子列表包括控件文本标识及与所述控件文本标识对应的控件定位符变量名。
优选的,所述控件定位符变量名包括与所述控件对应的页面标识,与所述控件对应的控件类型标识及与所述控件对应的功能标识。
优选的,所述解析单元包括:
一第一判断模块,用以判断每个所述子列表中的所述文本标识是否唯一,并输出判断结果;
一匹配模块,连接所述第一判断模块,当所述文本标识为唯一时,所述匹配模块用以根据预设模式将所述列表中的每个所述子列表中的所述文本标识与所述源代码中的文本进行匹配,以获取相应的控件属性,根据所述控件属性获取相应的属性定位文件,并输出;
一第二判断模块,连接所述第一判断模块,当所述文本标识不是唯一时,所述第二判断模块用以判断所述文本标识对应的代码块是否为JavaScript动态选择代码块,并输出判断结果;
一分离模块,分别连接所述第二判断模块和所述匹配模块,当所述文本标识对应的代码块为JavaScript动态选择代码块时,所述分离模块用以根据预设解析库分离所述文本标识对应的代码段;
一模糊匹配模块,连接所述第二判断模块,当所述文本标识对应的代码块不是JavaScript动态选择代码块时,所述模糊匹配模块用以根据字符串相似度算法对所述文本标识的字符串相似度进行比对,将达到预设标准的所述文本标识对应的控件属性输出,并将未达到预设标准的所述文本标识进行标记并保存。
优选的,所述预设模式为根据预设的优先级匹配模式将所述列表中的每个所述子列表中的所述文本标识与所述源代码中的文本进行匹配,以获取相应的控件属性。
优选的,所述预设的优先级匹配模式依次递减的顺序依次为:输入同行匹配模式、输入多行匹配模式、选择多行匹配模式、前向同行匹配模式、前向多行匹配模式。
优选的,所述预设模式为采用分级匹配模式将所述列表中的每个所述子列表中的所述文本标识与所述源代码中的文本进行匹配,以获取相应的控件属性。
优选的,所述分级匹配模式包括两个阶段:
第一阶段为根据所述文本标识定位出文本段落;
第二阶段为采用次级匹配模式获取所述文本段落的属性条目,以获取相应的控件属性。
优选的,所述预设解析库为采用Java编写的标准通用标记语言解析库。
一种控件属性解析方法,应用于上述的控件属性解析系统,包括下述步骤:
步骤1.将所述列表中重复的文本标识对应的所述子列表滤除,并输出经过滤后的所述列表;
步骤2.将所述列表中的每个所述子列表中的所述文本标识与所述源代码中的文本进行匹配,以获取相应的控件属性,根据所述控件属性获取相应的属性定位文件,并输出。上述技术方案的有益效果:
本技术方案中,控件属性解析系统通过把需要控制的控件对象抽象为具体文本标识,采用解析单元预先对网页面控件解析,从而获得控件属性定位文件,提高了自动化开发及测试效率。控件属性解析方法可在回归测试之前更新底层API的变量,避免回归测试的误报,减少了自动化开发和维护的成本。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
如图1所示,一种控件属性解析系统,应用于网页控件的自动化测试中,包括:
一第一存储单元1,用以存储一与网页控件关联的列表,列表中包括复数个子列表,每个子列表包括一个控件的文本标识及相应的定位符变量名;
一过滤单元2,连接第一存储单元1,用以将列表中重复的文本标识对应的子列表滤除,并输出经过滤后的列表;
一第二存储单元3,用以存储网页的源代码;
一解析单元4,分别连接过滤单元2和第二存储单元3,用以将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性,根据控件属性获取相应的属性定位文件,并输出。
在本实施例中,列表为嵌套列表。控件属性解析系统通过把需要控制的控件对象抽象为具体文本标识,利用过滤单元2针对多个重复的文本标识符进行过滤,将超级文本标记语言(HyperText Markup Language,HTML)中无效的文本过滤掉,采用解析单元4可对脚本化页面控件进行定位符解析,提高了自动化开发的效率。本实施例可应用于自动化回归测试中,在测试的可执行(Setup)阶段,采用控件属性解析系统能更新底层API调用的页面控件定位符,可避免因页面控件属性变化而导致测试用例不通过的情况。
进一步地,子列表包括控件文本标识及与控件文本标识对应的控件定位符变量名。子列表的格式为[控件文本标识,控件定位符变量名]。
在本实施例中,可将网页用户界面控件抽象成脚本语言数据对象。该数据格式为嵌套列表,子列表包含[控件文本标识,控件定位符变量名]。这个抽象过程为整个属性解析的预备步骤,为解析单元4提供了素材,该抽象的行为只需在整个软件开发周期的需求阶段一次完成,后续维护即可。
在优选的实施例中,控件定位符变量名包括与控件对应的页面标识,与控件对应的控件类型标识及与控件对应的功能标识。控件定位符变量名的格式为:页面标识_控件类型标识_功能标识。
在本实施例中,将每个需要自动化的网页控件抽象为一个列表对象。子列表的具体结构为[控件文本标识,控件定位符变量名]。控件文本标识用于表示来源于本身自带的文本,该文本字符一般会出现在HTML中,使用字符串匹配即可找到控件相关的属性。一般情况下,网页中的一个单独控件都有唯一的标识,如带有“保存”文本的一个按钮,其文本标识为“保存”,其在HTML源中的格式为:<inputid="lanApply"class="button"type="submit"value="保存">。HTML虽作为松散的结构,但较之普通文本,有很多特点可供解析。类似这种控件很容易使用正则表达式进行匹配,输出符合控件定位要求的属性。如果控件本身不带有文本标识,则可以使用相邻控件的文本标识作为参照,并通过解析单元4来实现通过相邻控件的文本标识来找到自身的属性。
对于控件属性存放的变量名的格式为:页面标识_控件类型标识_功能标识。页面标识用于表示同一页面的控件属性存放的变量名共用同一个页面标识头部,便于组织页面结构及区分不同页面下具有相同文本标识的控件。控件类型可用于辅助匹配。对于某些特殊的控件类型,如采用控件类型标识,可在解析单元4中采用特殊方法。功能标识为区别同一页面下不同控件。按照此结构,一个页面的保存按钮就可以被抽象为["保存","所处页面名_Button_Save"]。这样每个网页都是一个二维的列表。每个控件都是二维列表中的一个列表对象。这种抽象工作只需要完成一次,就可以在软件开发的周期中维护并使用。
如图2所示,在优选的实施例中,解析单元4包括:
一第一判断模块41,用以判断每个子列表中的文本标识是否唯一,并输出判断结果;
一匹配模块44,连接第一判断模块41,当文本标识为唯一时,匹配模块44用以根据预设模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性,根据控件属性获取相应的属性定位文件,并输出;
一第二判断模块42,连接第一判断模块41,当文本标识不是唯一时,第二判断模块42用以判断文本标识对应的代码块是否为JavaScript动态选择代码块,并输出判断结果;
一分离模块45,分别连接第二判断模块42和匹配模块44,当文本标识对应的代码块为JavaScript动态选择代码块时,分离模块45用以根据预设解析库分离文本标识对应的代码段;
一模糊匹配模块43,连接第二判断模块42,当文本标识对应的代码块不是JavaScript动态选择代码块时,模糊匹配模块43用以根据字符串相似度算法(Levenshtein)对文本标识的字符串相似度进行比对,将达到预设标准的文本标识对应的控件属性输出,并将未达到预设标准的文本标识进行标记并保存。
在本实施例中,解析单元4用来接收网页抽象体和网页本身源代码,输出面向测试工具的页面控件定位符文件。基于控件抽象出来的文本标识来匹配源码中的文本,取出需要的控件属性,依据控件定位的方法,如by id,by name,by css,by xpath等,输出能够被自动化测试工具识别并操作的控件定位符文件。
具体地,解析单元4接收的输入为网页的抽象体和网页的源代码。解析单元4能够依据控件文本标识解析松散HTML源代码获得控件属性值,再根据辨识出来的控件类型自动生成可供底层API调用的控件定位符。在进行这一过程之前需采用第一判断模块41判断文本标识符是否唯一,如果唯一,则采用匹配模块44或者对于特殊控件的解析方法,将需要的控件定位符解析出来。如果文本标识符经过过滤处理后仍不唯一,使用预设解析库分离出对应的代码块,通过脚本计算出高频字符串(如果是表格格式则直接选取表头文本)作为代码块的key,将每段代码块的key值与控件定位符变量名的功能标识文本进行相似度对比,选出最相似的key所对应的代码块。再进行次级模式的匹配,获得并输出定位符。
自动化测试工具在回归测试中,Setup阶段运行上述脚本,更新底层API调用的控件定位符,再运行对应的测试步骤,即可得出测试结果。
当同一页面出现多个不同控件,但文本标识一致时,利用模糊匹配模块43使用字符串相似度算法进行字符串相似度对比。这种方法是基于标准的用户界面控件开发的,控件的属性name,value或id的字符串通常都带有一定的含义。在控件文本标识一致的情况下,可以使用控件定位符的变量名和解析出来的属性字符串进行相似度对比,在字符串相似度对比的方法上采用Levenshtein距离算法。经过控件变量名和属性字符串的Levenshtein算法计算,cost值较低的属性字符串即可以认为是需要获取的对象。另外,如果某文本为中文,则将中文字符串映射至英字符串集合中,即可进行相似度算法比较。映射举例:中文字符串“密码”可以映射为:['password','pwd','psw','passwd']。通过分别对比’password’,‘pwd’,‘psw’获得各自的cost值,选取最小的cost值与中文字符‘密码’的相似度值。可以在脚本中建立一个中英文映射库,这一映射库随着软件开发的周期而逐渐成熟。同时经过Levenshtein优选出来的属性值,可以记录其不确定标签,以方便后期定位问题。
在优选的实施例中,预设模式为根据预设的优先级匹配模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性。
进一步地,预设的优先级匹配模式依次递减的顺序依次为:输入(input)同行匹配模式、输入(input)多行匹配模式、选择(select)多行匹配模式、前向同行匹配模式、前向多行匹配模式。
在本实施例中,匹配模块44的预设模式可以是一组带有优先级的字符串模式,结合正则表达式可以从HTML文本中取出对应控件的属性。本实施例中的预设的优先级匹配模式为:input同行匹配模式,input N行匹配模式,select N行匹配模式,前向同行匹配模式,前向N行匹配模式,优先级依次递减。在进行匹配寻找控件属性时,首先会尝试采用input同行匹配模式,如果找到了对应的字符串,则利用正则表达式分组的方法,提取出需要的属性。例如某页面保存按钮按照<input标签开头,以value="保存"结尾即可进行匹配。如果未找到对应的字符串,则使用次优先级的input N行匹配模式,以此类推。少数情况下,控件的文本标识字符串在HTML中位于属性字符串前面,这种情况下使用一般的input或select匹配无法匹配出来,经过轮询到前向匹配模式,可以将属性匹配出来。
Input同行匹配模式:
"(input.*(name|id)=\"(.+?)\".*?>%s)"
Input N行匹配模式,N为4:
"(input.*(name|id)=\"(.+?)\"(.*\n){0,4}.*>%s)"
Select N行匹配模式,N为10:
".*(<(select|SELECT).*(name|id)=\"(.+?)\"(.*\n){0,10}?.*>\s?%s).*"
前向同行匹配模式:
"(>\s?%s.*\n?.*(name|id)=\"(.+?)\")"
前向N行匹配模式:
'(>\s?%s(.*\n){0,4}?.*(name|id)=(\"|\')(.+?)(\"|\'))'
对于本身不带文本字符标识的页面控件,这类控件很特殊,一般是输入框(Editbox),这种情况可以借助上下文的文本标识。同时控件定位符变量名的控件类型中可以辨识该种控件,一旦在控件定位符变量名中包含有特殊控件的控件名,则在进行匹配时,通过在匹配模式中加入该种控件的特殊属性来保证匹配的准确性。如autocomplete,maxlength等属性字符串。另外一种特殊的控件类型:button类型,绝多数情况下不需要进行匹配,就可以用xpath的依据value值的方法直接输出定位符。
在优选的实施例中,预设模式为采用分级匹配模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性。
进一步地,分级匹配模式包括两个阶段:
第一阶段为根据文本标识定位出文本段落;
第二阶段为采用次级匹配模式获取文本段落的属性条目,以获取相应的控件属性。
在本实施例中,分级匹配模式是将匹配的过程分为两个步骤:1.根据提供的文本标识符匹配出大概的文本段落;2.从文本段落中使用次级匹配,找出控件的主要属性。在优先级匹配模式中,使用了正则表达式分组的方法一步获取需要的控件属性。但是匹配效率低下。分级匹配的第一步忽略了页面控件的主要属性文本,只是依据文本标识定位出需要的文本段落。第二步中使用次级匹配模式,可以精准获取所要的属性条目。次级匹配又可以依据需要的控件属性写成不同的匹配语句,如value类型,name类型,id类型等。如下为次级匹配的模式的几种语句:
type属性:
Sub_Patt_TYPE0="(input.*type=\"(.+?)\")"
type属性变体:
Sub_Patt_TYPE1="(input.*type=(.+?)\s)"
value属性:
Sub_Patt_VALUE0=".*(input|option|OPTION).*?value=\"(.+?)\".*?>\s?.*%s"
value属性变体:
Sub_Patt_VALUE1=".*(input|option|OPTION).*?value=(.+?)\s.*?>\s?%s"
id属性:
Sub_Patt_ID0="(.*((input|select).*(id|name)=\"(.+?)\".*>%s))"
id属性变体:
Sub_Patt_ID1="((input|select|SELECT).*?(id|name)=\"(.+?)\")"
在优选的实施例中,预设解析库为采用Java编写的标准通用标记语言解析库(Python HTMLParser)。
在本实施例中,同一网页代码中存在并行的n段代码,相互具有替代性,在运行过程中由JavaScript根据使用者的输入动态选择具体使用哪一段代码。这种特殊的情况通常出现在包含JavaScript的动态页面中。可使用Python HTMLParser解析库,将并行的几段代码摘取出来,存放至临时的字典中。字典的Key为在分离的代码块中具有较高出现频率的文本,并且存在于代码段中,一般为文本段表头一行一列的文本标识,此处可以根据实际操作的经验值进行修改。字典的值为摘取出来对应的代码块。分离代码最终形成如下格式{label1:code block1,label2:code block2,...labeln:code blockn},使用Levenshtein距离算法比对控件定位符存放的变量名和各代码段label的近似度,使用相似度对比摘取出最近似的代码块,再进行二级匹配即可。最后,凡经由模糊匹配模式匹配出的结果都会被框架标记为不确定匹配。
一种控件属性解析方法,应用于上述的控件属性解析系统,包括下述步骤:
步骤1.将列表中重复的文本标识对应的子列表滤除,并输出经过滤后的列表;
步骤2.将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性,根据控件属性获取相应的属性定位文件,并输出。
在本实施例中,通过把需要控制的控件对象抽象为具体文本标识,预先对网页面控件解析,从而获得控件属性定位文件,提高了自动化开发及测试效率。
基于控件属性解析系统的控件属性解析方法的具体流程如附图1所示,一般的自动化测试执行过程中,预编写的测试脚本调用Web应用程序测试的工具Selenium的网页驱动(Web Driver),而Web Driver需要调用网页的控件定位符,达到识别并控制网页控件的目的。而测试执行前置框架就可以生成页面控件的属性定位文件,为自动化测试做准备工作。
如图3所示,基于控件属性解析系统的控件属性解析方法包括下述步骤:
步骤S1.过滤掉无效文本标识,执行步骤S2;
步骤S2.判断文本标识是否唯一,若是,执行步骤S3;若否,执行步骤S7;
步骤S3.遍历优先级匹配,执行步骤S4;
步骤S4.判断是否需要二级匹配,若是,执行步骤S6;若否,执行步骤S5;
步骤S5.输出定位属性文件,执行步骤S10;
步骤S6.使用子匹配模式进行匹配,执行步骤S5;
步骤S7.判断是否为JavaScript动态选择代码块,若是,执行步骤S8;若否,执行步骤S9;
步骤S8.使用Python HTMLParser分离代码段,执行步骤S3;
步骤S9.使用模糊匹配,执行步骤S5;
步骤S10.传输给自动化测试工具底层API使用。
本技术方案可在回归测试之前更新底层API的变量,避免回归测试的误报,减少了自动化开发和维护的成本。
以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。