在使我发疯的事情上,我需要一些帮助。
在我的工作框架中,我们使用以下结构: Functionality_OR.tsr-Functionality_AppObjects.qfl-Functionality_Tasks.qfl-Utils.qfl-主要测试 (Functionality_Tasks和Utils完全相同,但是我们将Utils用作“一般任务库”,并带有诸如errorScreenCapture之类的子类,因此我们从Functionality_Tasks函数/子类中调用utils函数/子类)
在我们的框架中,要求我们为Functionality_OR.tsr中的每个对象在Functionality_AppObjects.qfl库中定义如下函数:
Public Function getSomeObject
set getSomeObject = Browser("asd").Page("asd").WebButton("someObject")
End Function
然后从该函数中获取对象。
现在,我决定使用函数来创建对象-我知道这很奇怪,但是多OR管理变得令人讨厌,有时我会丢失对象引用,因为UFT会说“为什么不这样”。为此,我决定使用DP切换到基于功能的对象。一个优点是我也使用较少的文件,因为对象库将更易于处理(我知道我不尊重框架,所以请不必告诉我)。现在到了重点。
我定义了此函数来创建对象:
'On util Tasks library
Public Function createObject(parameters)
set oDesc = Description.Create
'splitText functions returns an array so I can reuse this
'with different object types
Properties = splitText(parameters)
oDesc("html tag").value = Properties(0)
Select Case lcase(Properties(0))
Case "span"
oDesc("html id").value = Properties(1)
Case "input"
oDesc("html id").value = Properties(1)
oDesc("value").value = ".*" 'Any character so I can modify it from outside
Case etc...
End Select
Set createObject = oDesc
End Function
上一个函数 工作 ,并且在我拥有的每个函数对象库中都这样调用:
'Main page object-library
Public Function getBtnDataSearch
Tag = "INPUT"
htmlID = "button_BUTTON435c"
Set Obj = createObject(Tag & ";" & htmlID)
set getBtnDataSearch = getFrameTerminal.WebButton(Obj)
End Function
Public Function getTxtDataSearch
Tag = "INPUT"
htmlID = "txt2335c"
Set Obj = createObject(Tag & ";" & htmlID)
set getTxtDataSearch= getFrameTerminal.WebButton(Obj)
End Function
结果与他们在我的框架中使用的结果相同。因此,如果我需要标签对象,则可以将Id和“ Span”作为标记传递,并且不必担心太多,因为“ html id”对于每个对象都是唯一的(幸运的是)。
现在我遇到的问题是这些可以在动作/主体上起作用:
msgbox getTxtSearchField.Object.value
msgbox getProperty(getTxtSearchField, "value")
作为参考,getProperty()是一个util函数,如果找到对象,则返回getROProperty,如果未找到,则调用errorScreenCapture,clickObject()的功能相同,但是单击对象。
但是当我在函数内部调用它时,它会带来空的作用
'Action/main
someSub (TestArgs1, TestArgs2, etc...)
'Main page_Task Library
public someSub (param1, param2, etc...)
innerSub (param1, etc...)
end sub
public innerSub (param1, etc...)
'some action
'some action
clickSpecialButton getBtnDataSearch, getTxtDataSearch
'some action
'some action
end sub
'Utils library
public sub clickSpecialButton (objectButton, byref textField)
'I empty the value before using the object because the web
'application sometimes refreshes and changes the value to default
textField.set ""
'this Click changes the value of textField object
clickObject objectButton
'Due to slow response I looped a Sync till value is changed
While (getProperty(textField, "value") = Empty)
Browser.Sync()
Wend
End Sub
但是出于某种不可思议的原因,如果我“ msgbox值属性”,它将带来空白:
那是我的头部爆炸的地方,我想这与范围有关。但是我不清楚,关于如何查看/修复正在发生的事情有什么想法吗?