Check if object exists
Hello everyone,
I want to create a function which returns true if an object exist and is visible on screen without waiting for the full timeout period.
Here is the function I tried to create:
def isObjectVisible(object):
name = object.Name
parent = object.Parent
if parent.WaitChild(name, 100).Exists:
return object.Visible
return False
The issue I encountered is that accessing the name property of the object causes the test to wait 10 seconds for the name property
I there a way to achieve this result?
I can create another function which takes the parent and child name as parameter but that is cumbersome.
Hi,
Specific of your code is that you are not passing an object to your function, but you are passing unresolved aliased name. As the name is unresolved, we do not know whether the object exists or not. The name is resolved when you try to call its method or property (e.g. .Exists). At this moment TestComplete will wait for the object to appear if the object does not exist.
In order to avoid the above situation, you may modify your function so that it accepts two arguments - the root parent that always exists (as per your previous description) and the name of its aliased child, existence of which you like to check.
E.g. (JScript, as I am not good with Python)
function IfAliasedChildExists(oRoot, strChild) {
return oRoot.WaitAliasChild(strChild, 0).Exists;
}
function main {
Log.Message(IfAliasedChildExists(Aliases.MyApp, "Dialog1"));
}
P.S. If, for some reason, you prefer not to use function with two parameters, you may consider something like this (JScript pseudocode):
function main {
Log.Message(IfAliasedChildExists("Aliases.MyApp.Dialog1"));
}
function IfAliasedChildExists(strAliasedFullName) {
var strRoot = ...; // get here everything up to and including last point (i.e.: "Aliases.MyApp.")
var strObj = ...; // get here only the part after last point (i.e.: "Dialog1")
var obj = eval(strRoot + "WaitAliasChild(" + strObj + ", 0)"); // parameter of eval after concatenation must result in the string like in my first example: "Aliases.MyApp.WaitAliasChild("Dialog1", 0)".
return obj.Exists;
}