Следует отметить, что параметр тайм-аута до Exist
по умолчанию не равен нулю, поэтому, если вы хотите, чтобы он сразу возвращался, если объект не существует, вы должны использовать obj.Exist(0)
.
Если мое понимание верно, вы хотите имитировать поведение Exist
, чтобы в случае сбоя условия (в этом случае объект действительно существовал), функция не возвращала False
немедленно, но ожидает тайм-аут, пока он не станет True
(объект не существует).
Если это так, вы можете попробовать это:
Public Function NotExist(ByRef test_object, ByVal timeout)
Deadline = DateAdd("s", timeout, Now)
While test_object.Exist(0)
If DateDiff("s", Now, Deadline) < 0 Then
NotExist = False
Exit Function
End If
test_object.RefreshObject ' not sure if this is needed
Wend
NotExist = True
End Function
RegisterUserFunc "JavaObject", "NotExist", "NotExist"
Единственная тонкая часть здесь - это RefreshObject
, который, на мой взгляд, был необходим, но он работал без него, когда я попробовал его с Web-надстройкой (я не использую Java).
Я думаю, что это необходимо, поскольку UFT кэширует объект, если он найден, но, возможно, Exist
очищает этот кеш (дальнейшее прочтение этого механизма кэширования ).