Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIAutomation: Check if element exists before tapping

We have a iPad app which includes a two-column news reader. The left view contains the list of news of which some link directly to a news and some push another view controller with another list of news. This will also cause a UIButton to be set as the leftBarButtonItem of the navigation bar. If we are on first level, a simple image that cannot be tapped will be the leftBarButtonItem.

My goal is now to have a test that taps every news on the first level. If a news leads to a second level list, it should tap the UIButton in the navigation bar.

How can I check, if the leftBarButtonItem is "tappable"? Since it can be either an image or a button, just calling navigationBar().leftButton().tap() will lead to an error if it's an image.

I'm also using the tuneup library if that's any help.

like image 442
Sebastian Wramba Avatar asked Jul 08 '12 15:07

Sebastian Wramba


1 Answers

Almost all elements in UIAutomation could be tapped. It does not matter if it is an Image, View or a Button. You will get an error in case an object you are trying to tap is invalid. How to check:

if ( navigationBar().leftButton().checkIsValid() )
{
     navigationBar().leftButton().tap();
}
else
{
     //do what you need.
}

or you can check if an object you are trying to tap is a button, for example (not the best way but it works):

if ( navigationBar().leftButton().toString() == "[object UIAButton]" )
{
    navigationBar().leftButton().tap();
}
else
{
     //do what you need.
}

checkIsValid() is available for all UI elements. It will return true if an object exists. toString() will return [object UIAElementNil] if element is invalid or will return [object UIAButton] or [object UIAImage].

Also try to use Apple documentation: http://developer.apple.com/library/ios/#documentation/ToolsLanguages/Reference/UIAElementClassReference/UIAElement/UIAElement.html

like image 125
Sh_Andrew Avatar answered Nov 08 '22 13:11

Sh_Andrew