一种控件属性解析系统及方法_2

文档序号:9667256阅读:来源:国知局
HTML 源中的格式为:〈inputid = 〃lanApply〃class = 〃button〃type =〃submit"value = 〃保存">。HTML虽作为松散的结构,但较之普通文本,有很多特点可供解析。类似这种控件很容易使用正则表达式进行匹配,输出符合控件定位要求的属性。如果控件本身不带有文本标识,则可以使用相邻控件的文本标识作为参照,并通过解析单元4来实现通过相邻控件的文本标识来找到自身的属性。
[0047]对于控件属性存放的变量名的格式为:页面标识_控件类型标识_功能标识。页面标识用于表示同一页面的控件属性存放的变量名共用同一个页面标识头部,便于组织页面结构及区分不同页面下具有相同文本标识的控件。控件类型可用于辅助匹配。对于某些特殊的控件类型,如采用控件类型标识,可在解析单元4中采用特殊方法。功能标识为区别同一页面下不同控件。按照此结构,一个页面的保存按钮就可以被抽象为["保存",〃所处页面名_Button_Save〃]。这样每个网页都是一个二维的列表。每个控件都是二维列表中的一个列表对象。这种抽象工作只需要完成一次,就可以在软件开发的周期中维护并使用。
[0048]如图2所示,在优选的实施例中,解析单元4包括:
[0049]—第一判断模块41,用以判断每个子列表中的文本标识是否唯一,并输出判断结果;
[0050]一匹配模块44,连接第一判断模块41,当文本标识为唯一时,匹配模块44用以根据预设模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性,根据控件属性获取相应的属性定位文件,并输出;
[0051]—第二判断模块42,连接第一判断模块41,当文本标识不是唯一时,第二判断模块42用以判断文本标识对应的代码块是否为JavaScript动态选择代码块,并输出判断结果;
[0052]—分离模块45,分别连接第二判断模块42和匹配模块44,当文本标识对应的代码块为JavaScript动态选择代码块时,分离模块45用以根据预设解析库分离文本标识对应的代码段;
[0053]—模糊匹配模块43,连接第二判断模块42,当文本标识对应的代码块不是JavaScript动态选择代码块时,模糊匹配模块43用以根据字符串相似度算法(Levenshtein)对文本标识的字符串相似度进行比对,将达到预设标准的文本标识对应的控件属性输出,并将未达到预设标准的文本标识进行标记并保存。
[0054]在本实施例中,解析单元4用来接收网页抽象体和网页本身源代码,输出面向测试工具的页面控件定位符文件。基于控件抽象出来的文本标识来匹配源码中的文本,取出需要的控件属性,依据控件定位的方法,如by id, by name, by css, by xpath等,输出能够被自动化测试工具识别并操作的控件定位符文件。
[0055]具体地,解析单元4接收的输入为网页的抽象体和网页的源代码。解析单元4能够依据控件文本标识解析松散HTML源代码获得控件属性值,再根据辨识出来的控件类型自动生成可供底层API调用的控件定位符。在进行这一过程之前需采用第一判断模块41判断文本标识符是否唯一,如果唯一,则采用匹配模块44或者对于特殊控件的解析方法,将需要的控件定位符解析出来。如果文本标识符经过过滤处理后仍不唯一,使用预设解析库分离出对应的代码块,通过脚本计算出高频字符串(如果是表格格式则直接选取表头文本)作为代码块的key,将每段代码块的key值与控件定位符变量名的功能标识文本进行相似度对比,选出最相似的key所对应的代码块。再进行次级模式的匹配,获得并输出定位符。
[0056]自动化测试工具在回归测试中,Setup阶段运行上述脚本,更新底层API调用的控件定位符,再运行对应的测试步骤,即可得出测试结果。
[0057]当同一页面出现多个不同控件,但文本标识一致时,利用模糊匹配模块43使用字符串相似度算法进行字符串相似度对比。这种方法是基于标准的用户界面控件开发的,控件的属性name, value或id的字符串通常都带有一定的含义。在控件文本标识一致的情况下,可以使用控件定位符的变量名和解析出来的属性字符串进行相似度对比,在字符串相似度对比的方法上采用Levenshtein距离算法。经过控件变量名和属性字符串的Levenshtein算法计算,cost值较低的属性字符串即可以认为是需要获取的对象。另外,如果某文本为中文,则将中文字符串映射至英字符串集合中,即可进行相似度算法比较。映射举例:中文字符串“密码”可以映射为:[’ password’ , ’ pwd’ , ’ psw’ , ’ passwd’ ]。通过分别对比’ password’,‘pwd’,‘psw’获得各自的cost值,选取最小的cost值与中文字符‘密码’的相似度值。可以在脚本中建立一个中英文映射库,这一映射库随着软件开发的周期而逐渐成熟。同时经过Levenshtein优选出来的属性值,可以记录其不确定标签,以方便后期定位问题。
[0058]在优选的实施例中,预设模式为根据预设的优先级匹配模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性。
[0059]进一步地,预设的优先级匹配模式依次递减的顺序依次为:输入(input)同行匹配模式、输入(input)多行匹配模式、选择(select)多行匹配模式、前向同行匹配模式、前向多行匹配模式。
[0060]在本实施例中,匹配模块44的预设模式可以是一组带有优先级的字符串模式,结合正则表达式可以从HTML文本中取出对应控件的属性。本实施例中的预设的优先级匹配模式为:input同行匹配模式,input N行匹配模式,select N行匹配模式,前向同行匹配模式,前向N行匹配模式,优先级依次递减。在进行匹配寻找控件属性时,首先会尝试采用input同行匹配模式,如果找到了对应的字符串,则利用正则表达式分组的方法,提取出需要的属性。例如某页面保存按钮按照〈input标签开头,以value = 〃保存〃结尾即可进行匹配。如果未找到对应的字符串,则使用次优先级的input N行匹配模式,以此类推。少数情况下,控件的文本标识字符串在HTML中位于属性字符串前面,这种情况下使用一般的input或select匹配无法匹配出来,经过轮询到前向匹配模式,可以将属性匹配出来。
[0061]Input同行匹配模式:
[0062]” (input.* (name | id) = \" (.+ ? ) \".* ? > % s) 〃
[0063]Input N行匹配模式,N为4:
[0064]" (input.* (name | id) = \" (.+ ? ) \" (.*\n) {0, 4}.*>% s)"
[0065]Select N行匹配模式,N为10:
[0066]".*(〈 (select I SELECT).* (name I id) = \" (.+ ? ) \" (.*\n) {0,10} ?.*>\s ? %s).
[0067]前向同行匹配模式:
[0068]"(>\s? % s.*\n ?.* (name I id) = \" (.+ ? ) \")"
[0069]前向N行匹配模式:
[0070]’ (>\s ? % s (.*\n) {0, 4} ?.* (name | id) = (\" | \,)(.+ ? ) (\" | \,)),
[0071]对于本身不带文本字符标识的页面控件,这类控件很特殊,一般是输入框(Editbox),这种情况可以借助上下文的文本标识。同时控件定位符变量名的控件类型中可以辨识该种控件,一旦在控件定位符变量名中包含有特殊控件的控件名,则在进行匹配时,通过在匹配模式中加入该种控件的特殊属性来保证匹配的准确性。如autocomplete, maxlength等属性字符串。另外一种特殊的控件类型:button类型,绝多数情况下不需要进行匹配,就可以用xpath的依据value值的方法直接输出定位符。
[0072]在优选的实施例中,预设模式为采用分级匹配模式将列表中的每个子列表中的文本标识与源代码中的文本进行匹配,以获取相应的控件属性。
[0073]进一步地,分级匹配模式包括两个阶段:
[0074]第一阶段为根据文本标识定位出文本段落;
[0075]第二阶段为采用次级匹配模式获取文本段落的属性条目,以获取相应的控件属性。
[0076]在本实施例中,分级匹配模式是将匹配的过程分为两个步骤:1.根据提供的文本标识符匹配出大概的文本段落;2.从文本段落中使用次级匹配,找出控件的主要属性。在优先级匹配模式中,使用了正则表达式分组的方法一步获取需要的控件属性。但是匹配效率低下。分级匹配的第一步忽略了页面控件的主要属性文本,只是依据文本标识定位出需要的文本段落。第二步中使用次级匹配模式,可以精准获取所要的属性条目。次级匹配又可以依据需要的控件属性写成不同的匹配语句,如value类型,name类型,id类型等。如下为次级匹配的模式的几种语句:
[0077]type 属性:
[0078]Sub_Patt_TYPE0 = 〃 (input.*type = \" (.+ ? ) \")"
[0079]type属性变体:
[0080]Sub_Patt_TYPEl = "(input.*type
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1