Page 1 of 1

Need help with a function

Posted: Mon Mar 22, 2010 1:07 pm
by devenb
Hi,
I was trying to write a function which would replace the need of adding delay to the code when waiting for applications to load.
Whenever any application is initialised this function would be called till the application form is visible.

Here is the sample code:

public static void Start()
{
repo.BaseMenuBar.Outlookshortcut.Click(Location.Center);
wait_For_Application_ToLoad(repo.Outlookform.Outlookform);
}

public static void wait_For_Application_ToLoad(Element application_Path)
{
try {
if (application_Path.Visible==false) {
Delay.Ms(2000);
wait_For_Application_ToLoad(application_Path);
}
}
catch (RanorexException) {

}
}


Now even when the form is visible, the validation "application_Path.Visible" is validated as false and the loop continues.
I know I am certainly missing a step somewhere or is it a wrong way of coding this?
Any help would be great.

Thanks,
Deven B.

Re: Need help with a function

Posted: Mon Mar 22, 2010 2:46 pm
by Support Team
Hi,

the problem with your function seems that the window handle on start is not the same when you call the function. This means when your are coding a validation like
while(repo.FormInbox.OutlookForm.Visible == false)
Delay.Milliseconds(20);
, on every while-cycle Ranorex is searching for the element and get the attribute of the item. In your case Ranorex is searching once for the element and doesn't change the attribute in your function.

Regards,
Peter
Ranorex Support Team

Re: Need help with a function

Posted: Mon Mar 22, 2010 3:55 pm
by devenb
Support Team wrote:Hi,

the problem with your function seems that the window handle on start is not the same when you call the function. This means when your are coding a validation like
while(repo.FormInbox.OutlookForm.Visible == false)
Delay.Milliseconds(20);
, on every while-cycle Ranorex is searching for the element and get the attribute of the item. In your case Ranorex is searching once for the element and doesn't change the attribute in your function.

Regards,
Peter
Ranorex Support Team
Hi Peter,
Thanks for the reply.
I executed the code in debug mode with a breakpoint at line "if (application_Path.Visible==false) {".
When I hover the mouse over the application_Path it shows me the name of the form which I am looking for. Doesnt it means that it is getting the attribute of the element correctly?
Any other way of coding this?

Cheerz,
Deven B.

Re: Need help with a function

Posted: Mon Mar 22, 2010 5:01 pm
by Support Team
Hi,

the problem is that Outlook generates a Splash Screen and IMHO it is more wise to use a menubar of outlook to validate if the programm is started, because there is more guarantee that the programm is finished with loading.

Regards,
Peter
Ranorex Support Team

Re: Need help with a function

Posted: Mon Mar 22, 2010 5:11 pm
by devenb
Support Team wrote:Hi,

the problem is that Outlook generates a Splash Screen and IMHO it is more wise to use a menubar of outlook to validate if the programm is started, because there is more guarantee that the programm is finished with loading.

Regards,
Peter
Ranorex Support Team
Hi Peter,

Outlook is just an example which I was using. Sorry for the miscommunication.
We have different AUT and in past I have used the Delay option more than 100 times to wait for an window or form to get loaded. Since I have started working on a new project I wanted to substitute that with a simple function to which I can pass any element (form or window) and the function will wait till it is loaded.
Am I calling the function correctly?

Cheerz,
Deven B.

Re: Need help with a function

Posted: Tue Mar 23, 2010 12:50 pm
by Support Team
What your method actually does, is waiting till the Element you pass in gets visible. If Ranorex cannot find the element, the wait_For_Application_ToLoad method will never be called, since getting the element for the repository item (e.g. repo.Outlookform.Outlookform) will already throw an exception.

If that is what your method should do, then everything's correct :-)

The reason why your code is not working for Outlook is not the wait_For_Application_ToLoad method, but the element you pass in to that method. Like Peter, I guess that your Outlookform.Outlookform repository item actually finds the Outlook splash screen, not the Outlook main window. Try to adapt the RxPath of that repository item such that it does not match the splash screen, e.g. (like Peter suggested) wait for a Outlook menu item to get visible.

Regards,
Alex
Ranorex Support Team

Re: Need help with a function

Posted: Thu Mar 25, 2010 12:46 pm
by devenb
Hi Alex,

Thanks for the information.
Yes passing an element to the wait_For_Application_ToLoad method, which is not yet visible throws an exception :(.
Is there a way where I can pass any control of an invisible element without an exception been thrown by Ranorex?
Like passing a Rxpath as string etc?

Cheerz,
Deven B.

Re: Need help with a function

Posted: Thu Mar 25, 2010 1:14 pm
by Support Team
devenb wrote:Like passing a Rxpath as string etc?
You already answered your question: pass the RxPath. Or use the RepoItemInfo object corresponding to the repository item. I.e. for a repository item named "MyItem", pass in the "MyItemInfo". See the following forum thread for more info: http://www.ranorex.com/forum/post4535.html

Regards,
Alex
Ranorex Support Team