QTP 对象库参数化解决多语言

最近做的web项目,需要支持多语种。

系统默认是英语语种,将来需要支持例如,法语,德语之类的。

目前测试框架的方案是:每一种语种对应一条共享对象库。

初始化的根据系统语言选择加载对应的对象库

想了想该方案维护性太差,将来页面对象变化话需要同时维护多套对象库

我的解决思路如下:

 

QTP 对象库参数化解决多语言_第1张图片
 
 

 

1.通过 Manage Repository Parameters 新建属性变量,并设置在英文下的 default value。

2.在对象库里link parameters。

3.新建一个ObjectMapping excle 文件。

 

这样以后只用维护一套对象库和一个ObjectMapping  表,将来如果要扩展支持其他语言,只要在表里加一列就好。

 

tips.

1.在对象库里尽量选择html id 这个属性(如果熟悉web 前端的同学,这个其实就是页面控件里id ,一般来讲是唯一的,并且跟页面语种无关),所以真正需要参数话的属性只有 innertext,text.等取页面字符。

减去之前推荐的html id 这个跨语言的属性,其实真正需要参数化的对象并不多。

2.Parnmeters 的default value 为英文下字符,只有在非英文下才加载ObjectMapping,提高脚本执行效率。

3.mapping 表里的enus那一列其实用不到,仅用来参考用。系统为英语是不加载mapping表。

 

目前对象库的参数化有个问题,不能设置为正则表达式。不知道是不是HP故意遗漏的。

 

If lcase(userLanguage)<>"enus" Then
	MappingObject userLanguage
End if	


Sub MappingObject(Language)
 	objTestCase.entering "MappingObject"
	Dim mappingFile:mappingFile=objTestCase.GetResouceFolder&"\ObjectMappingTable.xlsx"
	Dim i
	On error resume next :err.clear
	DataTable.AddSheet "ObjectMappingTable"
	DataTable.ImportSheet mappingFile ,1 ,"ObjectMappingTable"
	dim rowcount:rowcount = DataTable.GetSheet("ObjectMappingTable").GetRowCount		
	If err.number<>0  Then
		Logger.Report micWarningWithoutScreen,"Import the ObjectMappingTable ", "We see Exception:"&err.description
		err.clear
	End If	
	For i=1 to rowcount
	    DataTable.SetCurrentRow(i) 
	    dim PropertyPara:PropertyPara=trim(DataTable.Value("PropertyPara","ObjectMappingTable"))
		Repository.Value(PropertyPara)=DataTable.Value(Language,"ObjectMappingTable")
	Next 	
	If err.number<>0 Then
		Logger.Report micWarningWithoutScreen,"Initialize Repository parameter", "We see Exception:"&err.description
		err.clear
	End If
	On error goto 0
	objTestCase.exiting "MappingObject"
End Sub

  

 

你可能感兴趣的:(qtp)