Vbscript JavaEdit搜索函数未定位可见元素

Vbscript JavaEdit搜索函数未定位可见元素,vbscript,qtp,hp-uft,Vbscript,Qtp,Hp Uft,我有两个库函数: Function searchWindow(title) Set searchWindow = Window("title:=" + title) End Function 及 我在这里测试它们: Environment.Loadfromfile("C:\UFTConstants\constants.ini") Set loginFrame = searchWindow(Environment.Value("f

我有两个库函数:

Function searchWindow(title)

     Set searchWindow = Window("title:=" + title)

End Function

我在这里测试它们:

Environment.Loadfromfile("C:\UFTConstants\constants.ini")

Set loginFrame = searchWindow(Environment.Value("frameLogin"))

loginFrame.Click

Set userField = searchField("User ID / Ci-Usager")

userField.Set "test"
第一个函数工作正常,它的title属性与应用程序的title属性匹配。但是,第二个将找不到文本字段,尽管属性匹配:

错误:

我也尝试过其他属性,标记名,各种类属性,以及这三种属性的组合,但都没有找到

有什么想法吗

第一次更新 根据要求,完整的spy屏幕盖:

记录工具生成的完整行:

JavaWindow("Application Name").JavaDialog("Window Title").JavaEdit("User ID / Ci-Usager").Set "user"
但是,当我尝试以编程方式重新创建此文件时,我得到了相同的错误,仅适用于JavaWindow:

“无法识别(类JavaWindow)的对象[JavaWindow]。”

可能的Java设置问题?然而,这并不能解释为什么录制仍然可以定位Java对象

第二次更新 以下是识别属性:

我已确保设置了所有属性,但仍无法定位

最后更新 好的,我已经把代码简化成了赤裸裸的代码。没有外部常量文件,没有外部库调用。我已经复制了在录制模式下录制的内容的完整范围。我已经打印了每个变量以确保准确性。我已经包含了完整的对象层次结构:

Set objWin = JavaWindow("label:=<redacted>")

objWin.SetTOProperty "to_class", "JavaWindow"

objWin.SetTOProperty "toolkit class", "javax.swing.JFrame"

MsgBox objWin.GetTOProperty("label")
MsgBox objWin.GetTOProperty("to_class")
MsgBox objWin.GetTOProperty("toolkit class")

Set objDialog = objWin.JavaDialog("label:=<redacted>")

objDialog.SetTOProperty "to_class", "JavaDialog"

objDialog.SetTOProperty "toolkit class", "<redacted>.LoginDialog"

MsgBox objDialog.GetTOProperty("label")
MsgBox objDialog.GetTOProperty("to_class")
MsgBox objDialog.GetTOProperty("toolkit class")

Set objEdit = objDialog.JavaEdit("attached text:=User ID / Ci-Usager")

objEdit.SetTOProperty "to_class", "JavaEdit"

objEdit.SetTOProperty "toolkit class", "javax.swing.JTextField"

MsgBox objEdit.GetTOProperty("attached text")
MsgBox objEdit.GetTOProperty("to_class")
MsgBox objEdit.GetTOProperty("toolkit class")

objEdit.Set "test"
Set objWin=JavaWindow(“标签:=”)
objWin.SetTOProperty“to_类”、“JavaWindow”
objWin.SetTOProperty“工具箱类”、“javax.swing.JFrame”
MsgBox objWin.GetTOProperty(“标签”)
MsgBox objWin.GetTOProperty(“to_类”)
MsgBox objWin.GetTOProperty(“工具箱类”)
设置objDialog=objWin.JavaDialog(“标签:=”)
objDialog.SetTOProperty“to_类”、“JavaDialog”
objDialog.SetTopProperty“toolkit类”,“.LoginDialog”
MsgBox objDialog.GetTOProperty(“标签”)
MsgBox objDialog.GetTOProperty(“to_类”)
MsgBox objDialog.GetTOProperty(“工具箱类”)
设置objEdit=objDialog.JavaEdit(“附加文本:=用户ID/Ci使用者”)
objEdit.SetTOProperty“to_类”、“JavaEdit”
objEdit.SetTOProperty“工具箱类”、“javax.swing.JTextField”
MsgBox objEdit.GetTOProperty(“附加文本”)
MsgBox objEdit.GetTOProperty(“to_类”)
MsgBox objEdit.GetTOProperty(“工具包类”)
设置“测试”
请注意,修订后的文本将从代码中删除标识元素。我方已对其进行了三次检查,结果正确无误

这仍然不起作用


然而,记录同样的情况也会发生。给出了什么?

我认为在使用Javaedit字段时,必须提到完整的层次结构。尝试将函数
searchField
的代码重新编写为:

Function searchField(label)
     Dim objFrame
     Set objFrame = searchWindow(Environment.Value("frameLogin"))
     Set searchField =  objFrame.JavaEdit("attached text:=" + label)       'Javaedit should be the child of the login window. You had to mention the full hierarchy here
End Function

我确实尝试过这一点,因为RFT以类似的方式工作,但UFT仍然拒绝识别该字段,并且由于UFT几乎不存在错误报告,我不确定还有什么其他选择可以追求。你能在OP@TheFaster可能有一个额外的空间或没有空间的地方。我知道你一定已经确定了,但请你重新检查变量标签中包含的值是否与屏幕截图中显示的值完全相同。要实现这一点,请打开object spy,单击值(用户ID/Ci Usager),复制并粘贴到代码中(不要自己写,只需复制粘贴即可)。@Kira这是一个很好的建议,但我对自己的错误处理能力非常了解,可以相信徒手打字而不是复制粘贴。代码中的所有值都是从Spy复制粘贴的values@MithileshIndurkar增加了一个完整的屏幕盖
Function searchField(label)
     Dim objFrame
     Set objFrame = searchWindow(Environment.Value("frameLogin"))
     Set searchField =  objFrame.JavaEdit("attached text:=" + label)       'Javaedit should be the child of the login window. You had to mention the full hierarchy here
End Function